我一直在运行这个宏,它提出了一个424对象所需的错误,但宏工作,当我用一个步骤按钮" F8"运行它时,我得到了预期的结果。
Sub FileUpload()
Dim IEexp As InternetExplorer
Set IEexp = CreateObject("InternetExplorer.Application")
IEexp.Visible = False
IEexp.navigate "https://www.google.co.uk/?gws_rd=ssl#q=lenti+a+contatto+colorate"
Do While IEexp.ReadyState <> 4: DoEvents: Loop
Dim inputElement As HTMLDivElement
Set inputElement = IEexp.Document.getElementById("brs")
MsgBox inputElement.textContent
IEexp.Quit
Set IEexp = Nothing
End Sub
错误出现在Set inputElement = IEexp.Document.getElementById("brs")
行。
答案 0 :(得分:0)
您正在检查浏览器的ReadyState
,但是在某些现代网页上,直到至少这一点,DOM才真正被某些对象更新。
VBA中的IE自动化非常原始,听起来像在这种情况下,您试图在DOM中存在一个节点之前就已经对其进行了访问-尽管您已尽最大努力等待浏览器准备就绪。在某些情况下,这实际上可能是几毫秒的时间。
这里最快的解决方法是在循环中添加Application.Wait()
,以引起实际的时间延迟。一个更优雅的选择可能是在循环中引入检查并在所需的DOM对象实际存在时退出循环。如果这样做,则有可能陷入无限循环,因此我总是建议您设置最大增量作为备份。