Как щелкнуть по элементу <a>из <li>из <ul>, используя vba? - PullRequest
1 голос
/ 17 июня 2019

Вот фрагмент кода HTML-страницы, над которой я работаю. enter image description here

Я пытаюсь написать код VBA, который нажимает на элемент, выделенный синим цветом на рисунке выше.

Вот код, который я написал:

Set objIE = New SHDocVw.InternetExplorer
Do While objIE.Busy: DoEvents: Loop
Do Until objIE.readyState = READYSTATE_COMPLETE: DoEvents: Loop

Set IeDoc2 = objIE.Document
Set the_input_elements2 = IeDoc2.getElementsByClassName("parent-item")

For Each input_element2 In the_input_elements2
    If input_element2.href = "javascript:directToSearch()" Then
        input_element2.Click
        Exit For
    End If
Next input_element2

Я новичок в VBA, и я не знаю, является ли это правильным способом нажатия на элемент ul в HTML с использованием VBA. Когда я запускаю этот код, ничего не происходит. Нет ошибок, но нет результата.

Я был бы очень рад, если бы вы могли помочь мне с этим.

Спасибо :)

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Вот несколько способов обратиться к интересующему вас элементу:

'Targeted (if you know exactly at which order the elements appear in the list)
Dim li As HTMLListElement
Set li = IeDoc2.getElementById("accordion-leftmenu")    'get the list item you're interested in...
Debug.Print li.Children(1).innerText                    '...and access its sub-element in a targeted way
Debug.Print li.getElementsByTagName("a")(1).innerText   '...or find all <a></a> elements contained in it and access the one you're interested in, in a targeted way

'Non targeted (you have to search for it)
Dim element As HTMLObjectElement
For Each element In IeDoc2.getElementsByTagName("a")    'loop through all <a></a> elements...
    If element.innerText = "Advanced Search" Then       '...and find the one you're interested in
        Debug.Print element.innerText
    End If
Next element

В демонстрационных целях приведенный выше код просто печатает внутренний текст элемента.Вы можете изменить его соответствующим образом.

Использованные ссылки: Microsoft HTML Object Library

Также в примечании, пожалуйста, в следующий раз опубликуйте фактический HTML-код, а не скриншот.Людям было бы легче помочь вам.

0 голосов
/ 17 июня 2019

Зациклить все теги "a" внутри идентификатора левого меню

IeDoc2.getElementById("accordion-leftmenu").getElementsByTagName("a")

в цикле проверьте, является ли .innerText «Расширенным поиском». щелкните, если это так.

Dim IeDoc2 As MSHTML.HTMLDocument
Dim the_input_elements2 As MSHTML.IHTMLElementCollection
Dim input_element2 As MSHTML.IHTMLElement

...

Set the_input_elements2 = IeDoc2.getElementById("accordion-leftmenu").getElementsByTagName("a")

For Each input_element2 In the_input_elements2
    If input_element2.innerText = "Advanced Search" Then
        input_element2.Click
        Exit For
    End If
Next input_element2

Редактировать: Хорошо, я протестировал код, и он работает. Однако я должен был убедиться, что две ссылки были проверены: «Библиотека объектов Microsoft HTML» и «Элементы управления Microsoft Internet».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...