Web 浏览器控件 - 依次导航到 URL
Web Browser Control - Navigate to URL one after the other
我正在做一个 VB.Net class 库项目,我有一个 Web 浏览器控件(在一个表单中),我用它多次导航到同一个 URL在这个特定的序列中:
让我们假设 URL 是:https://www.google.com/submitForm
循环开始
- 导航到 URL
- 导航的文档完成事件URL
- 执行DOM操作并提交表单
- 关闭网络浏览器表单
循环结束
代码:
Public Sub customNavigation()
For j = 0 To listOfUrls.Count - 1
testWebBrowserForm = New WebBrowserForm(Me)
Dim browserSize As System.Drawing.Size = New Size(100, 100)
testWebBrowserForm.Size = browserSize
testWebBrowserForm.FormBorderStyle = FormBorderStyle.FixedSingle
testWebBrowserForm.Show()
testWebBrowserForm.SendToBack()
testWebBrowserForm.Location = New Point(100, 100)
testWebBrowserForm.Navigate(New Uri("https://google.com/submitForm"))
Next
End Sub
// Once the document has completely loaded
Public Sub documentLoadComplete()
Dim submitButton As HtmlElement = Nothing, formEl As HtmlElement = Nothing
Dim attachmentInputElements As Windows.Forms.HtmlElementCollection = testWebBrowserForm.webBrowser.Document.GetElementsByTagName("input")
Dim formElements As Windows.Forms.HtmlElementCollection = testWebBrowserForm.webBrowser.Document.Forms
Dim form As Windows.Forms.HtmlElement = testWebBrowserForm.webBrowser.Document.Forms(0)
For y = 0 To formElements.Count - 1
Dim formelement As HtmlElement = formElements(y)
If formelement.GetAttribute("name").Equals("theForm") Then
formEl = formelement
End If
Next
For i = 0 To attachmentInputElements.Count - 1
Dim inputElement As HtmlElement = attachmentInputElements(i)
If inputElement.GetAttribute("type").Equals("submit") Then
submitButton = inputElement
End If
Next
testWebBrowserForm.webBrowser.Document.InvokeScript("doSomething")
submitButton.InvokeMember("click")
testWebBrowserForm.Close()
End Sub
问题:
每次我尝试 运行 这个循环时,它都会打开多个 Web 浏览器表单,但只会关闭第一个并保持其他表单打开。另外,它确实多次执行导航,但实际上只执行最后一次导航提交。
预期行为:
我希望表单真正经历上述过程,经历每个完成的事件,关闭表单,然后再次开始创建表单、导航和关闭表单。
我自己设法解决了这个问题,并认为我会 post 为可能正在尝试解决类似问题的其他人提供答案。
基本上,我所做的是,我没有一个一个地遍历 URL 的列表,而是等待 documentcomplete 事件完成,一旦完成,我使用相同的 webbrowserform 和执行另一个导航,直到我的所有 URL 都被完全导航,然后我关闭表单。
代码:
Public currentUrlIndex As Integer = Nothing, currentUrl As String = Nothing
Public Sub customNavigation()
testWebBrowserForm = New WebBrowserForm(Me)
Dim browserSize As System.Drawing.Size = New Size(100, 100)
testWebBrowserForm.Size = browserSize
testWebBrowserForm.FormBorderStyle = FormBorderStyle.FixedSingle
testWebBrowserForm.Show()
testWebBrowserForm.SendToBack()
testWebBrowserForm.Location = New Point(100, 100)
currentUrlIndex = 0
currentUrl = listOfUrls(currentUrlIndex)
testWebBrowserForm.Navigate(New Uri(currentUrl))
End Sub
// Once the document has completely loaded
Public Sub documentLoadComplete()
Dim submitButton As HtmlElement = Nothing, formEl As HtmlElement = Nothing
Dim attachmentInputElements As Windows.Forms.HtmlElementCollection = testWebBrowserForm.webBrowser.Document.GetElementsByTagName("input")
Dim formElements As Windows.Forms.HtmlElementCollection = testWebBrowserForm.webBrowser.Document.Forms
Dim form As Windows.Forms.HtmlElement = testWebBrowserForm.webBrowser.Document.Forms(0)
For y = 0 To formElements.Count - 1
Dim formelement As HtmlElement = formElements(y)
If formelement.GetAttribute("name").Equals("theForm") Then
formEl = formelement
End If
Next
For i = 0 To attachmentInputElements.Count - 1
Dim inputElement As HtmlElement = attachmentInputElements(i)
If inputElement.GetAttribute("type").Equals("submit") Then
submitButton = inputElement
End If
Next
testWebBrowserForm.webBrowser.Document.InvokeScript("doSomething")
submitButton.InvokeMember("click")
If currentUrlIndex = listOfUrls.Count - 1 Then
testWebBrowserForm.Close()
Exit Sub
Else
currentUrlIndex = currentUrlIndex + 1
currentUrl = listOfUrls(currentUrlIndex)
testWebBrowserForm.Navigate(New Uri(currentUrl))
End If
End Sub
我正在做一个 VB.Net class 库项目,我有一个 Web 浏览器控件(在一个表单中),我用它多次导航到同一个 URL在这个特定的序列中:
让我们假设 URL 是:https://www.google.com/submitForm
循环开始
- 导航到 URL
- 导航的文档完成事件URL
- 执行DOM操作并提交表单
- 关闭网络浏览器表单
循环结束
代码:
Public Sub customNavigation()
For j = 0 To listOfUrls.Count - 1
testWebBrowserForm = New WebBrowserForm(Me)
Dim browserSize As System.Drawing.Size = New Size(100, 100)
testWebBrowserForm.Size = browserSize
testWebBrowserForm.FormBorderStyle = FormBorderStyle.FixedSingle
testWebBrowserForm.Show()
testWebBrowserForm.SendToBack()
testWebBrowserForm.Location = New Point(100, 100)
testWebBrowserForm.Navigate(New Uri("https://google.com/submitForm"))
Next
End Sub
// Once the document has completely loaded
Public Sub documentLoadComplete()
Dim submitButton As HtmlElement = Nothing, formEl As HtmlElement = Nothing
Dim attachmentInputElements As Windows.Forms.HtmlElementCollection = testWebBrowserForm.webBrowser.Document.GetElementsByTagName("input")
Dim formElements As Windows.Forms.HtmlElementCollection = testWebBrowserForm.webBrowser.Document.Forms
Dim form As Windows.Forms.HtmlElement = testWebBrowserForm.webBrowser.Document.Forms(0)
For y = 0 To formElements.Count - 1
Dim formelement As HtmlElement = formElements(y)
If formelement.GetAttribute("name").Equals("theForm") Then
formEl = formelement
End If
Next
For i = 0 To attachmentInputElements.Count - 1
Dim inputElement As HtmlElement = attachmentInputElements(i)
If inputElement.GetAttribute("type").Equals("submit") Then
submitButton = inputElement
End If
Next
testWebBrowserForm.webBrowser.Document.InvokeScript("doSomething")
submitButton.InvokeMember("click")
testWebBrowserForm.Close()
End Sub
问题: 每次我尝试 运行 这个循环时,它都会打开多个 Web 浏览器表单,但只会关闭第一个并保持其他表单打开。另外,它确实多次执行导航,但实际上只执行最后一次导航提交。
预期行为: 我希望表单真正经历上述过程,经历每个完成的事件,关闭表单,然后再次开始创建表单、导航和关闭表单。
我自己设法解决了这个问题,并认为我会 post 为可能正在尝试解决类似问题的其他人提供答案。
基本上,我所做的是,我没有一个一个地遍历 URL 的列表,而是等待 documentcomplete 事件完成,一旦完成,我使用相同的 webbrowserform 和执行另一个导航,直到我的所有 URL 都被完全导航,然后我关闭表单。
代码:
Public currentUrlIndex As Integer = Nothing, currentUrl As String = Nothing
Public Sub customNavigation()
testWebBrowserForm = New WebBrowserForm(Me)
Dim browserSize As System.Drawing.Size = New Size(100, 100)
testWebBrowserForm.Size = browserSize
testWebBrowserForm.FormBorderStyle = FormBorderStyle.FixedSingle
testWebBrowserForm.Show()
testWebBrowserForm.SendToBack()
testWebBrowserForm.Location = New Point(100, 100)
currentUrlIndex = 0
currentUrl = listOfUrls(currentUrlIndex)
testWebBrowserForm.Navigate(New Uri(currentUrl))
End Sub
// Once the document has completely loaded
Public Sub documentLoadComplete()
Dim submitButton As HtmlElement = Nothing, formEl As HtmlElement = Nothing
Dim attachmentInputElements As Windows.Forms.HtmlElementCollection = testWebBrowserForm.webBrowser.Document.GetElementsByTagName("input")
Dim formElements As Windows.Forms.HtmlElementCollection = testWebBrowserForm.webBrowser.Document.Forms
Dim form As Windows.Forms.HtmlElement = testWebBrowserForm.webBrowser.Document.Forms(0)
For y = 0 To formElements.Count - 1
Dim formelement As HtmlElement = formElements(y)
If formelement.GetAttribute("name").Equals("theForm") Then
formEl = formelement
End If
Next
For i = 0 To attachmentInputElements.Count - 1
Dim inputElement As HtmlElement = attachmentInputElements(i)
If inputElement.GetAttribute("type").Equals("submit") Then
submitButton = inputElement
End If
Next
testWebBrowserForm.webBrowser.Document.InvokeScript("doSomething")
submitButton.InvokeMember("click")
If currentUrlIndex = listOfUrls.Count - 1 Then
testWebBrowserForm.Close()
Exit Sub
Else
currentUrlIndex = currentUrlIndex + 1
currentUrl = listOfUrls(currentUrlIndex)
testWebBrowserForm.Navigate(New Uri(currentUrl))
End If
End Sub