2017-07-08 57 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