【发布时间】:2015-10-26 19:01:20
【问题描述】:
我正在通过 VBA 使 IE 自动化,但我似乎无法让 VBA 代码等到页面加载完毕后再抓取文档。由于我的代码太快,这导致了各种失败。如何让 VBA 等待 IE 页面加载?我尝试过的许多方法都是在 stackoverflow 上找到的,但似乎都不适合我。
ie 是我的InternetExplorer 对象。
我试过了,没用:
Do
If ie.readyState = 4 Then
Exit Do
Else
DoEvents
End If
Loop
还有:
Do While ie.Busy Or Not ie.ReadyState = READYSTATE_COMPLETE
DoEvents
Loop
还有:
Do
DoEvents
Loop Until ie.ReadyState = READYSTATE_COMPLETE
我什至尝试过:
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
...
Do
Sleep 250
Loop Until ie.readyState = READYSTATE_COMPLETE
这些都不起作用,代码立即跳过循环并尝试抓取页面的 html 文档,即使页面尚未完成加载。
我正在导航到登录页面,填写用户名和密码,然后单击登录。登录后,我需要更改一些字段(下拉菜单和文本框)。更改这些字段后,我使用 VBA 单击按钮以保存设置,然后导航到另一个页面。该代码没有正确设置字段,因为它跳过了等待页面加载的过程,因此我输入了设置不正确的代码的下一部分。
我想知道这是否可能是由于 ajax 请求?我什至不知道该怎么说。
在抓取 html 文档之前,是否有可靠的方法在 IE 中等待页面加载?
我知道代码正在做我想做的事,因为如果我手动单步执行它并等待页面加载,它会按预期运行。
如有必要,我可以添加更多说明。
【问题讨论】:
-
您是否尝试过等待 DocumentCompleted 事件触发?
-
我没有。我不太熟悉在 VBA 中以这种方式使用对象的事件。我在谷歌上搜索并没有找到很好的文档。
-
好的,我在回答中提供了一个示例。顺便说一句,它是 DocumentComplete,最后没有 d 。我的错。