Автоматизация Internet Explorer (IE) с помощью VBA

Эта страница содержит примеры кодирования для автоматизации Internet Explorer (IE) с помощью VBA.

** Обновление 07.06.2019: В настоящее время лучший способ добиться веб-автоматизации с помощью VBA - использовать Selenium. Эта статья НЕ распространяется на Selenium. Приведенные ниже примеры подойдут, и их может быть достаточно для ваших нужд. Однако, если у вас есть более продвинутые потребности или вы хотите стать экспертом в веб-автоматизации, я настоятельно рекомендую вместо этого использовать Selenium. Курс Дэна Стронга по веб-автоматизации (скидки доступны по этой ссылке) - фантастический ресурс для изучения Selenium:

(Я получаю партнерскую комиссию с курса Дэна)

Переход на веб-страницу с помощью VBA

Первый фрагмент кода открывает IE и переходит на веб-сайт. Второй фрагмент кода открывает IE, переходит на веб-сайт и взаимодействует с полем ввода.

12345678910111213141516171819202122232425262728293031323334353637 Sub Automate_IE_Load_Page ()'Это загрузит веб-страницу в IEТусклый я до тех пор, покаТусклый URL-адрес в виде строкиТусклый IE как объектDim objElement As ObjectDim objCollection как объект'Создать объект InternetExplorerУстановите IE = CreateObject ("InternetExplorer.Application")'Установите IE.Visible = True, чтобы сделать IE видимым, или False, чтобы IE работал в фоновом режимеIE.Visible = True'Определить URLURL = "https://www.automateexcel.com/excel/"'Перейти к URL-адресуIE.Navigate URL'Строка состояния сообщает пользователю, что сайт загружаетсяApplication.StatusBar = URL & "загружается. Подождите…"«Подождите, пока загружается IE…» IE ReadyState = 4 означает, что веб-страница загружена (первый цикл настроен так, чтобы избежать непреднамеренного пропуска второго цикла)Выполнить пока IE.ReadyState = 4: DoEvents: Loop 'Выполнить покаСделать до IE.ReadyState = 4: DoEvents: Loop 'До тех пор, пока'Веб-страница загруженаApplication.StatusBar = URL & "Загружено"'Выгрузить IEУстановите IE = NothingУстановите objElement = NothingУстановите objCollection = NothingКонец подписки

Очень распространенная проблема, с которой сталкиваются люди при работе с IE в VBA, - это попытка VBA запустить код до полной загрузки Internet Explorer. Используя этот код, вы говорите VBA повторять цикл до тех пор, пока IE не будет готов (IE.ReadyState - 4).

1234 «Подождите, пока загружается IE…» IE ReadyState = 4 означает, что веб-страница загружена (первый цикл установлен, чтобы избежать непреднамеренного пропуска второго цикла)Выполнить пока IE.ReadyState = 4: DoEvents: Loop 'Выполнить покаСделать до IE.ReadyState = 4: DoEvents: Loop 'До тех пор, пока

Также обратите внимание на эту строку кода:

1 IE.Visible = ИСТИНА

Этот код переключает, будет ли IE работать в фоновом режиме или на переднем плане.

Открыть URL-адрес и ввести данные в форму с помощью VBA

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 «Это должно быть в верхней части вашего модуля. Используется для установки IE в качестве активного окнаОбщедоступная функция объявления SetForegroundWindow Lib "user32" (ByVal HWND As Long) до тех пор, покаПодавтомат_IE_Enter_Data ()'Это загрузит веб-страницу в IEТусклый я до тех пор, покаТусклый URL-адрес в виде строкиТусклый IE как объектDim objElement As ObjectDim objCollection как объектDim HWNDSrc As Long'Создать объект InternetExplorerУстановите IE = CreateObject ("InternetExplorer.Application")'Установите IE.Visible = True, чтобы сделать IE видимым, или False, чтобы IE работал в фоновом режимеIE.Visible = True'Определить URLURL = "https://www.automateexcel.com/vba"'Перейти к URL-адресуIE.Navigate URL'Строка состояния сообщает пользователю, что сайт загружаетсяApplication.StatusBar = URL & "загружается. Подождите…"«Подождите, пока загружается IE…» IE ReadyState = 4 означает, что веб-страница загружена (первый цикл настроен так, чтобы избежать непреднамеренного пропуска второго цикла)Выполнить пока IE.ReadyState = 4: DoEvents: LoopСделать до IE.ReadyState = 4: DoEvents: Loop'Веб-страница загруженаApplication.StatusBar = URL & "Загружено"'Получить идентификатор окна для IE, чтобы мы могли установить его как окно активацииHWNDSrc = IE.HWND'Установить IE как активное окноSetForegroundWindow HWNDSrc'Найти и заполнить поле вводап = 0Для каждого элемента в IE.document.allЕсли itm = "[объект HTMLInputElement]" Тогдап = п + 1Если n = 3, тоitm.Value = "orksheet"itm.Focus 'Активирует поле ввода (вызывает появление курсора)Application.SendKeys "{w}", True 'Имитирует нажатие клавиши' W '. True говорит VBA подождать'до завершения нажатия клавиши перед продолжением, позволяя'javascript на странице для запуска и фильтрации таблицыGoTo endmacroКонец, еслиКонец, еслиСледующий'Выгрузить IEendmacro:Установите IE = NothingУстановите objElement = NothingУстановите objCollection = NothingКонец подписки

