我在VBA中建立了一个网络抓取程序,在抓取方面表现出色。但是,当我去加载页面时,页面上有一个延迟,并且网页上显示“正在搜索...”,出现动画,并且该网页上的某些动画或图片沿顺时针方向移动。大约4到5秒后,页面最终加载。
我已经实现了一些本应等待页面完成加载的代码,但是SHDocVw.InternetExplorer对象的各种属性并不等待页面完成加载。而是在页面加载时继续执行我的源代码。这是有问题的,因为我的其余源代码将尝试调用DOM中的不同对象,插入文本,在尚未完成加载的页面上调用方法。自然,这样做时,代码会炸弹,引发错误,并且无法继续进行抓取。我唯一的解决方法是插入一段人工等待时间的代码行:Application.Wait Now + TimeValue(“ 00:00:11”)。在这里,我等待11秒。
在加载之前或之后,READYSTATE_COMPLETE属性似乎没有改变。
即使页面尚未完成加载,debug.print代码行也会继续执行并将代码打印到立即窗口。
也许我需要调用网页的另一个属性,以确保该页面已完成加载?如果是这样,那可能是什么财产?我可能需要打开哪个库才能找到该属性?
谢谢,下面是一些测试器代码:
Do While IE.readyState <> READYSTATE_LOADING
'Do Nothing and Wait for IE to load the page
DoEvents
Loop
'This line of code will run even though the webpage hasn't finished loading:
'The READYSTATE_COMPLETE property doesn't seem to work either.
Debug.Print IE.LocationName, IE.LocationURL
' Do While IE.readyState <> READYSTATE_COMPLETE
' Do While IE.readyState <> READYSTATE_INTERACTIVE
' Do While IE.readyState <> READYSTATE_LOADED
' Do While IE.readyState <> READYSTATE_LOADING
' Do While IE.readyState <> READYSTATE_UNINITIALIZED
' Do While IE.readyState <> READYSTATE_COMPLETE
Application.Wait Now + TimeValue("00:00:11")
'DoEvents
' Loop