我正在努力刮取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:对象变量或未设置块变量
以下是我要尝试实施的一段代码。
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
答案 0 :(得分:4)
您正尝试获取通过此代码获取的第二个innerText
集合元素的Child
属性:
HTMLDoc.getElementsByClassName("price-current")(0)
发生此错误,因为此页面上不存在错误提示“{1}”中的“对象”。
您可以查看:
HTMLDoc.getElementsByClassName("price-current")(0)
它将为0,表示不存在具有此类的元素。如果它存在于IE自动化中,则意味着该元素是通过JavaScript生成的HTML的一部分,XMLHTTP请求将不会在其响应中使用它。
答案 1 :(得分:0)
这有帮助吗?
Dim XMLPage As Object
Dim HTMLDoc As Object
Set XMLPage = New MSXML2.XMLHTTP60
Set HTMLDoc = New MSHTML.HTMLDocument
关于何时使用新的等等,有一些文章在堆栈上,所以我不打算覆盖它。