excel - 使用 Excel VBA 和 XML 抓取网站
问题描述
我正在尝试抓取 Newegg 网站以获取产品价格。当我运行这段代码时,它就完成了这项工作。
Sub test()
Dim objIE As InternetExplorer
Set objIE = New InternetExplorer
objIE.Visible = True
objIE.Navigate "https://www.newegg.com/Product/Product.aspx?item=1TS-000E-083F2"
Do While objIE.ReadyState <> READYSTATE_COMPLETE
Loop
Debug.Print objIE.Document.getElementsByClassName("price-current")(0).Children(1).innerText
End Sub
但是,当我尝试使用 XML 来加快执行速度时,我遇到了运行时错误 91: Object variable or With block variable not set
下面是我正在尝试实现的一段代码。
Sub testxml()
Dim XMLPage As New MSXML2.XMLHTTP60
Dim HTMLDoc As New MSHTML.HTMLDocument
XMLPage.Open "GET", "https://www.newegg.com/Product/Product.aspx?item=1TS-000E-083F2", False
XMLPage.send
HTMLDoc.body.innerHTML = XMLPage.responseText
Debug.Print HTMLDoc.getElementsByClassName("price-current")(0).Children(1).innerText
End Sub
解决方案
您正在尝试获取通过此代码获得innerText
的第二个集合元素的属性:Child
HTMLDoc.getElementsByClassName("price-current")(0)
发生此错误,因为HTMLDoc.getElementsByClassName("price-current")(0)
此页面上不存在错误提示中的“对象”。
您可以通过以下方式进行检查:
Debug.Print HTMLDoc.getElementsByClassName("price-current").Length
它将为 0,表示不存在此类的元素。如果它存在用于 IE 自动化,则意味着该元素是通过 JavaScript 生成的 HTML 的一部分,并且 XMLHTTP 请求不会在其响应中包含它。
推荐阅读
- java - 未创建房间数据库
- python - 为什么我得到错误的预测值 python-weka 包装器
- javascript - 如果数组对象中的值相同,则用逗号分隔值连接
- amazon-web-services - 将 API 网关与 SAM 模板集成以具有自定义名称和阶段
- c# - 插入实体时实体框架重复项
- javascript - 如何仅使用香草 javascript 将表情符号按钮添加到我的网站
- python - 编写爬虫时“不同页面得到相同结果”如何解决?
- r - 如果任何列中的NA值应该用R编程中的下一列的值替换值,如何替换
- javascript - 如何从 args NodeJS / discord.js 中拆分特定单词
- asp.net-core - 如果我删除 [ApiController] 属性,Swagger 看不到我的控制器,但我不想使用它