Zautomatyzuj Internet Explorer (IE) za pomocą VBA

Ta strona zawiera przykłady kodowania służące do automatyzacji programu Internet Explorer (IE) za pomocą VBA.

** Aktualizacja 6.07.2019: Obecnie najlepszym sposobem na osiągnięcie automatyzacji sieci za pomocą VBA jest użycie Selenium. Ten artykuł NIE obejmuje selenu. Poniższe przykłady będą działać i mogą wystarczyć do Twoich potrzeb. Jeśli jednak masz bardziej zaawansowane potrzeby lub chcesz zostać ekspertem w dziedzinie automatyzacji sieci, zdecydowanie polecam zamiast tego korzystanie z Selenium. Kurs Dana Stronga na temat automatyzacji sieci (zniżka dostępna pod tym linkiem) jest fantastycznym źródłem do nauki Selenium:

(otrzymuję prowizję partnerską z kursu Dana)

Przejdź do strony internetowej za pomocą VBA

Pierwszy fragment kodu otwiera IE i prowadzi do strony internetowej. Drugi fragment kodu otwiera IE, przechodzi do strony internetowej i wchodzi w interakcję z polem wprowadzania.

12345678910111213141516171819202122232425262728293031323334353637 Sub Automate_IE_Load_Page()„Spowoduje to załadowanie strony internetowej w IE”Przyciemnij i tak długoDim URL jako ciągDim IE jako obiektDim objectElement As ObjectDim objCollection As Object'Utwórz obiekt InternetExplorer'Ustaw IE = CreateObject("InternetExplorer.Application")'Ustaw IE.Visible = True, aby IE był widoczny, lub False, aby IE działał w tleIE. Widoczny = Prawda'Zdefiniuj adres URL'URL = "https://www.automateexcel.com/excel/"„Przejdź do adresu URL”IE.Nawiguj URL' Pasek stanu informuje użytkownika, że ​​strona się ładujeApplication.StatusBar = Trwa wczytywanie adresu URL & „. Proszę czekać…”' Poczekaj na ładowanie IE… 'IE ReadyState = 4 oznacza, że ​​strona internetowa została załadowana (pierwsza pętla jest ustawiona tak, aby uniknąć przypadkowego przeskoczenia drugiej pętli)Do While IE.ReadyState = 4: DoEvents: Pętla „Do While”Wykonaj do IE.ReadyState = 4: Zdarzenia DoEvent: Pętla „Do zrobienia”„Wczytano stronę internetową”Application.StatusBar = URL & "Załadowano"„Rozładuj IE”Ustaw IE = NicUstaw obiektElement = NicUstaw obiektCollection = NicNapis końcowy

Bardzo częstym problemem, który ludzie napotykają podczas pracy z IE w VBA, jest próba uruchomienia kodu przez VBA przed pełnym załadowaniem programu Internet Explorer. Używając tego kodu, mówisz VBA, aby powtarzał pętlę, aż IE będzie gotowy (IE.ReadyState - 4).

1234 ' Poczekaj na ładowanie IE… 'IE ReadyState = 4 oznacza, że ​​strona internetowa została załadowana (pierwsza pętla jest ustawiona tak, aby uniknąć przypadkowego przeskoczenia drugiej pętli)Do While IE.ReadyState = 4: DoEvents: Pętla „Do While”Wykonaj do IE.ReadyState = 4: Zdarzenia DoEvent: Pętla „Do zrobienia”

Zwróć też uwagę na ten wiersz kodu:

1 IE.Widoczny = PRAWDA

Ten kod przełącza, czy IE działa w tle, czy na pierwszym planie.

Otwórz adres URL i wprowadź dane w formularzu za pomocą VBA

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 „To musi iść na górze twojego modułu. Służy do ustawiania IE jako aktywnego oknaFunkcja deklaracji publicznej SetForegroundWindow Lib „user32” (ByVal HWND tak długa) jak długaSub Automate_IE_Enter_Data()„Spowoduje to załadowanie strony internetowej w IE”Przyciemnij i tak długoDim URL jako ciągDim IE jako obiektDim objectElement As ObjectDim objCollection As ObjectDim HWNDSrc tak długo'Utwórz obiekt InternetExplorer'Ustaw IE = CreateObject("InternetExplorer.Application")'Ustaw IE.Visible = True, aby IE był widoczny, lub False, aby IE działał w tleIE. Widoczny = Prawda'Zdefiniuj adres URL'URL = "https://www.automateexcel.com/vba"„Przejdź do adresu URL”IE.Nawiguj URL' Pasek stanu informuje użytkownika, że ​​strona się ładujeApplication.StatusBar = Trwa wczytywanie adresu URL & „. Proszę czekać…”' Poczekaj na ładowanie IE… 'IE ReadyState = 4 oznacza, że ​​strona internetowa została załadowana (pierwsza pętla jest ustawiona tak, aby uniknąć przypadkowego przeskoczenia drugiej pętli)Do While IE.ReadyState = 4: DoEvents: LoopDopóki IE.ReadyState = 4: DoEvents: Pętla„Wczytano stronę internetową”Application.StatusBar = URL & "Załadowano"'Pobierz identyfikator okna dla IE, abyśmy mogli ustawić go jako okno aktywacjiHWNDSrc = IE.HWND'Ustaw IE jako aktywne oknoSetForeground Window HWNDSrc'Znajdź i wypełnij pole wprowadzanian = 0Dla każdego elementu w IE.document.allIf itm = "[object HTMLInputElement]" Thenn = n + 1Jeśli n = 3 Wtedyitm.Value = "arkusz roboczy"itm.Focus 'Aktywuje pole wprowadzania (sprawia, że ​​pojawia się kursor)Application.SendKeys „{w}”, True „Symuluje naciśnięcie klawisza „W”. True każe VBA czekać'do zakończenia naciśnięcia klawisza przed kontynuowaniem, zezwalając'javascript na stronie, aby uruchomić i przefiltrować tabelęPrzejdź do makra końcowegoZakończ, jeśliZakończ, jeśliNastępny„Rozładuj IE”endmakro:Ustaw IE = NicUstaw obiektElement = NicUstaw obiektCollection = NicNapis końcowy

