2017-07-30 58 views
0

我在HTA中有一個VBS腳本,它應該通過嘗試在具有相同憑證的外部網頁上登錄來驗證來自HTA登錄表單的登錄憑證。 「getElementsByClassName方法」似乎並沒有工作,雖然,導致我每次運行輸出腳本時間:getElementsByClassName不能在VBS中工作

Object doesn't support this property or method: 'IE.Document.getElementsByClassName(...).innerHTML'

這個腳本應該在IE中打開登錄頁面,輸入登錄憑據並測試錯誤消息。如果憑據錯誤,並且具有「alert alert-error」類,則頁面上會顯示錯誤消息。

<script language="vbscript"> 
 

 
Set IE = CreateObject("InternetExplorer.application") 
 
IE.Visible = True 
 
IE.navigate "https://www.mypage.com/login" 
 

 
Do Until IE.ReadyState = 4 
 
wscript.sleep 200 
 
Loop 
 

 
IE.Document.All.Item("username").Value = "loginUsername" 
 
IE.Document.All.Item("password").Value = "loginPassword" 
 
IE.Document.All.Item("submit").Click 
 

 
Do Until IE.ReadyState = 4 
 
wscript.sleep 200 
 
Loop 
 

 
set error = IE.Document.getElementsByClassName("alert alert-error").innerHTML 
 
if error="" then 
 
X=MsgBox("You have successfully been logged in!") 
 
else 
 
X=MsgBox("An error occured, you are not logged in.") 
 
end if 
 

 
</script>

我希望這是足夠的信息來解決問題。謝謝!

+0

嘗試設置[標準渲染模式(https://developer.mozilla.org/en- US/docs/Quirks_Mode_and_Standards_Mode)通過設置適當的DOCTYPE。如果這沒有幫助,則退回到舊的IE引擎支持的函數,如'document.getElementById()'。你也可以在你的HTA中包含jQuery。一般來說,我建議在這種情況下使用JavaScript腳本。 – Tomalak

+0

感謝您的快速回答!我已經設置了DOCTYPE(對於HTA,如果這就是你的意思),並且我不能使用getElementById,因爲頁面上出現的錯誤段落沒有ID。這意味着我唯一的選擇就是使用Javascript。你知道我怎麼可以在Javascript中做到這一點? – CALKing

+0

你準備了什麼DOCTYPE? – Tomalak

回答

0

首先,getElementsByClassName()返回指定的className的元素對象的集合,它不是一個單一的對象。所以陳述getElementsByClassName("alert alert-error").innerHTML是無效的,並會產生一個錯誤。

你將不得不枚舉集合的目標類似如下的方式裏面的對象:

var colAlertErrorElements = IE.Document.getElementsByClassName("alert alert-error"); 

for (var i=0; i<colAlertErrorElements.length; i++) { 
    var objErrorElement = colAlertErrorElements[i]; 
    if (objErrorElement.innerHTML == "') { 
     // no error 
    } 
    else { 
     // error 
    } 
} 
相關問題