【发布时间】:2017-02-01 17:21:57
【问题描述】:
我正在抓取一个网页,并等待 Internet Explorer 完成加载,但由于某种原因它不是。我试图在页面上获取一个值,但等待部分没有等待,因此当应该有一个值时该值返回空白。 IE 页面已加载完毕,但页面上元素的值尚未加载。 有没有办法等待所有元素完成加载后再继续执行下一行代码?这是我的代码:
Dim IE As Object
Dim myvalue as string
IE = CreateObject("internetexplorer.application")
IE.navigate("mypage")
While Not IE.ReadyState = WebBrowserReadyState.Complete
Application.DoEvents()
End While
myValue = IE.document.getElementById("theValue").getAttribute("value")
Debug.Print(myValue)
【问题讨论】:
-
只是一个想法,但您是否首先确认您可以转到此页面并使用大多数浏览器具有 F12 的内置调试器?您可以通过这种方式直接测试 javascript: "document.getElementById("theValue").getAttribute("value")" 并确保它是正确的。
-
首先不要使用
Application.DoEvents()来保持你的UI响应!这是不好的做法!请阅读:Keeping your UI Responsive and the Dangers of Application.DoEvents. -
@djangojazz 是的,该值是在 Internet Explorer 完成加载后加载的,因此它会跳过 myValue 部分而没有获得实际值。
-
既然您显然在使用 WinForms,请创建一个 .NET 的
WebBrowsercontrol 实例并改为订阅其DocumentCompletedevent。 -
我喜欢,但是浏览器在访问网页时会发出警报,我已经在浏览器上关闭了它们等等,但这给我带来了麻烦,因此我正朝着这个方向前进。我可以暂停程序 5 秒,但如果不需要,我不想等待整个 5 秒。
标签: vb.net web-scraping