Автоматизирайте Internet Explorer (IE) с помощта на VBA

Тази страница съдържа примери за кодиране за автоматизиране на Internet Explorer (IE) с помощта на VBA.

** Актуализация 7/6/2019: В момента най -добрият начин за постигане на уеб автоматизация с VBA е чрез използване на Selenium. Тази статия НЕ обхваща селена. Примерите по -долу ще работят и може да са достатъчни за вашите нужди. Ако обаче имате по -напреднали нужди или искате да станете експерт по уеб автоматизация, силно препоръчвам да използвате вместо това Selenium. Курсът на Dan Strong по уеб автоматизация (отстъпка, достъпна чрез тази връзка) е фантастичен ресурс за изучаване на Selenium:

(Получавам партньорска комисия от курса на Дан)

Придвижете се до уеб страница с VBA

Първият код отваря IE и се придвижва до уебсайт. Втората част от кода отваря IE, отива до уебсайт и взаимодейства с поле за въвеждане.

12345678910111213141516171819202122232425262728293031323334353637 Sub Automate_IE_Load_Page ()„Това ще зареди уеб страница в IEDim i As LongЗатъмняване на URL като низDim IE като обектDim objElement As ObjectDim objCollection As Object„Създайте обект InternetExplorerЗадайте IE = CreateObject ("InternetExplorer.Application")'Set IE.Visible = True, за да стане IE видим, или False, за да работи IE във фонов режимIE.Visible = Вярно„Определете URL адресаURL = "https://www.automateexcel.com/excel/"'Придвижете се до URLIE.Navigate URL„Лентата на състоянието нека потребителят знае, че уебсайтът се зареждаApplication.StatusBar = URL & "се зарежда. Моля, изчакайте …"„Изчакайте, докато IE се зареди …“ IE ReadyState = 4 означава, че уеб страницата се е заредила (първият цикъл е настроен, за да се избегне неволно прескачане на втория цикъл)Do While IE.ReadyState = 4: DoEvents: Loop 'Do WhileНаправете до IE.ReadyState = 4: DoEvents: Loop 'Направете до„Уеб страницата е заредена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: Loop 'Do WhileНаправете до IE.ReadyState = 4: DoEvents: Loop 'Направете до

Обърнете внимание и на този ред код:

1 IE.Visible = ИСТИНА

Този код превключва дали IE работи във фонов режим или на преден план.

Отворете URL и въведете данни във формуляр с помощта на VBA

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 „Това трябва да е в горната част на вашия модул. Използва се за задаване на IE като активен прозорецПублично обявяване на набор от функцииForegroundWindow Lib "user32" (ByVal HWND толкова дълго) колкото дългоSub Automate_IE_Enter_Data ()„Това ще зареди уеб страница в IEDim i As LongЗатъмняване на URL като низDim IE като обектDim objElement As ObjectDim objCollection As ObjectDim HWNDSrc As Long„Създайте обект InternetExplorerЗадайте IE = CreateObject ("InternetExplorer.Application")'Set IE.Visible = True, за да стане IE видим, или False, за да работи IE във фонов режимIE.Visible = Вярно„Определете URL адресаURL = "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 & "Заредено"„Вземете Window ID за 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 '. True казва на 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" 'Намери по 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}", Вярно

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

Sendkeys има два входа:
1. ключът за влизане (обикновено заобиколен от {}… {enter}, {q}….)
2. Изчакайте, докато Sendkeys приключи, преди да продължите TRUE/FALSE. Обикновено искате този набор да е 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 = False

Селен и VBA

Ако сте намерили тази статия за полезна, може да искате да проверите курса на Dan Strong за уеб автоматизация. Той обхваща как да използвате 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