最近写一个程序,需要操作webbrowser里面的dom元素。
头痛在如何判断webbrowser是否完全加载完毕。
用DocumentCompleted事件或者判断IsBusy属性都遇到了各种各样的问题,比如webbrower里面的网页包含了跳转代码,在IsBusy为false之后,开始dom操作的时候,webbrower其实又在加载新网页,造成后面程序出错。
后来自己写了一个sub用来等待网页加载完成,基本满足了需求。
如下,登录百度的例子
WebBrowser1.Url = New Uri("http://passport.baidu.com/?logout")
waitwebCompleted()
WebBrowser1.Document.GetElementById("username_normal").SetAttribute("Value", “aaa”)
WebBrowser1.Document.GetElementById("normModPsp").SetAttribute("Value", "bbb")
waitwebCompleted()的代码如下
Private Sub waitwebCompleted()
Do
If WebBrowser1.IsBusy Then : Application.DoEvents() '如果isbusy就继续执行
Else
Dim tmpNow As Date = Now
Do Until WebBrowser1.IsBusy Or Now.Subtract(tmpNow).Seconds > 0.5
Application.DoEvents()
Loop
If WebBrowser1.IsBusy Then : Continue Do
Else : Exit Sub
End If '如果在0.5秒之内IsBusy始终为false没有变化,就结束
End If
Loop
End Sub
但是总感觉这样做很繁琐。
不知道大家在处理类似问题的时候是怎么做的。