首页 > 解决方案 > 在 VBA 中检查浏览器页面是否就绪的最佳方法

问题描述

我已经看到了三种不同的方法来检查我正在导航到的页面是否准备好。如下面的示例代码所示。

在我看来,方法 1 是最好的,但希望那里的专家能说出其他情况甚至更好……如果有不同的地方,请提供正确的方法。

这是示例代码

Sub OpenBrowser()
    Dim vOBJBROWSER As Object
    Set vOBJBROWSER = CreateObject("InternetExplorer.Application")

    vOBJBROWSER.Navigate "http://stackoverflow.com"

    'Method 1
    Do While vOBJBROWSER.Busy Or vOBJBROWSER.ReadyState <> 4
        DoEvents
    Loop

    'Method 2
    Do While vOBJBROWSER.ReadyState < 4
        DoEvents
    Loop
    
    'Method 3
    Do
    Loop Until vOBJBROWSER.ReadyState = READYSTATE_COMPLETE

    vOBJBROWSER.Visible = True
End Sub

标签: excelvbado-loops

解决方案


从长远来看,IE浏览器会让你真的讨厌生活。

就像网页抓取中的任何浏览器解决方案一样,如果您无法确定要加载的资源是什么,您只需要浏览器。

考虑使用浏览器附带的所有开销、javascript、CSS、潜在的跟踪 cookie。

现在,如果您知道自己想要什么,并在 Chrome 开发工具中查看它是如何加载的 - 您可以使用 VBA 的 HTTP 请求库,您将拥有更好的时间。

使用 HTTP 请求的优点是,即使它是流或分块,您也可以控制并轻松测量消息何时完成。一个网页,你总是会被困在试图弄清楚状态码是什么、子框架和各种废话。

强烈推荐,将 IE 自动化的挫败感转化为使用 HTTP 和 chrome 开发工具的学习体验。您将 100% 不太可能砸键盘。


推荐阅读