Найти ссылку на элемент HTML-кнопки (класс, тег и т. Д.) Для автоматического нажатия на VBA? - PullRequest
1 голос
/ 05 апреля 2019

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

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

я пробовал usig .getElementsByClassName, но я получаю объект, не поддерживающий этот метод.

Использование getElementsById позволяет мне пройти мимо этого, но затем objElement не поддерживает .Click

Sub OpenIE()

Dim IE As InternetExplorerMedium
Set IE = New InternetExplorerMedium

Dim HTMLDoc As HTMLDocument
Dim objElement As HTMLObjectElement

With IE
    .Visible = True
    .Navigate "internal website link"
    While .Busy Or .ReadyState <> READYSTATE_COMPLETE: Wend
    Set HTMLDoc = .document
    Set objElement = HTMLDoc.getElementById("btn btn-default buttons-csv buttons-html5")
    objElement.Click


    .Quit
End With

Set IE = Nothing
End Sub

Код кнопки HTML:

<a class=" "btn btn-default buttons-csv buttons-html5"  tabindex="0" aria-controls="inboundTransfersTable" href="#"><span>CSV</span></a>

Конечный результат заключается впозвольте CSV открыться как новая книга / лист Excel, так как оттуда я очень хорошо разбираюсь в сортировке / фильтрации данных.

Извиняюсь за код спагетти, так как мне пришлось искать код в других потоках из-зак недостатку знаний

Любая помощь будет принята с благодарностью

Спасибо

1 Ответ

0 голосов
/ 05 апреля 2019

Попробуйте использовать один класс в селекторе css

HTMLDoc.querySelector(".buttons-csv").click

Этот

btn btn-default buttons-csv buttons-html5

является составным классом, каждый пробел которого представляет начало имени нового класса.Может быть возможно соответствовать только одному классу (предпочтительно).Я выбрал вероятный вариант buttons-csv.Вы можете просто присоединиться к классам с "."внутри селектора, чтобы добавить больше классов к селектору, например,

.btn.btn-default

У него есть два класса в селекторе.


Синхронизированный цикл для обеспечения наличия элемента:

Dim t As Date, ele As Object
Const MAX_WAIT_SEC As Long = 10

t = Timer
Do
    On Error Resume Next
    Set ele = HTMLDoc.querySelector(".buttons-csv")
    On Error GoTo 0
    If Timer - t > MAX_WAIT_SEC Then Exit Do
Loop While ele Is Nothing

If Not ele Is Nothing Then
    ele.Click
End If
...