所以我在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
但我的问题是,在第五次运行循环后,它会在具有set属性的行上出现错误。我觉得在填写表单之前不会等待网页加载,这就是错误的原因。
有谁知道更好的方法吗?
答案 0 :(得分:1)
您可以使用DocumentCompleted Event,此事件可确保您的文档已准备就绪,并且已加载所有必需的部分
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
并且对于表单提交,您可以使用,形成像这样的'submit()方法
browser.Document.GetElementById("text").DOMElement.form.submit()
答案 1 :(得分:0)
可能元素“text”尚未加载或不在页面上?
您可以制作一些javascript来执行该任务,并将其注入页面。
以下是如何在javascript中进行“点击”: https://developer.mozilla.org/en/DOM/document.createEvent