我正在抓一个网页,并等待网络浏览器完成加载,但由于某种原因它不是。我正在尝试在页面上获取值,但等待部分没有等待,因此当应该有值时,值返回空白。 IE页面已完成加载,但页面上元素的值尚未加载。有没有办法在继续下一行代码之前等待所有元素加载完成?这是我的代码:
<div class="wrapper">
<div class="box">
Left Side Menu
</div>
<div class="box">
Random Content
</div>
<div class="box">
Right Side Menu
</div>
</div>
答案 0 :(得分:0)
您不应使用Application.DoEvents()
以保持您的用户界面响应!我真的无法强调这一点!不仅经常使用它是一个糟糕的黑客,它只会产生比它解决的更多的问题。
有关详细信息,请参阅:Keeping your UI Responsive and the Dangers of Application.DoEvents。
正确的方法是使用InternetExplorer.DocumentComplete
event,这是在页面(或其子部分,例如iframe
)完全加载时引发的。这是一个如何使用它的简短示例:
在Solution Explorer
中右键点击您的项目,然后按Add Reference...
转到COM
标签,找到名为Microsoft Internet Controls
的引用,然后按OK
。
将SHDocVw
命名空间导入到您要使用它的文件中,并创建类型为WithEvents
的类级InternetExplorer
变量,以便您可以订阅Handles
clause。
瞧!
Imports SHDocVw
Public Class Form1
Dim WithEvents IE As New InternetExplorer
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
IE.Navigate("http://www.google.com/")
End Sub
Private Sub IE_DocumentComplete(pDisp As Object, ByRef URL As Object) Handles IE.DocumentComplete
MessageBox.Show("Successfully navigated to: " & URL.ToString())
End Sub
End Class
或者,您也可以使用lambda expression
在线订阅该活动Imports SHDocVw
Public Class Form1
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim IE As New InternetExplorer
IE.Navigate("http://www.google.com/")
AddHandler IE.DocumentComplete, Sub(pDisp As Object, ByRef URL As Object)
MessageBox.Show("Successfully navigated to: " & URL.ToString())
End Sub
End Sub
End Class