我试图通过.net6+ windows窗体中的控件webview2加载一个新网页,我使用列表框提取任何单个项目并将其添加到URL以加载到webview上。
11
22
33
44
55
我想在按下一个按钮,一个循环开始加载一个接一个,这些项目的每一个像
WebView21.Source = New Uri("https://google.it" & ListBox1.Items.first & "rest of the url")
并且在网页被加载之后,它应该提取它的html来检查是否存在某个字符串
Dim html As String
html = Await WebView21.ExecuteScriptAsync("document.documentElement.outerHTML;")
If html.Contains("Not found") Then
MsgBox("In Vacanza")
Else
MsgBox("Attivo")
End If
End Sub
然后返回到第二个列表框项目,加载WebView,检查HTML等等。
我的问题是如何循环WebView以便逐个选择每个项目,并在while中继续执行这些小操作?p.s.一旦循环到达最后一个列表框项目,是否可以从第一个项目重新开始?非常感谢
编辑1:
我在尝试
Private ReadOnly resetEvent As New ManualResetEvent(False)
Async Sub scanWeb()
For Each listBoxElem As String In ListBox1.Items
resetEvent.Reset()
AddHandler WebView2.CoreWebView2.NavigationCompleted, AddressOf OnNavigationCompleted
WebView2.Source = New Uri("https://ikalogs.ru/tools/map/?page=1&server=22&world=10&state=active&search=city&allies%5B1%5D=&allies%5B2%5D=&allies%5B3%5D=&allies%5B4%5D=&nick=" & listBoxElem & "&ally=&island=&city=&x=&y=")
Await Task.Run(Sub() resetEvent.WaitOne())
RemoveHandler WebView2.CoreWebView2.NavigationCompleted, AddressOf OnNavigationCompleted
Dim html As String
html = Await WebView2.ExecuteScriptAsync("document.documentElement.outerHTML;")
If html.Contains("Not found") Then
DataGridView1.Rows.Add(listBoxElem, "IN vacanza")
Else
DataGridView1.Rows.Add(listBoxElem, "Attivo")
End If
Next
End Sub
Private Sub OnNavigationCompleted(sender As Object, e As CoreWebView2NavigationCompletedEventArgs)
resetEvent.Set()
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
WebView2 = New WebView2()
WebView2.EnsureCoreWebView2Async()
End Sub
但似乎循环没有等待进程结束,而是直接进入下一个列表框项目...
1条答案
按热度按时间k3bvogb11#
最好的方法是在for-each循环中枚举listBox项:(我添加了一个退出方式-简单的鼠标点击窗体-退出循环)
更新**
webview 2控件是用来显示数据的,我对此没有经验。我还建议你使用一个更简单的方法,基于System .NET.WebClient()并与线程相关联。下面是一个有效的代码开始: