2012-01-28 12 views
6

Deseo crear un script con PowerShell para verificar el estado del vuelo. Pero no me es posible establecer el valor del cuadro de texto.PowerShell - Objeto IE, Establecer error de valor

¿Cómo puedo repararlo? ¡Gracias de antemano!

Error: El "valor" de la propiedad no se puede encontrar en este objeto; asegúrese de que exista y que sea configurable.

Código:

#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 

Respuesta

5

Prueba esto:

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

Esto funciona para mí. Encontré la identificación mirando el código fuente a través de mi navegador.

No sé por qué getElementsByName no funciona. Tal vez alguien más puede arrojar algo de luz sobre esto?


Editar:

Vale, lo he descubierto. getElementsByName devuelve una colección. Debe iterar a través de la colección para establecer el valor. Entonces su código sería así:

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

Esto funcionó para mí.

+2

También se puede acceder a los elementos de la colección directamente usando el 'artículo (n)' método. p.ej. '$ ie.document.getElementsByName (" flightNumber "). item (0) .value'. Esto es más fácil si solo tiene un elemento en la colección y no desea configurarlo. Sin embargo, asegúrese de que 'getElementsByName' devuelva primero un valor no nulo. –

1

muy sencillo, sólo tiene que buscar el nombre de la etiqueta:

$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

Cuestiones relacionadas