异步等待网页加载

本示例可参考示例文件"CaseStudy\WebViewer\异步等待网页.Table"。

很多时候,我们需要在网页加载结束后执行一些操作,例如网页数据抓取程序(爬虫),通常我们会使用NavigationCompleted事件。

使用NavigationCompleted事件能满足多数场景的需求,但也有不足,因为打开网页的代码和抓取数据的代码要分别写在两个事件中,如果要抓取多种网页的数据,那么全部写在NavigationCompleted也会导致维护不便。

WebViewer提供了一个NavigateWithWebResourceRequestAsync方法,可以用Await关键词等待该方法加载完成网页,语法为:

Await wv.NavigateWithWebResourceRequestAsync(request, timeout)

参数说明:

Request 通过CreateWebResourceRequest方法构建的访问请求,参考:构建访问请求
timeout 可选,等待的秒数,默认30秒,如果在设定时间内没有成功加载网页,则退出该方法。

返回值说明:

0 成功加载了网页
1 在timeout参数指定的时间内,没有打开网页,也就是超时。
-1 网页加载失败

示例一

'''Async
Dim
wv As WebViewer = e.Form.Controls("WebViewer1").WebViewer
'1
、构造请求体
Dim
request = wv.CreateWebResourceRequest( "https://free.mockerapi.com/headers", "GET", Nothing)
'2
、设置请求头
request.Headers.SetHeader(
"Authorization", "Foxtable")
request.Headers.SetHeader(
"User-Agent", "WebViewer")
request.Headers.SetHeader(
"Custom-Param", "Foxtable 2008")
'3
、前面都一样,访问改用NavigateWithWebResourceRequestAsync方法,请指定等待时间为10秒
Dim
ret As Integer = Await wv.NavigateWithWebResourceRequestAsync(request, 10) '等待10秒
If
ret = 0 Then
    MessageBoxA.Show(
"网页加载成功")
ElseIf
ret = 1 Then
    wv.Stop() '取消继续加载
    MessageBoxA.Show(
"网页加载超时")
Else

    MessageBoxA.Show(
"网页加载错误")
End
If

示例二

'''Async
Dim
wv As WebViewer = e.Form.Controls("WebViewer1").WebViewer
'1.
构造JSON数据流
Dim
json As String = "{""userName"":""test"",""age"":20,""status"":1}" 'JSON字符串
Dim
jsonBytes As Byte() = Encoding.UTF8.GetBytes(json) '将JSON字符串转成字节数组
Dim
jsonStream As New MemoryStream(jsonBytes) '将字节数组转成字节流
' 2.
创建请求体
Dim
request = wv.CreateWebResourceRequest( "https://free.mockerapi.com/post", "POST", jsonStream)
'3.JSON
一般用设置Content-Type
request.Headers.SetHeader(
"Content-Type", "application/json; charset=utf-8")
'4.
通常还需要一些授权设置
request.Headers.SetHeader(
"Authorization", "Bearer 你的Token")
'5.
前面都一样,访问改用NavigateWithWebResourceRequestAsync方法,指定等待时间为10秒
Dim
ret As Integer = Await wv.NavigateWithWebResourceRequestAsync(request, 10) '等待10秒
If
ret = 0 Then
    MessageBoxA.Show(
"网页加载成功")
ElseIf
ret = 1 Then
    wv.Stop() '取消继续加载
    MessageBoxA.Show(
"网页加载超时")
Else

    MessageBoxA.Show(
"网页加载错误")
End
If


本页地址:http://www.foxtable.com/webhelp/topics/7009.htm