Vb.net 等待internet explorer加载所有内容?
我正在抓取一个网页,并等待internet explorer完成加载,但由于某些原因,它不是。我试图在页面上获取一个值,但是等待部分没有等待,因此当应该有值时,该值返回为空IE页面已完成加载,但页面上元素的值尚未加载。是否有方法等待所有元素完成加载,然后再继续下一行代码?这是我的密码:Vb.net 等待internet explorer加载所有内容?,vb.net,web-scraping,Vb.net,Web Scraping,我正在抓取一个网页,并等待internet explorer完成加载,但由于某些原因,它不是。我试图在页面上获取一个值,但是等待部分没有等待,因此当应该有值时,该值返回为空IE页面已完成加载,但页面上元素的值尚未加载。是否有方法等待所有元素完成加载,然后再继续下一行代码?这是我的密码: Dim IE As Object Dim myvalue as string IE = CreateObject("internetexplorer.application") IE.navigate("my
Dim IE As Object
Dim myvalue as string
IE = CreateObject("internetexplorer.application")
IE.navigate("mypage")
While Not IE.ReadyState = WebBrowserReadyState.Complete
Application.DoEvents()
End While
myValue = IE.document.getElementById("theValue").getAttribute("value")
Debug.Print(myValue)
不应使用
Application.DoEvents()
来保持UI的响应性!我真的怎么强调都不过分!经常使用它是一种糟糕的黑客行为,它只会造成比它解决的问题更多的问题
有关更多信息,请参阅:
正确的方法是使用,当页面(或其子部分,如iframe
)完全加载时,会引发。下面是如何使用它的一个简单示例:
解决方案资源管理器中右键单击项目,然后按添加引用…
COM
选项卡,找到名为Microsoft Internet Controls
的参考,然后按OK
SHDocVw
名称空间导入要使用此名称空间的文件,并创建InternetExplorer
类型的类级别WithEvents
变量,以便可以使用订阅订阅事件只是一个想法,但是您是否首先验证了您是否可以转到此页面并使用大多数浏览器在F12中使用的内置调试器?您可以通过这种方式直接测试javascript:“document.getElementById(“theValue”).getAttribute(“value”)”),并确保它是正确的。首先,不要使用
Application.DoEvents()
,以保持UI的响应性!这是坏习惯!请阅读:。@djangojazz是的,该值是在internet explorer完成加载后加载的,因此它跳过了myValue部分,而不是真正的值。因为您显然在使用WinForms,创建一个.NET的实例并订阅它。我喜欢这样做,但webbrowser在访问网页时会发出警报,我已经在webbrowser上关闭了警报,但这会给我带来麻烦,因此我会朝这个方向走。我可以暂停程序5秒钟,但如果不需要的话,我不想等待整个5秒钟。@pokemon_-Man:太快了,你在接受之前确保用你的代码正确测试了吗?
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
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