异步等待网页加载
本示例可参考示例文件"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