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

Я пытаюсь получить доступ ко всей информации в следующей таблице:

https://www.tradingview.com/markets/stocks-usa/sectorandindustry-industry/biotechnology/

, используя следующий код VBA:

Sub GetInfo()

    Dim XMLPage As New MSXML2.XMLHTTP60
    Dim HTMLDoc As New MSHTML.HTMLDocument
    Dim HTMLTable, HTMLRow, HTMLCell, button As MSHTML.IHTMLElement

    XMLPage.Open "GET", "https://www.tradingview.com/markets/stocks-usa/sectorandindustry-industry/biotechnology/", False
    XMLPage.send

    HTMLDoc.body.innerHTML = XMLPage.responseText

    Set HTMLTable = HTMLDoc.getElementsByTagName("tr")

    For Each HTMLRow In HTMLTable
        For Each HTMLCell In HTMLRow.Children
            Debug.Print HTMLCell.innerText
        Next HTMLCell
    Next HTMLRow

End Sub

Это отлично работает, но не может получить все на странице. Внизу страницы есть кнопка, которую вы должны нажать, чтобы «Загрузить больше» информации. Я думаю, что кнопка определена ниже:

<div class="tv-load-more tv-load-more--screener js-screener-load-more">
    <span class="tv-load-more__btn">Load More</span>

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

1 Ответ

2 голосов
/ 07 мая 2020

Вот код, использующий Selenium. Проблема только в том, что он намного медленнее исходного кода ... Думаю, я продолжу поиск других источников данных. Еще раз, любые предложения приветствуются!

Sub GetTickerInfo()

    Dim driver As New Selenium.ChromeDriver
    Dim click As Boolean

    With driver
        .AddArgument "--headless"
        .Get "https://www.tradingview.com/markets/stocks-usa/sectorandindustry-industry/biotechnology/"
    End With

    click = True

    On Error GoTo done
    While click
        driver.FindElementByClass("tv-load-more__btn").click
        Application.Wait Now + TimeValue("00:00:01")
    Wend

done:
    Resume continue
continue:

    For Each tr In driver.FindElementsByTag("tr")
       For Each td In tr.FindElementsByTag("td")
           Debug.Print td.Text
       Next td
    Next tr

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