我想从亚马逊某些领域中删除。
Atm我正在使用链接,我的vba脚本返回了我的名字和价格。
例如:
我将链接放入A列并获取相应列中的其他字段,f.ex。:http://www.amazon.com/GMC-Denali-Black-22-5-Inch-Medium/dp/B00FNVBS5C/ref=sr_1_1?s=outdoor-recreation&ie=UTF8&qid=1436768082&sr=1-1&keywords=bicycle
但是,我还想拥有product description
。
这是我目前的代码:
Sub ScrapeAmz()
Dim Ie As New InternetExplorer
Dim WebURL
Dim Docx As HTMLDocument
Dim productDesc
Dim productTitle
Dim price
Dim RcdNum
Ie.Visible = False
For RcdNum = 2 To ThisWorkbook.Worksheets(1).Range("A65536").End(xlUp).Row
WebURL = ThisWorkbook.Worksheets(1).Range("A" & RcdNum)
Ie.Navigate2 WebURL
Do Until Ie.ReadyState = READYSTATE_COMPLETE
DoEvents
Loop
Set Docx = Ie.Document
productTitle = Docx.getElementById("productTitle").innerText
'productDesc = Docx.getElementsByClassName("productDescriptionWrapper")(0).innerText
price = Docx.getElementById("priceblock_ourprice").innerText
ThisWorkbook.Worksheets(1).Range("B" & RcdNum) = productTitle
'ThisWorkbook.Worksheets(1).Range("C" & RcdNum) = productDesc
ThisWorkbook.Worksheets(1).Range("D" & RcdNum) = price
Next
End Sub
我正在尝试使用productDesc = Docx.getElementsByClassName("productDescriptionWrapper")(0).innerText
获取产品说明。
但是,我收到了一个错误。
Object variable or with block variable not set.
有什么建议为什么我的陈述不起作用?
感谢您的回复!
答案 0 :(得分:1)
我非常确定您的问题是由于在文档完全加载之前尝试访问该文档而导致的。你只是检查ie.ReadyState。
这是我对使用IE控件加载页面的时间表的理解。
ie.ReadyState = READYSTATE_COMPLETE
。此时,您可以访问ie.document
而不会导致错误,但文档只是开始加载。ie.document.readyState = "complete"
(请注意,框架可能仍在加载,并且可能仍在进行AJAX处理。)所以你真的需要检查两个事件。
Do
If ie.ReadyState = READYSTATE_COMPLETE Then
If ie.document.readyState = "complete" Then Exit Do
End If
Application.Wait DateAdd("s", 1, Now)
Loop
编辑:在实际查看您正在尝试抓取的页面后,看起来它失败的原因是因为您尝试获取的内容位于iframe中。在获得内容之前,您需要浏览iframe。
ie.document.window.frames("product-description-iframe").contentWindow.document.getElementsByClassName("productDescriptionWrapper").innerText