2011-05-31 183 views
1

,所以我在加載網頁vb.net一個循環,填寫表單,並點擊提交有沒有更好的辦法做到這一點

我目前分別使用這些爲,等待網頁來加載,填寫表單,並點擊提交

Do While Not browser.ReadyState = WebBrowserReadyState.Complete 

      System.Windows.Forms.Application.DoEvents() 
     Loop 

 browser.Document.GetElementById("text").SetAttribute("value", message) 

For Each element As HtmlElement In browser.Document.GetElementsByTagName("input") 


     If element.GetAttribute("type") = "submit" Then 

      element.InvokeMember("click") 

     End If 
    Next 

但我的問題是,大約第五次循環運行後,它在設置屬性的行上出現錯誤。我有一種感覺,它不會在等待網頁加載之前加載表單,這就是爲什麼它是錯誤的。

有沒有人知道更好的方法來做到這一點?

+0

什麼是錯誤? – 2011-05-31 21:22:14

+0

System.NullReferenceException未處理 – Bigandrewgold 2011-05-31 22:02:23

+0

不能使用'DocumentComplete'事件嗎? – CodeWrite 2011-06-03 11:49:35

回答

0

也許元素「文本」尚未加載或不在頁面上?

你可以做一些JavaScript來完成這項任務,並將其注入到頁面中。

這裏是如何在JavaScript中的「點擊」: https://developer.mozilla.org/en/DOM/document.createEvent

+0

我知道頁面的「文本」部分沒有加載,這是什麼給我的錯誤,我怎麼能解決這個問題。 – Bigandrewgold 2011-06-01 02:35:26

+0

而不是尋找一個條件的無限循環,它應該註冊一個負載處理程序,在VB看起來像是被稱爲DocumentCompleted,請參閱上面的其他答案。 – NoBugs 2011-06-01 14:52:21

1

您可以使用DocumentCompleted事件,這個事件可以確保您的文件已準備就緒,以及所有必需的部分加載

Private Sub browser_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles browser.DocumentCompleted 
    ' YOUR FORM FILLING CODE HERE 


End Sub 

和表單提交你可以使用,形式'提交()這樣的方法

browser.Document.GetElementById("text").DOMElement.form.submit() 
+0

我能看到的唯一的問題是,當我點擊提交它加載一個新的頁面,所以它點擊後提交wouldnt它只是重新運行是什麼在這個子和錯誤,因爲沒有表格填寫? – Bigandrewgold 2011-06-01 18:46:47

+1

在爲其設置值之前,您可以檢查browser.Document.GetElementById(「text」)IsNot Nothing'。 但我會在'DocumentCompleted'事件中使用我的fom填充代碼來確保頁面被完全加載 – CodeWrite 2011-06-02 08:36:34

相關問題