Застрял в области веб-страницы и не могу понять, как выбрать какую-либо из вкладок навигации. Я уже закодировал идентификатор, пароль и пару других экранов, чтобы добраться до этого. Перепробовал почти все комбинации "GetElementBy", которые существуют (я думаю), но безрезультатно. Насколько я могу судить, вкладки не находятся в своей собственной рамке. Вот код HTML для вкладок. Если кто-то может помочь с быстрым способом выбора, это было бы очень признательно.
<ul class = "nav nav-tabs">
<li ng-class = "{active:isSet(1)}" class = "active">
<a href = "" role = "tab" data-toggle = "tab" ng-click = "setTab(1)">
Prototypes
</a>
</li>
<li ng-class = "{active:isSet(2) || isSet(3)}">
<a href = "" role = "tab" data-toggle = "tab" ng-click = "setTab(2);">
Devices
</a>
</li>
<li ng-class = "{active:isSet(4)}" ng-show = "!IsInitialRelease">
<a href = "" role = "tab" data-toggle = "tab" ng-click = "setTab(4)">
Notices
</a>
</li>
<li ng-class = "{active:isSet(9)}" ng-show = "!IsInitialRelease">
<a href = "" role = "tab" data-toggle = "tab" ng-click = "setTab(9)">
Assembly Details
</a>
</li>
<li ng-class = "{active:isSet(7)}" ng-show = "!IsInitialRelease">
<a href = "" role = "tab" data-toggle = "tab" ng-click = "setTab(7)">
Waivers
</a>
</li>
<li ng-class = "{active:isSet(8)}" ng-show = "!IsInitialRelease">
<a href = "" role = "tab" data-toggle = "tab" ng-click = "setTab(8)">
Notifications
</a>
</li>
<li ng-class = "{active:isSet(5)}" ng-show = "!IsInitialRelease">
<a href = "" role = "tab" data-toggle = "tab" ng-click = "setTab(5)">
Permits
</a>
</li>
<li ng-class = "{active:isSet(6)}">
<a href = "" role = "tab" data-toggle = "tab" ng-click = "setTab(6)">
Search
</a>
</li>
</ul>
Из исходного кода это выглядит как сайт Angular, который вы пытаетесь автоматизировать с помощью IE VBA Automation.
Мы можем заметить 2 вещи из исходного кода.
class = "active"
, установленный для тега li
.li
содержит гиперссылку с событием Angular click(ng-click).В этом сценарии
li
и удалить атрибут class = "active"
.class = "active"
для этой вкладки.эти шаги могут помочь вам выбрать нужную вкладку.
Образец кода:
Sub demo()
Dim ie
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.navigate "https://Your_Web_page_address_here..."
Do While ie.Busy
Application.Wait DateAdd("s", 1, Now)
Loop
Set elems = ie.document.getElementsByTagName("li")
For Each elem In elems
' Debug.Print (elem.getAttribute("class"))
If (elem.getAttribute("class")) = "active" Then
elem.removeAttribute ("class")
Exit For
End If
Next elem
For Each elem In elems
' Debug.Print (elem.innerText)
If (elem.innerText) Like "*Devices*" Then
elem.Children(0).Click
elem.setAttribute "class", "active"
Exit For
End If
Next elem
'ie.Quit
End Sub
Вы можете попытаться отладить пример кода, чтобы увидеть, как он работает шаг за шагом, и, кроме того, вы можете попытаться изменить его в соответствии с вашими требованиями.
Я не видел такого метода удаления атрибута class = "active" и поиска innerText, как здесь. Я уверен, что столкнусь с этим снова в других местах на этом сайте, так что ваше объяснение мне очень пригодится. P.S. Ваш код работал как шарм. Очень признателен.