Excel VBA для выбора вкладки навигации на веб-странице

Застрял в области веб-страницы и не могу понять, как выбрать какую-либо из вкладок навигации. Я уже закодировал идентификатор, пароль и пару других экранов, чтобы добраться до этого. Перепробовал почти все комбинации "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>
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
0
464
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Из исходного кода это выглядит как сайт Angular, который вы пытаетесь автоматизировать с помощью IE VBA Automation.

Мы можем заметить 2 вещи из исходного кода.

  1. Активная вкладка имеет атрибут class = "active", установленный для тега li.
  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, как здесь. Я уверен, что столкнусь с этим снова в других местах на этом сайте, так что ваше объяснение мне очень пригодится. P.S. Ваш код работал как шарм. Очень признателен.

John Wilson 15.12.2020 04:40

Другие вопросы по теме