2017-07-08 58 views
0

使用VBA,我嘗試在Yahoo財務的HTML中查找給定股票的每週股價數據的href屬性。我需要這個來自動下載包含數據的csv文件。我已經完成了我的研究,並且寫下了我認爲應該找到該URL的以下代碼。但是,代碼繼續以錯誤結束。我的代碼中是否有一個小錯誤,或者手頭有更大的問題。通過vba中的標記名搜索元素時找不到href屬性

我已經通過classname搜索超級鏈接的父級,以縮小成功的搜索範圍。但是,當我在此父代中搜索時,代碼將返回錯誤「遠程服務器機器不存在或不可用」。

我是新的HTML刮,所以任何幫助將不勝感激。預先感謝您的幫助。

Sub webpage() 

Dim internet As Object 
Dim internetdata As Object 
Dim Find_Parent As Object 
Dim Stock_Links As Object 
Dim Link As Object 
Dim URL As String 

Set internet = CreateObject("InternetExplorer.Application") 
internet.Visible = True 

URL = "https://finance.yahoo.com/quote/GTE.AX/history?period1=1341266400&period2=1499032800&interval=1wk&filter=history&frequency=1wk" 
internet.Navigate URL 

Do While internet.ReadyState <> READYSTATE_COMPLETE 
Loop 

Set internetdata = internet.Document 
Set Find_Parent = internetdata.getElementsByClassName("Fl(end) Pos(r) T(-6px)") 
Set Stock_Links = Find_Parent.getElementsByTagName("a") 

NextRow = 1 

For Each Link In Stock_Links 
    Sheet1.Range("A" & NextRow) = Link.getAttribute("href") 
    NextRow = NextRow + 1 
Next 

MsgBox "Link Found" 

末次

回答

2

第一個問題是,你正在使用InternetExplorer的不斷READYSTATE_COMPLETE,而使用後期綁定。因此,它將其視爲一個空變量而不是其值,即4。這意味着Do While/Loop將始終評估爲True。因此,你需要用它的值來代替常數...

Do While internet.ReadyState <> 4 
Loop 

的另一個問題是getElementsByClass。它返回一組元素,其索引從0開始。所以你需要引用該集合中的一個元素。在這個例子中,它看起來像只有你正在尋找的一個元素被返回。所以你需要參考第一個元素,其索引爲0 ...

Set Stock_Links = Find_Parent(0).getElementsByTagName("a") 
+0

謝謝Domenic,工作完美 – Terry