【问题标题】:VBA DOM getElementsBy can't get childnodesVBA DOM getElementsBy无法获取子节点
【发布时间】:2020-09-07 22:40:34
【问题描述】:

我正在尝试获取标签的内部文本,但出现错误。通过控制台,我成功地使用此脚本获取了内部文本:

document.getElementsByClassName("item alt")[0].childNodes[2].childNodes[0].innerText

我想要获取的元素:

<tr class="item alt" data-id="1376936"><td class="toolbar left"><a href="#" class="show-incidents button-small ui-state-transparent-default rc" title="Details"><span class="ui-icon ui-icon-triangle-1-e"></span></a></td><td class="time">14:00</td><td class="status"><span class="status-1 rc">FT</span>

我的 VBA 脚本:

Sub WebScraping()
    Dim ie As InternetExplorer
    Dim html As HTMLDocument
    Set ie = New InternetExplorer


    ie.Visible = True

    ie.navigate "https://www.whoscored.com/Regions/74/Tournaments/22/Seasons/7814/Stages/17593/Fixtures/France-Ligue-1-2019-2020"

    Do While ie.readyState <> READYSTATE_COMPLETE
    Application.StatusBar = "Trying to go to Whoscored ..."
    DoEvents
    Loop

    Set doc = ie.document


    Do While ie.readyState <> READYSTATE_COMPLETE
    Application.StatusBar = "Trying to go to Whoscored ..."
    DoEvents
    Loop

    Set a = doc.getElementsByClassName("item alt")(0).ChildNodes(2).ChildNodes(0).innerText
    MsgBox (a)

End Sub

【问题讨论】:

  • 试试这个doc.querySelector("#tournament-fixture td.status &gt; span").innerText

标签: excel vba dom web-scraping child-nodes


【解决方案1】:
Set a = doc.getElementsByClassName("item alt")(0).ChildNodes(2).ChildNodes(0).innerText

尝试使用getElementsByClasssName方法找到子节点,请将上面的代码修改如下:

Dim a As String   
a = doc.getElementsByClassName("item alt")(0).getElementsByClassName("status")(0).getElementsByClassName("status-1")(0).innerText

MsgBox (a)

【讨论】:

    【解决方案2】:

    每个模块的第一行应该是Option Explicit

    我完全不确定你想要什么。但是要显示想要的元素,请使用:

    Sub WebScraping()
      Dim ie As InternetExplorer
      Dim doc As HTMLDocument
      Dim a As Object
      Set ie = New InternetExplorer
    
      ie.Visible = True
      ie.navigate "https://www.whoscored.com/Regions/74/Tournaments/22/Seasons/7814/Stages/17593/Fixtures/France-Ligue-1-2019-2020"
      Do While ie.readyState <> READYSTATE_COMPLETE
        Application.StatusBar = "Trying to go to Whoscored ..."
        DoEvents
      Loop
      Application.StatusBar = False
    
      Set doc = ie.document
    
      Set a = doc.getElementsByClassName("item alt")(0).getElementsByClassName("status")(0)
      MsgBox a.innerText
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-16
      • 2015-11-20
      • 1970-01-01
      • 1970-01-01
      • 2015-05-20
      • 2020-06-21
      相关资源
      最近更新 更多