Vb.net 等待internet explorer加载所有内容?

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

我正在抓取一个网页,并等待internet explorer完成加载,但由于某些原因,它不是。我试图在页面上获取一个值,但是等待部分没有等待,因此当应该有值时,该值返回为空IE页面已完成加载,但页面上元素的值尚未加载。是否有方法等待所有元素完成加载,然后再继续下一行代码?这是我的密码:

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