Не удается заполнить результаты с веб-сайта, используя VBA - PullRequest
1 голос
/ 07 марта 2019

Я создал скрипт в vba, используя IE, чтобы получить содержимое, всплывающее при выборе опции из выпадающего списка. На целевой странице сайта есть выпадающий список с именем Type. Когда я нажимаю Type, я вижу там несколько вариантов, и я хотел бы нажать на corporate bond среди них. Когда результат будет сгенерирован, я бы хотел проанализировать WKN.

Я попытался заполнить результаты, используя мой текущий скрипт, щелкнув раскрывающийся список и выбрав соответствующий вариант. Однако он щелкает по раскрывающемуся списку и выбирает желаемую опцию, но не может дать никакого результата в InternetExplorer.

Как заполнить и проанализировать результат, выбрав опцию из выпадающего списка?

Моя попытка до сих пор:

Sub SelectItem()
    Const link = "https://www.boerse-stuttgart.de/en/tools/product-search/bonds/"
    Dim IE As New InternetExplorer, Html As HTMLDocument, post As Object, T As Date

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

    Application.Wait Now + TimeValue("00:00:15")
    Html.querySelector("#bsg-filters-btn-bgs-filter-3 .bsg-btn__icon").Click
    Application.Wait Now + TimeValue("00:00:05")
    Html.querySelector("#bsg-filters-menu-bgs-filter-3 .bsg-scrollbox label[for='bsg-checkbox-3053']").Click
    Application.Wait Now + TimeValue("00:00:05")
    Html.querySelector(".bsg-dropdown__footer button[type='button']").Click
End Sub

1 Ответ

2 голосов
/ 07 марта 2019

Вы знакомы с синхронизированными циклами, поэтому вы можете добавить время ожидания к следующему.Я использую селекторы CSS для целевых элементов.Я отслеживаю исчезновение кружащихся кругов в качестве меры загрузки страницы в различных точках.В конце я отслеживаю наличие элементов результатов узлов nodeList.

Option Explicit
'VBE > Tools > References:
' Microsoft Internet Controls
Public Sub GetCodes()
    Dim ie As New InternetExplorer, btn As Object, items As Object, i As Long
    With ie
        .Visible = True
        .Navigate2 "https://www.boerse-stuttgart.de/en/tools/product-search/bonds"

        While .Busy Or .readyState < 4: DoEvents: Wend

        Do
        Loop Until .document.querySelectorAll(".bsg-loader-ring__item").Length = 0


        .document.querySelector("#bsg-filters-btn-bgs-filter-3").Click
        .document.querySelector("#bsg-checkbox-3053").Click

        Set btn = .document.querySelector("#bsg-filters-menu-bgs-filter-3 .bsg-btn__label")

        Do
        Loop While btn.innerText = "Close"

        btn.Click

        Do
        Loop Until .document.querySelectorAll(".bsg-loader-ring__item").Length = 0
        Dim count As Long
        Do
            On Error Resume Next
            Set items = .document.querySelectorAll(".bsg-table__tr td:first-child")
            count = items.Length
            On Error GoTo 0
        Loop While count = 0

        For i = 0 To items.Length - 1
            Debug.Print items.item(i).innerText
        Next
        .Quit
    End With
End Sub
...