【发布时间】:2014-04-25 17:06:18
【问题描述】:
有没有万无一失的方法让脚本等到 Internet Explorer 完全加载?
oIE.Busy 和/或oIE.ReadyState 都没有按应有的方式工作:
Set oIE = CreateObject("InternetExplorer.application")
oIE.Visible = True
oIE.navigate ("http://technopedia.com")
Do While oIE.Busy Or oIE.ReadyState <> 4: WScript.Sleep 100: Loop
' <<<<< OR >>>>>>
Do While oIE.ReadyState <> 4: WScript.Sleep 100: Loop
还有其他建议吗?
【问题讨论】:
-
请描述您展示的传统
Do ... Loop有什么问题? -
看起来它在继续其他操作之前没有等待足够的页面加载,从而给出“需要元素错误”。当我明确增加等待时间时,效果很好。
-
我曾经发现过类似的行为,解决方案只是在此之前添加额外的循环,例如
Do While oIE.ReadyState = 4: WScript.Sleep 100: Loop。所以第一步是等到“导航开始”,第二步 - 直到它完成。 -
我不确定你的建议是什么。你能详细说明一下吗?
-
@user3408723 不敢相信我在评论 2014 年的事情......但我遇到了同样的问题,欧米茄的回答实际上是有道理的。主循环之前的代码行位于 event 中,即代码在 IE 实际处理请求之前命中您的循环 - 因此,在它变为
Busy之前。代码运行得太快,并且在 IE 有机会变得忙碌之前就进入了循环,因此它绕过了循环,因为它在技术上并不忙。非常聪明地研究答案,我从来没有考虑过。
标签: internet-explorer web-scraping vbscript wsh readystate