2012-01-28 26 views
6

Tôi muốn tạo tập lệnh bằng PowerShell để kiểm tra trạng thái chuyến bay. Nhưng tôi không thể đặt giá trị hộp văn bản.PowerShell - Đối tượng IE, Đặt lỗi giá trị

Làm cách nào để khắc phục sự cố? Cảm ơn bạn trước!

Lỗi: Không thể tìm thấy giá trị 'thuộc tính' trên đối tượng này; chắc chắn rằng nó tồn tại và có thể cài đặt được.

Code:

#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 

Trả lời

5

Hãy thử điều này:

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

này làm việc cho tôi. Tôi đã tìm thấy ID bằng cách xem mã nguồn thông qua trình duyệt của mình.

Tôi không biết tại sao getElementsByName không hoạt động. Có lẽ ai đó khác có thể làm sáng tỏ điều này?


Edit:

Được rồi, tôi figured it out. getElementsByName trả về một bộ sưu tập. Bạn phải lặp qua bộ sưu tập để đặt giá trị. Vì vậy, mã của bạn sẽ trông giống như sau:

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

Điều này làm việc cho tôi.

+2

Bạn cũng có thể truy cập vào các mục trong bộ sưu tập trực tiếp bằng cách sử dụng các 'mục (n) 'phương pháp. ví dụ. '$ ie.document.getElementsByName (" flightNumber "). item (0) .value'. Điều này dễ dàng hơn nếu bạn chỉ có một phần tử trong bộ sưu tập và không muốn thiết lập một vòng lặp cho nó. Tuy nhiên, hãy chắc chắn 'getElementsByName' trả về giá trị không null trước tiên! –

1

Rất đơn giản, chỉ cần tìm tên thẻ:

$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

Các vấn đề liên quan