2015-07-13 45 views
1

我想從亞馬遜的一些字段中刪除。使用getElementsByClassName時出現「對象變量或塊變量未設置」

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

您正在聲明變量,但它們都是變體,因爲您沒有指定數據類型。這不是很好的做法。你最好不要把它們放在第一位。你在浪費資源。 – teylyn

+0

該系統中安裝了哪個Internet Explorer版本?低於9.0的IE沒有方法'document.getElementsByClassName'。 –

回答

1

我很確定你的問題是由於在完全加載之前嘗試訪問文檔而導致的。你只是檢查ie.ReadyState。

這是我對使用IE控件加載頁面的時間表的理解。

  1. 瀏覽器連接到頁面:ie.ReadyState = READYSTATE_COMPLETE。此時,您可以訪問ie.document而不會導致錯誤,但文檔只是開始加載。
  2. 文檔滿載: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 
+0

Thx爲您的答案!我嘗試使用'productDesc = Docx.Window.frames(「product-description-iframe」)。contentWindow.document.getElementsByClassName(「productDescriptionWrapper」)。innerText'將變量的產品描述保存到變量中,但是我得到的Object不支持這個屬性或方法。任何建議如何初始化我的變量'productdesc'將輸出保存到單元格? – mrquad

+0

可能與我如何訪問iframe有關。對不起,我今天不會有時間來自己調試。如果你花一些時間在VBA監視窗口和直接窗格上,你應該能夠弄明白。你需要弄清楚的是如何到達iframe文檔對象。 – Tmdean

相關問題