在VBA中完成网页加载后如何开始抓取

时间:2020-07-09 19:08:07

标签: vba web-scraping

我在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

0 个答案:

没有答案