GetElement w IE przy użyciu VBA

Interakcja z obiektami w Internet Explorerze często może być uciążliwa. Musisz określić, z jakim konkretnym obiektem pracować. W powyższym kodzie szukamy trzeciego wystąpienia „[object HTMLInputElement]” (formularz wejściowy). Następnie wpisujemy „orksheet” do formularza wejściowego (itm.value = „orksheet”), przesuwamy kursor do formularza wejściowego (itm.focus) i wpisujemy „w”. W tym przypadku konieczne jest wpisanie „w”, aby aktywować skrypt JavaScript używany do filtrowania tabeli.

Istnieją bardziej bezpośrednie metody wybierania obiektów, jednak ta metoda powinna działać, jeśli wszystko inne zawiedzie.

Aby skorzystać z tych innych metod, użyj następujących opcji:

1234 IE.document.getelementbyid("ID").value = "wartość" 'Znajdź według IDIE.document.getelementsbytagname("ID").value = "value" 'Znajdź według taguIE.document.getelementsbyclassname("ID").value = "value" 'Znajdź według klasyIE.document.getelementsbyname("ID").value = "value" 'Znajdź według nazwy

Możesz napotkać problemy podczas korzystania z tych metod, jeśli istnieje więcej niż jeden element o tej samej nazwie. Używając pętli (jak w przykładowym kodzie powyżej), możesz określić, którego wystąpienia elementu użyć.

Interakcja z IE za pomocą VBA

W powyższym kodzie używamy zdarzenia: Centrum (itm.focus), aby aktywować kursor w formularzu.

Więcej przykładów zdarzeń, metod i właściwości obiektu/elementu można znaleźć tutaj: https://msdn.microsoft.com/en-us/library/ms535893(v=vs.85).aspx

Nie wszystkie z nich będą działać z każdym obiektem / elementem i może być sporo prób i błędów podczas interakcji z obiektami w IE.

Wyślij klucze do Internet Explorera

Użyliśmy polecenia Sendkeys w powyższym kodzie:

1 Application.SendKeys "{w}", prawda

Sendkeys powinno być generalnie ostatecznością. Zwykle powinieneś mieć możliwość bezpośredniej interakcji z obiektami, jednak czasami łatwiej jest po prostu użyć polecenia Wyślij klawisze. Sendkeys to zasadniczo to samo, co pisanie na klawiaturze. Przed kontynuowaniem musisz upewnić się, że wybierane są prawidłowe okna i obiekty. Sendkeys może również wyzwalać zdarzenia, które są uruchamiane w oparciu o interakcję użytkownika w sieci. W powyższym przykładzie używamy Sendkeys, aby aktywować filtr Javascript w tabeli, którego używamy na stronie internetowej.

Sendkeys ma dwa wejścia:
1. klucz do wprowadzenia (na ogół otoczony przez {}… {enter}, {q}… .)
2. Poczekaj, aż Sendkeys się zakończy, zanim przejdziesz dalej TRUE/FALSE. Podczas pracy z Internet Explorerem zazwyczaj będziesz chciał, aby to ustawienie miało wartość TRUE.

Uruchom Internet Explorera w tle

Aby uruchomić Internet Explorera w tle, musisz wykonać dwie rzeczy:

1. Wywołaj makro zawierające kod IE za pomocą Application.Run, aby makro działało w tle podczas dalszej pracy:

1 Application.Run („Automate_IE_Load_Page”)

Uwaga: ten kod może potencjalnie przerwać twoją pracę lub twoja praca może kolidować z kodem. Na przykład, jeśli używasz SendKeys, Sendkeys może wysłać naciśnięcie klawisza do niewłaściwej aplikacji. Bądź z tym bardzo ostrożny.
2. Ukryj IE:

1 IE. Widoczny = Fałsz

Selen i VBA

Jeśli uznałeś ten artykuł za przydatny, możesz zapoznać się z kursem Dana Stronga na temat automatyzacji sieci. Obejmuje sposób korzystania z Selenium z VBA.

(otrzymuję prowizję partnerską z kursu Dana)

Świadectwo jednego z uczniów Dana

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

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave