Как правильно извлечь внутренний текст из значения таблицы на веб-странице с помощью vba? - PullRequest
2 голосов
/ 14 июля 2020

К сожалению, моя старая учетная запись была удалена при смене хоста сайта. Я поискал решение по всему сайту, но нашел только людей, имеющих дело с целыми таблицами, а не просто пытающихся получить одно значение. У меня возникла проблема с захватом Net ресурсов с innerText со следующей веб-страницы:

https://finance.yahoo.com/quote/UMBWX?p=UMBWX

Вот моя попытка:

Sub FetchAssets()
Dim HTML As New HTMLDocument, elem As Object, URL As String

    URL = https://finance.yahoo.com/quote/UMBWX?p=UMBWX
    With CreateObject("MSXML2.XMLHTTP")

            .Open "GET", URL, False
            Application.Wait Now + 1 / (24 * 60 * 60# * 2)
            .send
            Application.Wait Now + 1 / (24 * 60 * 60# * 2)
            HTML.body.innerHTML = .responseText
            
            Set elem = HTML.querySelector("NET_ASSETS-value")
            MsgBox elem.innerText
    End With
End Sub

Эта попытка приводит к: Run-time error '91': Object variable or With block variable not set

Я пробовал точно такой же код и заменил elem.innerText на elem.innerHTML, и это привело к той же ошибке. Ошибка возникает в строке кода MsgBox, она устанавливает elem в порядке.

Из-за того, что моя репутация меньше 10, я не могу встроить изображение, но вот строка кода с веб-страницы:

<td class="Ta(end) Fw(600) Lh(14px)" data-test="NET_ASSETS-value" data-reactid="89"><span class="Trsdu(0.3s) " data-reactid="90">539.25M</span></td>

1 Ответ

1 голос
/ 14 июля 2020

Попробуйте это

Sub FetchAssets()
    Dim html As New HTMLDocument, elem As Object, sURL As String
    sURL = "https://finance.yahoo.com/quote/UMBWX?p=UMBWX"
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", sURL, False
        .send
        html.body.innerHTML = .responseText
        Set elem = html.querySelector("td[data-test='NET_ASSETS-value']")
        MsgBox elem.innerText
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...