【发布时间】:2014-07-26 06:43:59
【问题描述】:
我使用这个简单的子程序从 Web 加载 HTML 文档已经有一段时间了,没有任何问题:
Function GetSource(sURL As String) As Variant
' Purpose: To obtain the HTML text of a web page
' Receives: The URL of the web page
' Returns: The HTML text of the web page in a variant
Dim oXHTTP As Object, n As Long
Set oXHTTP = CreateObject("MSXML2.XMLHTTP")
oXHTTP.Open "GET", sURL, False
oXHTTP.send
GetSource = oXHTTP.responsetext
Set oXHTTP = Nothing
结束函数
但我遇到了这样一种情况,它大部分时间只加载页面的一部分(并非总是如此——有时它会加载所有预期的 HTML 代码)。如果您从浏览器将页面的 HTML 保存到 Web 上的另一个文件,子例程将始终毫无问题地读取它。
我猜问题出在时间上——动态页面注册“完成”,而脚本仍在填写详细信息。有时它会及时完成,有时则不会。
以前有没有人遇到过这种行为并克服了它?似乎应该有一种方法可以通过 MSXML2.XMLHTTP 对象准确捕获如果转到页面并选择保存到 HTML 选项会得到什么。
如果您想亲自查看该行为,以下是加载不一致的页面示例:
http://www.tiff.net/festivals/thefestival/programmes/specialpresentations/mr-turner
这是同一页面的已保存 HTML 文件:
http://tofilmfest.ca/2014/film/fest/Mr_Turner.htm
是否有任何已知的解决方法?
【问题讨论】:
-
您说的是动态页面,但XMLHTTP 将简单地下载服务器返回的任何内容,不像浏览器会执行任何内容修改脚本等,这可能是您所看到的吗? - 您还应该检查请求
.status以确保它按预期执行。页面的哪些部分缺失?它被截断了吗? (没有
标签: vba xmlhttprequest web-scraping