Нажмите кнопку без идентификатора, используя VBA - PullRequest
1 голос
/ 02 апреля 2020

Я хочу загрузить исторические данные c из NASDAQ, используя VBA. Мне удалось изменить «FromDate» на нужный диапазон, но мне не удалось заставить код нажать кнопку «Поиск» (так как у нее нет идентификатора), которая извлекает данные. Пожалуйста, помогите мне.

МОЙ VBA:

Sub OMX_data()

Dim URL As String
Dim ie As InternetExplorer

Set ie = New InternetExplorer
ie.Visible = True

ie.navigate ("http://www.nasdaqomxnordic.com/indexes/historical_prices?Instrument=DK0060368991")

Do
DoEvents
Loop Until ie.readyState = 4

ie.document.all("FromDate").Value = "2018-01-01"

End Sub

THE HTML

<div class="filterAreaRow overflowHidden">
<div class="button doSearch floatRight ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" onclick="historical.load();return false;" role="button" aria-disabled="false"><span class="ui-button-text">Search</span></div>
</div>

1 Ответ

1 голос
/ 02 апреля 2020

Вы можете получить элемент кнопки поиска по классу с помощью getElementsByClassName и вызвать его с помощью метода Click, doSearch - это имя кнопки поиска в этой форме.

Последняя две строки - это Решение вашего вопроса.

Sub OMX_data()
    Dim URL As String
    Dim ie As InternetExplorer

    Set ie = New InternetExplorer
    ie.Visible = True

    ie.navigate ("http://www.nasdaqomxnordic.com/indexes/historical_prices?Instrument=DK0060368991")

    Do
        DoEvents
    Loop Until ie.readyState = 4

    ie.Document.all("FromDate").Value = "2018-01-01"

    Set search_button = ie.Document.getElementsByClassName("doSearch")
    search_button(0).Click
End Sub

Вы можете использовать HTML DOM для импорта данных в Excel, ниже приведен пример для импорта данных в Excel

Sub OMX_data()
    Dim URL As String
    Dim ie As InternetExplorer

    Set ie = New InternetExplorer
    ie.Visible = True

    ie.Navigate ("http://www.nasdaqomxnordic.com/indexes/historical_prices?Instrument=DK0060368991")

    Do
        DoEvents
    Loop Until ie.ReadyState = 4

    ie.Document.all("FromDate").Value = "2018-01-01"

    Set search_button = ie.Document.getElementsByClassName("doSearch")
    search_button(0).Click

    ' Wait for filter apply
    Application.Wait (Now + TimeValue("0:00:05"))

    ' Use HTML DOM
    Set result = ie.Document.getElementById("historicalOutput").getElementsByTagName("tbody")(0).getElementsByTagName("tr")

    i = 0   ' for row
    For Each r In result
        j = 0   ' for column
        For Each c In r.Children
            Range("A1").Offset(i, j).Value = c.innertext
            j = j + 1
            DoEvents
        Next
        i = i + 1
    Next

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