Automatizați Internet Explorer (IE) folosind VBA

Această pagină conține exemple de codificare pentru automatizarea Internet Explorer (IE) folosind VBA.

** Actualizare 07.06.2019: În prezent, cel mai bun mod de a realiza automatizarea web cu VBA este folosind Selenium. Acest articol NU acoperă seleniul. Exemplele de mai jos vor funcționa și ar putea fi suficiente pentru nevoile dvs. Cu toate acestea, dacă aveți nevoi mai avansate sau doriți să deveniți un expert în automatizarea web, vă recomand cu tărie să folosiți Selenium în loc. Cursul lui Dan Strong despre automatizarea web (reducere disponibilă prin acest link) este o resursă fantastică pentru a învăța Seleniu:

(Primesc o Comisie de afiliere de la cursul lui Dan)

Navigați la o pagină web cu VBA

Prima bucată de cod deschide IE și navighează către un site web. A doua bucată de cod deschide IE, navighează la un site web și interacționează cu o casetă de introducere.

12345678910111213141516171819202122232425262728293031323334353637 Sub Automate_IE_Load_Page ()„Aceasta va încărca o pagină web în IEDim i As LongDim URL ca șirDim IE Ca obiectDim objElement Ca obiectDim objColecția ca obiect'Creați obiect InternetExplorerSetați IE = CreateObject ("InternetExplorer.Application")'Set IE.Visible = True pentru a face IE vizibil sau False pentru ca IE să ruleze în fundalIE.Visible = Adevărat„Definiți adresa URLURL = "https://www.automateexcel.com/excel/"'Navigați la URLAdică URL navigare„Bara de stare anunță utilizatorul că se încarcă site-ul webApplication.StatusBar = URL-ul & "se încarcă. Vă rugăm să așteptați …"„Așteptați în timp ce încărcați IE…” IE ReadyState = 4 înseamnă că pagina web s-a încărcat (prima buclă este setată pentru a evita sărind din greșeală peste a doua buclă)Do While IE.ReadyState = 4: DoEvents: Buclă 'Do WhileFă până la IE.ReadyState = 4: DoEvents: Buclă 'Fă până'Pagină web încărcatăApplication.StatusBar = URL & „Încărcat”'Descărcați IESet IE = NimicSet objElement = NimicSet objCollection = NimicSfârșitul Sub

O problemă foarte comună pe care o întâmpină oamenii atunci când lucrează cu IE în VBA este VBA care încearcă să ruleze cod înainte ca Internet Explorer să se fi încărcat complet. Utilizând acest cod, îi spuneți VBA să repete o buclă până când IE este gata (IE.ReadyState - 4).

1234 „Așteptați în timp ce încărcați IE…” IE ReadyState = 4 înseamnă că pagina web s-a încărcat (prima buclă este setată pentru a evita sărind din greșeală peste a doua buclă)Do While IE.ReadyState = 4: DoEvents: Buclă 'Do WhileFă până la IE.ReadyState = 4: DoEvents: Buclă 'Fă până

De asemenea, rețineți această linie de cod:

1 IE.Visible = ADEVĂRAT

Acest cod comută dacă IE rulează în fundal sau în prim-plan.

Deschideți adresa URL și introduceți datele în formular folosind VBA

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 „Acesta trebuie să meargă în partea de sus a modulului dvs. Este folosit pentru a seta IE ca fereastră activăPublic Declare Function SetForegroundWindow Lib "user32" (ByVal HWND As Long) As LongSub Automate_IE_Enter_Data ()„Aceasta va încărca o pagină web în IEDim i As LongDim URL ca șirDim IE Ca obiectDim objElement Ca obiectDim objColecția ca obiectDim HWNDSrc As Long'Creați obiect InternetExplorerSetați IE = CreateObject ("InternetExplorer.Application")'Set IE.Visible = True pentru a face IE vizibil sau False pentru ca IE să ruleze în fundalIE.Visible = Adevărat„Definiți adresa URLURL = "https://www.automateexcel.com/vba"'Navigați la URLAdică URL navigare„Bara de stare anunță utilizatorul că se încarcă site-ul webApplication.StatusBar = URL-ul & "se încarcă. Vă rugăm să așteptați …"„Așteptați în timp ce încărcați IE…” IE ReadyState = 4 înseamnă că pagina web s-a încărcat (prima buclă este setată pentru a evita sărind din greșeală peste a doua buclă)Do While IE.ReadyState = 4: DoEvents: BuclăFaceți până la IE.ReadyState = 4: DoEvents: Buclă'Pagină web încărcatăApplication.StatusBar = URL & „Încărcat”„Obțineți ID-ul ferestrei pentru IE, astfel încât să-l putem seta ca fereastră de activareHWNDSrc = IE.HWND'Setați IE ca fereastră activăSetForegroundWindow HWNDSrc„Găsiți și completați caseta de intraren = 0Pentru fiecare itm din IE.document.allDacă itm = "[object HTMLInputElement]" Atuncin = n + 1Dacă n = 3 Atunciitm.Value = "foaie orks"itm.Focus 'Activează caseta de intrare (face ca cursorul să apară)Application.SendKeys „{w}”, True „Simulează o apăsare de tastă„ W ”. True îi spune VBA să aștepte'până la apăsarea tastei înainte de a continua, permițând'javascript pe pagină pentru a rula și filtra tabelulGoTo endmacroEnd IfEnd IfUrmătorul'Descărcați IEendmacro:Set IE = NimicSet objElement = NimicSet objCollection = NimicSfârșitul Sub