GetElement в IE с использованием VBA

Взаимодействие с объектами в Internet Explorer часто может вызывать затруднения. Вам необходимо определить, с каким конкретным объектом работать. В приведенном выше коде мы ищем третий экземпляр «[object HTMLInputElement]» (форма ввода). Затем мы вводим «orksheet» в форму ввода (itm.value = «orksheet»), перемещаем курсор в форму ввода (itm.focus) и набираем «w». В этом случае необходимо ввести «w», чтобы активировать javascript, используемый для фильтрации таблицы.

Есть более прямые методы выбора объектов, однако этот метод должен работать, если ничего не помогает.

Чтобы использовать эти другие методы, вы захотите использовать следующие параметры:

1234 IE.document.getelementbyid ("ID"). Value = "value" 'Найти по IDIE.document.getelementsbytagname ("ID"). Value = "value" 'Поиск по тегуIE.document.getelementsbyclassname ("ID"). Value = "value" 'Поиск по классуIE.document.getelementsbyname ("ID"). Value = "value" 'Поиск по имени

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

Взаимодействовать с IE с помощью VBA

В приведенном выше коде мы используем событие: Фокус (itm.focus), чтобы активировать курсор в форме.

Дополнительные примеры событий, методов и свойств объектов / элементов можно найти здесь: https://msdn.microsoft.com/en-us/library/ms535893(v=vs.85).aspx

Не все из них будут работать с каждым объектом / элементом, и при взаимодействии с объектами в IE может быть довольно много проб и ошибок.

Отправить ключи в Internet Explorer

В приведенном выше коде мы использовали команду Sendkeys:

1 Application.SendKeys "{w}", True

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

Sendkeys имеет два входа:
1. ключ для входа (обычно окруженный {}… {enter}, {q}….)
2. Дождитесь завершения отправки ключей, прежде чем продолжить ИСТИНА / ЛОЖЬ. Обычно вам нужно установить значение TRUE при работе с Internet Explorer.

Запустите Internet Explorer в фоновом режиме

Чтобы запустить Internet Explorer в фоновом режиме, вам нужно сделать две вещи:

1. Вызовите макрос, содержащий код IE, с помощью Application.Run, чтобы макрос работал в фоновом режиме, пока вы продолжаете работать:

1 Application.Run ("Automate_IE_Load_Page")

Примечание. Этот код потенциально может прервать вашу работу, или ваша работа может повлиять на код. Например, если вы используете SendKeys, Sendkeys может послать нажатие клавиши не тому приложению. Будьте с этим очень осторожны.
2. Скрыть IE:

1 IE.Visible = Ложь

Селен и VBA

Если вы нашли эту статью полезной, возможно, вы захотите пройти курс Дэна Стронга по веб-автоматизации. В нем рассказывается, как использовать Selenium с VBA.

(Я получаю партнерскую комиссию с курса Дэна)

Отзыв одного из учеников Дэна

https://excelvbaisfun.com/wp-content/uploads/2019/06/dan_strong_complete_web_automation_course_review_VbFn2vwul8A_1080p.mp4

Вы поможете развитию сайта, поделившись страницей с друзьями

wave wave wave wave wave