VBA нажать веб-кнопку с динамическим elementID и повторяющимся классом
Я совсем новичок в VBA/html, пытаюсь автоматизировать заполнение формы, но даже не могу ее назвать... Я искал в Интернете несколько недель, пытаясь найти много разных кодовых комбинаций, но ни одна из них не добралась до меня.
HTML-код / элемент выглядит следующим образом:
div title:"TextText" class:"text-truncate mb-2" id="abc_sidebar_startmenuitem" data-type="record" data-appid="82" data url="index.cfm?Xxx=&Yyy=">
i class="fa icon-app-82 mr-1 fa-fw">/i>
span class="clickable" id="ext-eng123">Text/span>
/div>
Проблема в том, что class="clickable"
30-е появление кликабельно на странице, id="ext-eng123"
построен из текста ext-eng
и 3 переменные неизвестные цифры, всегда разные.
Пример используемого кода VBA:
Sub GetClick()
Dim ie As Object
Set ie = CreateObject("internetexplorer.application")
With ie
.Visible = True
.navigate "https://company.application.com/home/index.cfm?Tab=home"
Do While .Busy
DoEvents
Loop
Do While .readyState <> 4
DoEvents
Loop
End With
Dim objIE As Object
objIE = document.getElementByClassName("clickable")(29)
objIE.Click
End Sub
Я перепробовал более 10 различных примеров кода, включая номер кадра вызова, но ни один из них не работал, я застрял.
1 ответ
Попробуйте следующий код. Трудно дать какое-либо решение без игры с этим сайтом. Они всегда гипотетичны.
Sub GetClick()
Dim IE As New InternetExplorer, Html As HTMLDocument
With IE
.Visible = True
.Navigate "https://company.application.com/home/index.cfm?Tab=home"
While .Busy = True Or .ReadyState < 4: DoEvents: Wend
Set Html = .Document
End With
''If the problem still persists, make sure to put here some delay
Html.querySelector(".clickable[id^='ext-eng']").Click
End Sub
Другой подход может быть что-то вроде (если слово "Текст" нигде не появляется с таким же именем класса):
For Each elem In Html.getElementsByClassName("clickable")
If InStr(elem.innerText, "Text") > 0 Then elem.Click: Exit For
Next elem
Ссылка для добавления:
Microsoft Internet Controls
Microsoft HTML Object Library