Как вытащить второй тд тег из таблицы, используя Excel-VBA - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь вытащить второй тег тд, или курс десятилетнего казначейства США с https://www.bankrate.com/rates/interest-rates/federal-funds-rate.aspx с помощью Excel VBA. Вот что у меня есть:

Sub Ten_Year_Treasury()

' Record the US Ten Year Treasury rate from https://www.bankrate.com/rates/interest-rates/federal-funds-rate.aspx
Range("A2").ClearContents

Dim ie As InternetExplorer
Dim htmlEle As IHTMLElement

Set ie = New InternetExplorer
ie.Visible = False

ie.navigate "https://www.bankrate.com/rates/interest-rates/federal-funds-rate.aspx"

Application.Wait (Now + TimeValue("00:00:04"))

Set Element = ie.document.getElementsByClassName("table-inline__caption")

For Each htmlEle In Element

    With Sheets("10-Year Treasury")
        .Range("A2").Value = htmlEle.Children(0).innerText
    End With

Next

ie.Quit

'Remove Underline
Range("A2").Font.Underline = False
'Make Font Bold
Range("A2").Font.Bold = True

End Sub

Я знаю, что это как-то связано с моим «Элементом», и я видел видео, где говорится об использовании «детей» или «братьев и сестер». Советы как это исправить?

1 Ответ

0 голосов
/ 06 апреля 2020

Вы используете неправильное имя класса и при этом выбираете заголовок, а не таблицу. Вы можете использовать селектор класса css в сочетании с nth-of-type для получения второго тд. Я использую одно из значений класса, присутствующих в элементе таблицы.

.Range("A2").Value = ie.document.querySelector(".table-inline td:nth-of-type(2)").innerText

Поскольку этот контент имеет статус c, вы можете использовать более быстрый xhr, чем браузер, чтобы получить значение. Я показываю различные способы получения нужного вам узла.

Option Explicit

Public Sub GetInterestRate()
    Dim xhr As MSXML2.xmlhttp60, html As MSHTML.HTMLDocument
    'required VBE (Alt+F11) > Tools > References > Microsoft HTML Object Library ;  Microsoft XML, v6 (your version may vary)

    Set xhr = New MSXML2.xmlhttp60
    Set html = New MSHTML.HTMLDocument

    With xhr
        .Open "GET", "https://www.bankrate.com/rates/interest-rates/federal-funds-rate.aspx", False
        .send
        html.body.innerHTML = .responseText
    End With

    ActiveSheet.Cells(1, 1) = html.querySelectorAll(".table-inline td")(1).innerText
    'html.querySelector(".table-inline").rows(1).cells(1).innertext
    'html.querySelector(".table-inline").rows(1).children(1).innertext
    'html.querySelector(".table-inline td + td").innertext
    'html.querySelector(".table-inline td").nextsibling.innertext

End Sub

Читайте о:

  1. css селекторах
  2. xhr
  3. nextSibling
  4. querySelector
...