Не удалось получить элемент по имени класса - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь получить количество голосов Buy, Sell, Neutral в виджете Технической сводки на этой странице: https://in.tradingview.com/symbols/NSE-TCS/

Вот эти элементы

<span class="tv-widget-technicals__counter-number redColor">2</span>

<span class="tv-widget-technicals__counter-number neutralColor">10</span>

 <span class="tv-widget-technicals__counter-number brandColor">8</span>

Iпробовал разные вещи, но я не знаю, как получить доступ к этим элементам.Я даже пытался пройтись по всем элементам span, но в списке их не оказалось.

Я добавил то, что попробовал до сих пор, пожалуйста, дайте мне знать, как я могу решить эту проблему.

Sub Test_Macro()

Dim i As Long, j As Long, fD As Long
Dim symBol As String, urL As String, hdoc
Dim oHtml As HTMLDocument
Dim oElement As Object
Dim dados

With DATA

    fD = .Range("A" & .Rows.Count).End(xlUp).Row
    Set oHtml = New HTMLDocument

    With CreateObject("WINHTTP.WinHTTPRequest.5.1")
        For i = 2 To fD

            symBol = Trim(Replace(Replace(DATA.Range("A" & i).Value, "-", "_"), "&", "_"))
            urL = "https://in.tradingview.com/symbols/NSE-" & symBol

            .Open "GET", urL, False
            .send
            oHtml.body.innerHTML = .responseText

            Stop

            Set dados = oHtml.getElementsByClassName("tv-site-widget ").Item(1).getElementsByTagName("span")
            j = 1
            For Each oElement In dados
                DATA.Range("F" & j) = oElement.innerText
                j = j + 1
                'Debug.Print oElement.innerHTML
            Next oElement
            Stop
        Next i
    End With

End With

End Sub

1 Ответ

0 голосов
/ 24 мая 2018

Попробуйте нижеуказанным способом.Контент, который вы ищете, генерируется динамически.Даже если вы используете какой-либо браузерный симулятор, например IE, вы не сможете получить контент, если не заставите браузер немного подождать, пока загрузятся цифры.Суть в том, что вы не можете получить желаемый результат, используя запросы xmlhttp, winhttp или serverxmlhttp, так как они не имеют дело с динамическим контентом.Дайте ему шанс:

Sub TestMacro()
    Const URL As String = "https://in.tradingview.com/symbols/NSE-TCS/"
    Dim IE As New InternetExplorer, oHtml As HTMLDocument, post As Object, R&

    With IE
        .Visible = True
        .navigate URL
        While .Busy Or .readyState < 4: DoEvents: Wend
        Set oHtml = .document
    End With

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

    For Each post In oHtml.getElementsByClassName("tv-widget-technicals__counter-wrapper")
        With post.getElementsByTagName("span")
            R = R + 1: Cells(R, 1) = .Item(0).innerText
        End With
    Next post
End Sub

Вывод на данный момент:

2
10
14

Ссылка для добавления:

Microsoft Internet Controls
Microsoft HTML Object Library
...