我正在尝试抓取 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:对象变量或未设置 block 变量
下面是我正在尝试实现的一段代码。
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
2楼Child
通过此代码获得的集合元素:
HTMLDoc.getElementsByClassName("price-current")(0)
发生此错误,因为错误提示中的“对象”是
HTMLDoc.getElementsByClassName("price-current")(0)
此页面上不存在。您可以通过以下方式进行检查:
Debug.Print HTMLDoc.getElementsByClassName("price-current").Length
它将为 0,表示不存在此类的元素。如果它存在用于 IE 自动化,则意味着该元素是通过 JavaScript 生成的 HTML 的一部分,并且 XMLHTTP 请求不会在其响应中包含它。
关于excel - 使用 Excel VBA 和 XML 抓取网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50605825/