2011-05-31 120 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

相关问题