Отказ от ответственности: Цель этого вопроса - создать вопрос и ответ, который будет использоваться в качестве справочного материала для нескольких вопросов, а не объяснять его много раз.

Как получить кнопку или элемент HTML другого объекта для автоматизации IE в VBA?

Пример: я хочу получить идентификатор элемента кнопки "Опубликовать вопрос и ответ" от суперпользователя.

1 ответ1

0

В этом примере мы используем популярный браузер Chrome, хотя во многих других браузерах используется тот же метод проверки HTML-элементов.

Метод правого клика

  1. Найдите нужный элемент (в нашем случае, кнопка « Опубликовать вопрос »).

  2. Щелкните правой кнопкой мыши элемент

  3. Выберите выпадающий элемент Inspect


Это вызовет F12 Developer Tools. Этот набор инструментов автоматически выделит ваш элемент.

Как видите, у вашего элемента есть несколько опций для ссылки на него. Лучший метод - использовать его ID , так как это всегда уникальное значение.

Идентификатор этого элемента - submit-button-42 , который вы нашли в этом:

<id="submit-button-42">

В VBA вы можете установить переменную для этого элемента:

Dim IE As InternetExplorer, myElement As Object
Set IE = New InternetExplorer
Set myElement = IE.document.getElementByID("submit-button-42")

К сожалению, не каждый элемент имеет идентификатор. Этот элемент также включен в пару коллекций. Проблема с элементами коллекции заключается в том, что многие другие элементы также могут быть включены в эту же коллекцию - это означает, что это не уникальное значение.

В нашем примере есть две коллекции, на которые мы можем ссылаться: class и tag . ClassName - это btn__with-icon, который мы видим из:

<button class="btn__with-icon"...>

и TagName - кнопка (которая указана непосредственно перед классом в том же примере выше).

В VBA вы можете установить переменную для этих коллекций как таковую:

Dim IE As InteretExplorer, ieClassColl As Object, ieTagColl As Object
Set ieClassColl = IE.document.getElementsByClassName("btn__with-icon")
Set ieTagColl = IE.document.getElementsByTagName("button")

Помните, это предметы коллекции. Это означает, что для ссылки на нашу конкретную кнопку мы должны знать ее индекс, или мы можем выполнить цикл с помощью For...Each утверждение

Если вы знаете, что индекс # равен 0, используйте это:

Set ieClassBtn = IE.document.getElementsByClassName("btn__with-icon")(0)

В противном случае вы можете просмотреть их:

Dim o As Object, oColl As Object
Set oColl = IE.document.getElementsByTagName("button")

For Each o In oColl
    If o.innerText = "Post Your Question And Answer" Then
        Exit For
    End If
Next

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .