excel - 在 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
解决方案
从长远来看,IE浏览器会让你真的讨厌生活。
就像网页抓取中的任何浏览器解决方案一样,如果您无法确定要加载的资源是什么,您只需要浏览器。
考虑使用浏览器附带的所有开销、javascript、CSS、潜在的跟踪 cookie。
现在,如果您知道自己想要什么,并在 Chrome 开发工具中查看它是如何加载的 - 您可以使用 VBA 的 HTTP 请求库,您将拥有更好的时间。
使用 HTTP 请求的优点是,即使它是流或分块,您也可以控制并轻松测量消息何时完成。一个网页,你总是会被困在试图弄清楚状态码是什么、子框架和各种废话。
强烈推荐,将 IE 自动化的挫败感转化为使用 HTTP 和 chrome 开发工具的学习体验。您将 100% 不太可能砸键盘。
推荐阅读
- ios - 在我的 iPhone 文件夹上,如何为我的应用创建文件夹?[iOS 13]
- linux - 自上次查看以来如何查看系统日志条目
- c# - 单元测试传递字符串参数除 null 或空之外的任何字符串值
- docker - 如何从我的网站在任何网络上查找 URL/公共 IP 以访问由 Docker 容器运行的服务器
- python-3.x - KeyError: '[...] not in index' 当训练/测试集手动拆分成两个文件时发生
- scala - 如何使用列索引重命名重复的列?
- apache - Dockerfile 中不支持 Docker ADD 和 COPY
- swift - 在多对多关系上添加元素
- python - 使用 excel 表中的信息在 postgresql 上创建表
- node.js - 如何根据 aws cognito 中的特殊条件对用户进行身份验证