当前位置: 首页 > 知识库问答 >
问题:

等待Internet Explorer加载所有内容?

谢典
2023-03-14

我正在抓取一个网页,并等待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)

共有1个答案

梁浩
2023-03-14

您不应该使用应用程序。DoEvents()以保持用户界面的响应性!我真的怎么强调都不过分!经常使用它是一种糟糕的黑客行为,它只会造成比它解决的问题更多的问题。

有关更多信息,请参阅:保持您的UI响应和应用程序的危险。多恩特。

正确的方法是使用InternetExplorer。当页面(或其子部分,如iframe)完全加载时引发的Document完成事件。下面是一个如何使用它的简单示例:

>

转到COM选项卡,找到名为Microsoft Internet Controls的参考,然后按OK

SHDocVw命名空间导入到您要使用它的文件中,并创建一个类型为InternetExplorer的类级BackEvents变量,以便您可以通过Handles子句订阅事件...

瞧!

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表达式在线订阅事件:

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
 类似资料:
  • 问题内容: 我正在尝试使用效果很好的jQuery执行Ajax调用。我使用成功事件来显示数据。但是,似乎在加载外部HTML文件后就触发了成功。如果图像较大,则显示后将继续加载。在所有内容完全加载后,是否可以显示内容?这是代码: 问题答案: @alex编写的插件由于某些原因对我不起作用…我不知道为什么。但是他的代码确实鼓舞了我想出一个对我有用的更轻量级的解决方案。它使用jQuery Promise。请

  • 我试图创建一个等待加载页面的方法,但我出现了一个错误。可能我没有正确使用这个方法。 错误是:

  • 问题内容: Selenium是否有一种通用方法可以等待所有ajax内容加载完毕?(不绑定到特定网站-因此它适用于每个ajax网站) 问题答案: 您需要等待Javascript和jQuery完成加载。执行Javascript来检查is 和is ,这意味着JS和jQuery加载已完成。

  • 我使用和来获取网页请求的所有资源的(包括广告的URL,通常位于嵌套的iframes中)。但是,这可能不适用于和请求中的资源。阅读有关这方面的文档并查看其他答案,似乎可以使用等待元素出现。但是在我的情况下,我必须加载几个网站(几千个站点),可能没有任何公共元素可以等待。我一直在使用,因为秒似乎足够长的时间让所有嵌套的iframes最终出现。我想知道是否有人能证实这是否是正确的方法,是否有任何其他方法

  • 问题内容: 我想抓取无限滚动实现的页面的所有数据。以下python代码有效。 这意味着每次我向下滚动到底部时,我都需要等待5秒,这通常足以使页面完成加载新生成的内容。但是,这可能不是省时的。该页面可能会在5秒内完成新内容的加载。每次向下滚动时,如何检测页面是否完成了新内容的加载?如果可以检测到此情况,知道页面完成加载后,可以再次向下滚动以查看更多内容。这样更省时。 问题答案: 该会通过等待页面加载

  • 我正在使用php执行一个远程url,使用文件内容。如果file_get_contents检索到的内容不是空的,那么我会回显一条消息,说是complete。 然而,远程网址有时可能需要一点时间来加载,因为这整个PHP页面需要很长时间来加载。当它完成时,显示结果为完成或错误 谢谢