Автоматизувати Internet Explorer (IE) за допомогою VBA

Ця сторінка містить приклади кодування для автоматизації Internet Explorer (IE) за допомогою VBA.

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

(Я отримую Партнерську комісію з курсу Дана)

Перейдіть на веб -сторінку з VBA

Перший фрагмент коду відкриває IE і переходить на веб -сайт. Другий фрагмент коду відкриває IE, переходить на веб -сайт і взаємодіє з полем введення.

12345678910111213141516171819202122232425262728293031323334353637 Sub Automate_IE_Load_Page ()'Це завантажить веб -сторінку в IEDim i As LongЗатемнити URL як рядокDim IE As ObjectЗатемнити об’єкт як об’єктЗатемнити objCollection як об'єкт'Створити об'єкт InternetExplorerВстановити IE = CreateObject ("InternetExplorer.Application")'Set IE.Visible = True, щоб зробити IE видимим, або False, щоб IE працював у фоновому режиміIE.Visible = Правда'Визначте URLURL = "https://www.automateexcel.com/excel/"'Перейдіть до URLIE.Navigate URL"Рядок стану повідомляє користувачеві, що веб -сайт завантажуєтьсяApplication.StatusBar = URL & "завантажується. Зачекайте…""Зачекайте, поки IE завантажиться …" IE ReadyState = 4 означає, що веб -сторінка завантажилася (перший цикл встановлений, щоб уникнути випадкового пропуску другого циклу)Do While IE.ReadyState = 4: DoEvents: Цикл 'Do WhileЗробити до IE.ReadyState = 4: DoEvents: Цикл 'Зробити до'Веб -сторінка завантаженаApplication.StatusBar = URL & "Завантажено"'Розвантажте IEВстановити IE = НічогоВстановити objElement = НічогоВстановити objCollection = НічогоEnd Sub

Дуже поширеною проблемою, з якою стикаються люди під час роботи з IE у VBA, є спроба VBA запустити код до повного завантаження Internet Explorer. Використовуючи цей код, ви повідомляєте VBA повторювати цикл, поки IE не буде готовий (IE.ReadyState - 4).

1234 "Зачекайте, поки IE завантажиться …" IE ReadyState = 4 означає, що веб -сторінка завантажилася (перший цикл встановлений, щоб уникнути випадкового пропуску другого циклу)Do While IE.ReadyState = 4: DoEvents: Цикл 'Do WhileЗробити до IE.ReadyState = 4: DoEvents: Цикл 'Зробити до

Також зверніть увагу на цей рядок коду:

1 IE.Visible = ІСТИНА

Цей код перемикає, чи працює IE у фоновому режимі або на передньому плані.

Відкрийте URL -адресу та введіть дані у формі за допомогою VBA

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 "Це повинно бути у верхній частині вашого модуля. Він використовується для встановлення IE як активного вікнаПублічно оголосити функцію SetForegroundWindow Lib "user32" (ByVal HWND Довгий) ДовгийSub Automate_IE_Enter_Data ()'Це завантажить веб -сторінку в IEDim i As LongЗатемнити URL як рядокDim IE As ObjectЗатемнити об’єкт як об’єктЗатемнити objCollection як об'єктDim HWNDSrc As Long'Створити об'єкт InternetExplorerВстановити IE = CreateObject ("InternetExplorer.Application")'Set IE.Visible = True, щоб зробити IE видимим, або False, щоб IE працював у фоновому режиміIE.Visible = Правда'Визначте URLURL = "https://www.automateexcel.com/vba"'Перейдіть до URLIE.Navigate URL"Рядок стану повідомляє користувачеві, що веб -сайт завантажуєтьсяApplication.StatusBar = URL & "завантажується. Зачекайте…""Зачекайте, поки IE завантажиться …" IE ReadyState = 4 означає, що веб -сторінка завантажилася (перший цикл встановлений, щоб уникнути випадкового пропуску другого циклу)Do While IE.ReadyState = 4: DoEvents: ЦиклDo Do IE.ReadyState = 4: DoEvents: Цикл'Веб -сторінка завантаженаApplication.StatusBar = URL & "Завантажено"'Отримайте ідентифікатор вікна для IE, щоб ми могли встановити його як вікно активаціїHWNDSrc = IE.HWND'Встановити IE як активне вікноSetForegroundWindow HWNDSrc'Знайти та заповнити поле введенняn = 0Для кожного пункту у IE.document.allЯкщо itm = "[об'єкт HTMLInputElement]" Тодіn = n + 1Якщо n = 3 Тодіitm.Value = "orksheet"itm.Focus 'Активує поле введення (змушує курсор з'являтися)Application.SendKeys "{w}", True 'Імітує натискання клавіші' W '. Правда каже VBA почекати', доки натискання клавіші не закінчиться, перш ніж продовжити, дозволяючи'javascript на сторінці для запуску та фільтрації таблиціПерейти до endmacroЗакінчити ЯкщоЗакінчити ЯкщоДалі'Розвантажте IEendmacro:Встановити IE = НічогоВстановити objElement = НічогоВстановити objCollection = НічогоEnd Sub

GetElement в IE за допомогою VBA

Взаємодія з об’єктами в Internet Explorer часто може викликати біль. Потрібно визначити, з яким конкретним об’єктом працювати. У наведеному вище коді ми шукаємо третій екземпляр “[object HTMLInputElement]” (форма введення). Потім ми вводимо “orksheet” у форму введення (itm.value = “orksheet”), переміщаємо курсор у форму введення (itm.focus) і вводимо “w”. Введення "w" необхідно в цьому випадку для активації JavaScript, який використовується для фільтрації таблиці.

Існують більш прямі методи вибору об'єктів, проте цей метод повинен працювати, якщо все інше не вдається.

Щоб скористатися цими іншими методами, потрібно скористатися наступними параметрами:

1234 IE.document.getelementbyid ("ID"). Value = "value" 'Знайти за ідентифікаторомIE.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}", Істина

Як правило, ключі "Сендрі" повинні бути крайнім засобом. Зазвичай ви повинні мати можливість безпосередньо взаємодіяти з об’єктами, однак іноді простіше просто скористатися командою Sendkeys. Клавіші Send - це, по суті, те саме, що друкувати за допомогою клавіатури. Перш ніж продовжити, потрібно переконатися, що вибрано правильні вікна та об’єкти. Клавіші Sendke також можуть ініціювати події, які запускаються на основі взаємодії користувача в Інтернеті. У наведеному вище прикладі ми використовуємо клавіші Send, щоб активувати фільтр Javascript у таблиці, яку ми використовуємо на веб -сторінці.

Sendkeys має два входи:
1. ключ для введення (зазвичай оточений {}… {enter}, {q}….)
2. Зачекайте, поки Sendkeys завершиться, перш ніж продовжити TRUE/FALSE. Загалом, під час роботи з 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