GetElement în IE folosind VBA

Interacțiunea cu obiecte din Internet Explorer poate fi adesea o durere. Trebuie să identificați cu ce obiect specific să lucrați. În codul de mai sus, căutăm a treia instanță a „[object HTMLInputElement]” (un formular de intrare). Apoi introducem „orksheet” în formularul de introducere (itm.value = „orksheet”), mutăm cursorul în formularul de introducere (itm.focus) și tastăm „w”. Tastarea „w” este necesară în acest caz pentru a activa javascriptul utilizat pentru filtrarea tabelului.

Există mai multe metode directe de selectare a obiectelor, cu toate acestea această metodă ar trebui să funcționeze dacă toate celelalte nu reușesc.

Pentru a utiliza aceste alte metode, veți dori să utilizați următoarele opțiuni:

1234 IE.document.getelementbyid ("ID"). Value = "valoare" 'Găsiți după IDIE.document.getelementsbytagname ("ID"). Value = "valoare" 'Găsiți după etichetăIE.document.getelementsbyclassname ("ID"). Value = "valoare" 'Găsiți după clasăIE.document.getelementsbyname ("ID"). Value = "valoare" 'Găsiți după nume

Puteți întâmpina probleme atunci când utilizați aceste metode dacă există mai multe elemente cu același nume. Utilizând o buclă (ca în exemplul de cod de mai sus), puteți specifica instanța elementului de utilizat.

Interacționați cu IE folosind VBA

În codul de mai sus folosim evenimentul: Concentrați-vă (itm.focus) pentru a activa cursorul în formular.

Puteți găsi mai multe exemple de evenimente, metode și proprietăți ale obiectului / elementului aici: https://msdn.microsoft.com/en-us/library/ms535893(v=vs.85).aspx

Nu toate acestea vor funcționa cu fiecare obiect / element și pot exista destul de puține încercări și erori atunci când interacționați cu obiecte din IE.

Trimite chei la Internet Explorer

Am folosit comanda Sendkeys în codul de mai sus:

1 Application.SendKeys "{w}", Adevărat

Sendkeys ar trebui să fie, în general, o ultimă soluție. De obicei, ar trebui să puteți interacționa direct cu obiecte, cu toate acestea uneori este mai ușor să folosiți doar comanda Sendkeys. Sendkeys este în esență același lucru cu tastarea cu tastatura. Trebuie să vă asigurați că ferestrele și obiectele corecte sunt selectate înainte de a continua. Sendkeys poate declanșa, de asemenea, evenimente care rulează pe baza interacțiunii utilizatorului de pe web. În exemplul de mai sus, folosim Sendkeys pentru a activa filtrul Javascript din tabelul pe care îl folosim pe pagina web.

Sendkeys are două intrări:
1. tasta de introdus (în general înconjurată de {}… {enter}, {q}….)
2. Așteptați până când Sendkeys a finalizat înainte de a continua TRUE / FALSE. În general, veți dori ca acest set să fie ADEVĂRAT atunci când lucrați cu Internet Explorer.

Rulați Internet Explorer în fundal

Pentru a rula Internet Explorer în fundal, trebuie să faceți două lucruri:

1. Apelați macrocomanda care conține codul IE cu Application.Run astfel încât macrocomanda să ruleze în fundal pe măsură ce continuați să lucrați:

1 Application.Run ("Automate_IE_Load_Page")

Notă: acest cod ar putea întrerupe munca dvs. sau munca dvs. ar putea interfera cu codul. De exemplu, dacă utilizați SendKeys, Sendkeys poate trimite o tastare către aplicația greșită. Fii foarte atent cu asta.
2. Ascundeți IE:

1 IE.Visible = False

Seleniu și VBA

Dacă vi s-a părut util acest articol, vă recomandăm să consultați cursul lui Dan Strong despre automatizare web. Acoperă modul de utilizare a seleniului cu VBA.

(Primesc o Comisie de afiliere de la cursul lui Dan)

Mărturie de la unul dintre elevii lui Dan

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

Vei ajuta la dezvoltarea site-ului, partajarea pagina cu prietenii

wave wave wave wave wave