在 vba 中按标记名搜索元素时未找到 href 属性

href attribute not found when searching for elements by tagname in vba

使用 VBA,我试图在雅虎财经 HTML 中查找给定股票的每周股价数据的 href 属性。我需要它来自动下载包含数据的 csv 文件。我已经完成研究,并编写了以下代码,我认为应该可以找到 URL。但是,代码继续以错误结束。是我的代码有小错误还是手头有更大的问题。

我已经通过类名搜索超链接的父级以缩小成功的搜索范围。但是当我在这个父级中搜索代码 returns 错误 "The remote server machine does not exist or is unavailable".

我是新手 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"

结束子

第一个问题是您在使用后期绑定时使用了 InternetExplorer 常量 READYSTATE_COMPLETE。因此,它将它视为一个空变量而不是它的值,即 4。这意味着 Do While/Loop 将始终计算为 True。所以你需要用它的值替换常量...

Do While internet.ReadyState <> 4
Loop

另一个问题是 getElementsByClass。它 returns 元素的集合,其中索引从 0 开始。因此,您需要引用该集合中的其中一个元素。在此示例中,看起来只返回了您要查找的一个元素。所以你需要引用第一个元素,它的索引为 0...

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