2012-01-28 15 views
6

Voglio creare uno script con PowerShell per verificare lo stato del volo. Ma non è possibile per me impostare il valore della casella di testo.PowerShell - Oggetto IE, Errore valore impostato

Come posso risolvere il problema? Grazie in anticipo!

Errore: Impossibile trovare "valore" di proprietà su questo oggetto; assicurati che esista e sia impostabile.

Codice:

#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 

risposta

5

Prova questa:

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

Questo funziona per me. Ho trovato l'ID guardando il codice sorgente attraverso il mio browser.

Non so perché getElementsByName non funzioni. Forse qualcun altro può far luce su questo?


Edit:

Va bene, ho capito. getElementsByName restituisce una raccolta. Devi scorrere la collezione per impostare il valore. Quindi il tuo codice sarebbe simile a questo:

#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 
    } 

Questo ha funzionato per me.

+2

È inoltre possibile accedere agli elementi della collezione direttamente usando il 'punto (n) metodo'. per esempio. '$ Ie.document.getElementsByName ("numero di volo"). Item (0) .value'. Questo è più facile se si ha un solo elemento nella collezione e non si vuole creare un ciclo per esso. Tuttavia, assicurati che 'getElementsByName' restituisca prima un valore non nullo! –

1

Molto semplice, basta cercare il nome del tag:

$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

Problemi correlati