2017-02-15 26 views
0

我想在一個登錄表單,進入本網站信息的特定頁面上:http://www.clover.com/home/login的getElementById失敗..雖然只有

我建立一個窗口形成應用在VB.net,2015年VS,以及使用WebBrowser控件。我在我的WB控制下面的代碼DocumentCompleted事件:

Dim PWord As HtmlElement 
PWord = wb.Document.GetElementById("password") 

If PWord IsNot Nothing Then 
    PWord.InnerText = "password" 
Else 
    MsgBox("fail..Again!") 
End If 

對於我的生活,我不能確定爲什麼我不能找到「密碼」字段(或電子郵件字段,登錄按鈕等)上這個頁面是他們的ID。無論我嘗試使用哪個元素的ID,我都會收到失敗消息。

小小的背景:我完全失明,並使用屏幕閱讀器(用於窗戶的下巴)來訪問我的電腦,所以如果我有皇室搞砸這篇文章(錯誤的論壇部分,不正確地使用鏈接/代碼標籤等)我非常抱歉。

+0

@叉車:沒有。這是有效的VB.NET代碼:https://msdn.microsoft.com/en-us/library/system.windows.forms.htmldocument.getelementbyid(v=vs.110).aspx –

+0

嗯..代碼的作品,我已經與其他網頁(例如Gmail登錄頁面)進行了測試..它只是不會在此頁面上找到此元素。 –

+0

奇怪...您的代碼看起來沒問題。不幸的是,我無法訪問IDE,因此目前無法對此進行測試。 –

回答

1

它看起來像該網站在初始頁面加載後異步加載數據。解決方法是在您的DocumentCompleted事件中啓用一個計時器。滴答處理程序應該是您當前的代碼。三秒似乎足夠的間隔:

Private Sub wb_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles wb.DocumentCompleted 
    Timer1.Start() 
End Sub 

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 
    Dim PWord As HtmlElement = wb.Document.GetElementById("password") 

    If PWord IsNot Nothing Then 
     PWord.InnerText = "password" 
    Else 
     MsgBox("fail..Again!") 
    End If 

    Timer1.Stop() 
End Sub 
+0

像這樣的延遲不是很可靠......如果網站繼續加載數據,那麼'DocumentCompleted'應該被多次觸發。嘗試檢查'wb.ReadyState = WebBrowserReadyState.Complete'或'wb.IsBusy = False',然後執行代碼並查看它是否有效。如果是這樣,那麼它取代了計時器,也更可靠。 –

+0

或者,你可以有一個定時器,檢查每個滴答如果元素存在。 –

+0

您的解決方案效果非常好。我會添加一些檢查,因爲我同意猜測何時打勾不是很優雅,但答案是現貨。 –

相關問題