【问题标题】:Excel VBA to select a navigation Tab on a WebpageExcel VBA 在网页上选择导航选项卡
【发布时间】:2021-03-25 15:41:30
【问题描述】:

卡在网页的某个区域,似乎无法弄清楚如何选择任何一个导航标签。 我已经完成了对 ID、密码和其他几个屏幕的编码来访问这个。 尝试了几乎所有存在的“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)">
            &nbsp;Search&nbsp;
        </a>
    </li>
</ul>

【问题讨论】:

    标签: html css excel vba internet-explorer-11


    【解决方案1】:

    从源代码来看,它看起来像一个 Angular 站点,您正在尝试使用 IE VBA 自动化实现自动化。

    我们可以从源代码中注意到两件事。

    1. 活动标签为li 标签设置了class="active" 属性。
    2. 每个li 标记都包含带有Angular click(ng-click) 事件的超链接。

    在这种情况下,

    1. 我们可以先尝试循环遍历li标签,去掉class="active"属性。
    2. 通过匹配超链接文本找到所需的选项卡并单击超链接,然后为该选项卡设置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 的方法。我相信我会在这个网站的其他地方再次遇到这个问题,所以你的解释会派上用场。附:你的代码就像一个魅力。非常感谢。
    猜你喜欢
    • 2014-12-31
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 2023-03-19
    • 2018-04-24
    相关资源
    最近更新 更多