2012-01-28 14 views
6

Chcę utworzyć skrypt z PowerShell, aby sprawdzić status lotu. Nie jest jednak możliwe ustawienie wartości pola tekstowego.PowerShell - Obiekt IE, błąd wartości ustawienia

Jak mogę to naprawić? Z góry dziękuję!

Błąd: nie można znaleźć właściwości "wartość" dla tego obiektu; upewnij się, że istnieje i można go ustawiać.

Kod:

#Flight Number (Only Lufthansa) 
#For example flight number 
[string]$flightNumber = "LH 3102" 

$ie = new-object -com "InternetExplorer.Application" 
$ie.navigate("http://www.lufthansa.com/de/de/Ankunft-und-Abflug") 
$ie.visible = $true 
sleep 5 
#while ($ie.busy) {sleep -milliseconds 50} 
while($ie.ReadyState -ne 4) {start-sleep -m 100}  

$ie.document.getElementsByName("flightNumber").value = $flightNumber 
#Error 
$ie.document.getElementsByName("flightNumber").IHTMLInputTextElement_value = $flightNumber 
#Error 
$ie.document.getElementsByName("flightNumber").IHTMLInputElement_value = $flightNumber 
#Error 

Odpowiedz

5

Spróbuj tego:

$ie.document.getElementByID("ns_7_CO19VHUC6FFPF0I5O4OBCT2OE4_flightNumber").value = $flightNumber 

Działa to dla mnie. Znalazłem identyfikator, patrząc na kod źródłowy w przeglądarce.

Nie wiem, dlaczego getElementsByName nie działa. Może ktoś inny może rzucić trochę światła na to?


Edit:

Dobra, zdobione. getElementsByName zwraca kolekcję. Musisz przejść przez kolekcję, aby ustawić wartość. Twój kod będzie wyglądał następująco:

#Flight Number (Only Lufthansa) 
#For example flight number 
[string]$flightNumber = "LH 3102" 

$ie = new-object -com "InternetExplorer.Application" 
$ie.navigate("http://www.lufthansa.com/de/de/Ankunft-und-Abflug") 
$ie.visible = $true 
sleep 5 
#while ($ie.busy) {sleep -milliseconds 50} 
while($ie.ReadyState -ne 4) {start-sleep -m 100}  

$elements = $ie.document.getElementsByName("flightNumber") 

Foreach($element in $elements) 
    { 
     $element.value = $flightnumber 
    } 

To zadziałało dla mnie.

+2

Można również uzyskać dostęp do elementów w kolekcji bezpośrednio za pomocą elementu '' (n) metody. na przykład '$ ie.document.getElementsByName (" flightNumber "). item (0) .value'. Jest to łatwiejsze, jeśli masz tylko jeden element w kolekcji i nie chcesz ustawiać dla niego pętli. Upewnij się jednak, że 'getElementsByName' zwraca najpierw wartość inną niż null! –

1

Bardzo proste, wystarczy spojrzeć na nazwy znacznika:

$ie = New-Object -com InternetExplorer.Application 
$ie.visible=$true 

$ie.navigate("http://www.lufthansa.com/de/de/Ankunft-und-Abflug") 
while($ie.ReadyState -ne 4) {start-sleep -m 100} 

# here is where the magic happens 
$termsField = $ie.document.getElementsByName("routeDepartureStationName") 
@($termsField)[0].value ="powershell" 

enter image description here

Powiązane problemy