问题描述
|
所以我在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属性的行上运行了srrors。而且我有一种感觉,它在尝试填写表单之前没有等待网页加载,这就是为什么它会出错。
有谁知道更好的方法吗?
解决方法
您可以使用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
对于表单提交,您可以使用像这样的forms'Submit()方法
browser.Document.GetElementById(\"text\").DOMElement.form.submit()
, 元素\“ text \”可能尚未加载或不在页面上?
您可以制作一些JavaScript来完成该任务,然后将其注入页面。
这是在javascript中制作\“ click \”的方法:
https://developer.mozilla.org/en/DOM/document.createEvent