Как извлечь <tspan>элементов из HTML-кода в VBA - PullRequest
1 голос
/ 12 июня 2019

Я пытаюсь получить данные с веб-страницы, используя веб-обработку HTML с VBA.Я добился успеха на других сайтах, но на этом есть данные в строке кода, помеченной как tspan, и я не могу получить данные из нее.

HTML-код выглядит следующим образом (извините за длинный код, не уверен, что является и не имеет значения):

<div class="Classname">
    <svg width ="100%" height="100%" fill="code" stroke="100%" stroke="code" viewBox="numbers" class="undefined">
         <polygon fill="transparent" points="numbers"></polygon?
             <text y="100" dy="#s">
                <tspan x="100" text-anchor="middle">1</tspan>

Мне нужно значение 1 в последней строке перед,Код, который я использую для его извлечения после перехода на правильную веб-страницу и т. Д., Выглядит следующим образом:

Dim text As String
text=IE.document.GetElementsByClassname("Classname")(0).GetElementsByTagname("tspan")(0).innertext

Я также попытался указать, где имя класса «неопределено», как оно отображается в строке кода svg.Я получаю ошибку 91 в любом случае.

Редактировать: я уже пробовал вложенный метод GetElementsByTagName, по-прежнему получая ошибку

text=IE.document.GetElementsByClassname("C")(0).GetElementsByTagname("svg")(0).GetElementsByTagname("polygon")(0).GetElementsByTagname("text")(0).GetElementsByTagname("tspan")(0).innertext

Ответы [ 3 ]

0 голосов
/ 13 июня 2019

Кроме того, вы также можете использовать метод querySelector ...

text = IE.document.querySelector("tspan[text-anchor='middle']").innerText

Надеюсь, это поможет!

0 голосов
/ 20 июня 2019

Вот более прямой и быстрый способ

Option Explicit
Public Sub GetData()
    Dim ie As Object
    Set ie = CreateObject("InternetExplorer.Application")
    With ie
        .Visible = True
        .Navigate2 "https://www.tipranks.com/stocks/mmm/stock-analysis"

        While .Busy Or .readyState < 4: DoEvents: Wend
        Do 'could use timed loop here to handle infinite looping risk
            Set elem = .document.querySelectorAll("tspan")
        Loop While elem.Length = 0
        Debug.Print elem.item(0).innerText
        .Quit
    End With
End Sub
0 голосов
/ 13 июня 2019

решаемая.У имени класса было подчеркивание, на самом деле это было 2 подчеркивания.__ против _, трудно заметить разницу.Вложенные getelementsbytagname сделали свое дело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...