Excel VBA 到 select 网页上的导航选项卡
Excel VBA to select a navigation Tab on a Webpage
卡在网页的某个区域,似乎无法弄清楚如何 select 任何一个导航选项卡。
我已经完成了 ID、密码和其他几个屏幕的编码,才能进入这个屏幕。
尝试了几乎所有存在的“GetElementBy”组合(我认为)但无济于事。
据我所知,选项卡不在自己的框架中。
这是选项卡的 HTML 代码。
如果有人可以帮助快速 selecting 一个,我们将不胜感激。
<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>
从源代码来看,它看起来像一个您正尝试使用 IE VBA Automation 实现自动化的 Angular 站点。
我们可以从源代码中注意到两件事。
- 活动标签为
li
标签设置了 class="active"
属性。
- 每个
li
标签都包含带有 Angular 单击(ng-click)事件的超链接。
在这种情况下,
- 我们可以先尝试遍历
li
标签并删除 class="active"
属性。
- 通过匹配超链接文本找到所需的选项卡并单击超链接,然后为该选项卡设置
class="active"
属性。
这些步骤可能会帮助您select 所需的选项卡。
示例代码:
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
您可以尝试逐步调试示例代码,看看它是如何工作的,进一步,您可以根据自己的需要尝试修改它。
卡在网页的某个区域,似乎无法弄清楚如何 select 任何一个导航选项卡。 我已经完成了 ID、密码和其他几个屏幕的编码,才能进入这个屏幕。 尝试了几乎所有存在的“GetElementBy”组合(我认为)但无济于事。 据我所知,选项卡不在自己的框架中。 这是选项卡的 HTML 代码。 如果有人可以帮助快速 selecting 一个,我们将不胜感激。
<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>
从源代码来看,它看起来像一个您正尝试使用 IE VBA Automation 实现自动化的 Angular 站点。
我们可以从源代码中注意到两件事。
- 活动标签为
li
标签设置了class="active"
属性。 - 每个
li
标签都包含带有 Angular 单击(ng-click)事件的超链接。
在这种情况下,
- 我们可以先尝试遍历
li
标签并删除class="active"
属性。 - 通过匹配超链接文本找到所需的选项卡并单击超链接,然后为该选项卡设置
class="active"
属性。
这些步骤可能会帮助您select 所需的选项卡。
示例代码:
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
您可以尝试逐步调试示例代码,看看它是如何工作的,进一步,您可以根据自己的需要尝试修改它。