Avtomatizirajte Internet Explorer (IE) z uporabo VBA

Ta stran vsebuje primere kodiranja za avtomatizacijo Internet Explorerja (IE) z uporabo VBA.

** Posodobitev 6.6.2019: Trenutno je najboljši način za spletno avtomatizacijo z VBA uporaba Selenium. Ta članek NE zajema selena. Spodnji primeri bodo delovali in bodo morda zadostovali za vaše potrebe. Če pa imate naprednejše potrebe ali želite postati strokovnjak za spletno avtomatizacijo, toplo priporočam uporabo Selenium. Tečaj Dan Stronga o spletni avtomatizaciji (popust je na voljo na tej povezavi) je odličen vir za učenje selena:

(Prejel sem pridruženo provizijo z Danovega tečaja)

Pomaknite se na spletno stran z VBA

Prvi del kode odpre IE in se pomakne na spletno mesto. Drugi del kode odpre IE, se pomakne na spletno mesto in komunicira z vnosnim poljem.

12345678910111213141516171819202122232425262728293031323334353637 Sub Automate_IE_Load_Page ()'To bo naložilo spletno stran v IEDim i As LongZatemni URL kot nizZatemni IE kot objektZatemni objElement kot objektZatemni objCollection kot objekt'Ustvari objekt InternetExplorerNastavite IE = CreateObject ("InternetExplorer.Application")'Set IE.Visible = True, da naredite IE vidnim, ali False, da se IE izvaja v ozadjuIE.Visible = Res'Določite URLURL = "https://www.automateexcel.com/excel/"'Pomaknite se na URLIE.Navigate URL'Vrstica stanja sporoča uporabnikom, da se spletno mesto nalagaApplication.StatusBar = URL & "se nalaga. Počakajte …"'Počakaj, da se IE naloži …' IE ReadyState = 4 pomeni, da se je spletna stran naložila (prva zanka je nastavljena tako, da se izogne ​​nenamernemu preskakovanju druge zanke)Do While IE.ReadyState = 4: DoEvents: Loop 'Do WhileDo Do IE.ReadyState = 4: DoEvents: Loop 'Do Until'Spletna stran je naloženaApplication.StatusBar = URL & "Naloženo"'Raztovorite IENastavite IE = NičNastavi objElement = NičNastavi objCollection = NičEnd Sub

Zelo pogosta težava, s katero se ljudje srečujejo pri delu z IE v VBA, je, da VBA poskuša zagnati kodo, preden se Internet Explorer popolnoma naloži. Z uporabo te kode poveste VBA, naj ponovi zanko, dokler IE ni pripravljen (IE.ReadyState - 4).

1234 'Počakaj, da se IE naloži …' IE ReadyState = 4 pomeni, da se je spletna stran naložila (prva zanka je nastavljena tako, da se izogne ​​nenamernemu preskakovanju druge zanke)Do While IE.ReadyState = 4: DoEvents: Loop 'Do WhileDo Do IE.ReadyState = 4: DoEvents: Loop 'Do Until

Upoštevajte tudi to vrstico kode:

1 IE.Visible = TRUE

Ta koda preklopi, ali se IE izvaja v ozadju ali v ospredju.

Odprite URL in vnesite podatke v obrazec z uporabo VBA

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 "To mora iti na vrh vašega modula. Uporablja se za nastavitev IE kot aktivnega oknaJavno razglasi funkcijo SetForegroundWindow Lib "user32" (ByVal HWND As Long) As LongSub Automate_IE_Enter_Data ()'To bo naložilo spletno stran v IEDim i As LongZatemni URL kot nizZatemni IE kot objektZatemni objElement kot objektZatemni objCollection kot objektZatemni HWNDSrc tako dolgo'Ustvari predmet InternetExplorerNastavite IE = CreateObject ("InternetExplorer.Application")'Set IE.Visible = True, da bo IE viden, ali False, da se IE izvaja v ozadjuIE.Visible = Res'Določite URLURL = "https://www.automateexcel.com/vba"'Pomaknite se na URLIE.Navigate URL'Vrstica stanja sporoča uporabnikom, da se spletno mesto nalagaApplication.StatusBar = URL & "se nalaga. Počakajte …"'Počakaj, da se IE naloži …' IE ReadyState = 4 pomeni, da se je spletna stran naložila (prva zanka je nastavljena tako, da se nehote preskoči druga zanka)Do While IE.ReadyState = 4: DoEvents: LoopDo Do IE.ReadyState = 4: DoEvents: Loop'Spletna stran je naloženaApplication.StatusBar = URL & "Naloženo"'Pridobite ID okna za IE, da ga lahko nastavimo kot okno za aktiviranjeHWNDSrc = IE.HWND'Nastavite IE kot aktivno oknoSetForegroundWindow HWNDSrc'Poišči in izpolni polje za vnosn = 0Za vsak predmet v IE.document.allČe je itm = "[objekt HTMLInputElement]" Potemn = n + 1Če je n = 3, potemitm.Value = "orksheet"itm.Focus 'Aktivira polje za vnos (prikaže kurzor)Application.SendKeys "{w}", True 'Simulira pritisk tipke' W '. True pove VBA, naj počaka'dokler pritisk na tipko ni končan, preden nadaljujete, kar omogoča'javascript na strani za zagon in filtriranje tabelePojdi na endmacroKonec ČeKonec ČeNaslednji'Raztovorite IEendmakro:Nastavite IE = NičNastavi objElement = NičNastavi objCollection = NičEnd Sub

GetElement v IE z uporabo VBA

Interakcija s predmeti v Internet Explorerju je lahko pogosto bolečina. Ugotoviti morate, s kakšnim predmetom boste delali. V zgornji kodi iščemo tretji primerek »[object HTMLInputElement]« (vnosni obrazec). Nato v vnosni obrazec vnesemo »orksheet« (itm.value = »orksheet«), premaknemo kazalec v obrazec za vnos (itm.focus) in vnesemo »w«. Vnos »w« je v tem primeru potreben za aktiviranje javascripta, ki se uporablja za filtriranje tabele.

Obstaja več neposrednih metod za izbiro predmetov, vendar bi morala ta metoda delovati, če vse drugo ne uspe.

Če želite uporabiti te druge metode, boste želeli uporabiti naslednje možnosti:

1234 IE.document.getelementbyid ("ID"). Value = "value" 'Najdi po ID -juIE.document.getelementsbytagname ("ID"). Value = "value" 'Najdi po oznakiIE.document.getelementsbyclassname ("ID"). Value = "value" 'Poišči po razreduIE.document.getelementsbyname ("ID"). Value = "value" 'Poišči po imenu

Pri uporabi teh metod lahko naletite na težave, če obstaja več elementov z istim imenom. Z uporabo zanke (kot v zgornji vzorčni kodi) lahko določite, kateri primerek elementa želite uporabiti.

Interakcija z IE z uporabo VBA

V zgornji kodi uporabljamo dogodek: Osredotočite se (itm.focus), da aktivirate kazalec v obrazcu.

Več primerov dogodkov, metod in lastnosti objektov/elementov najdete tukaj: https://msdn.microsoft.com/en-us/library/ms535893(v=vs.85).aspx

Vsi ti ne bodo delovali z vsakim objektom / elementom, pri interakciji s predmeti v IE pa bo morda kar nekaj poskusov in napak.

Pošlji ključe v Internet Explorer

V zgornji kodi smo uporabili ukaz Sendkeys:

1 Application.SendKeys "{w}", True

Pošlji ključe bi morali biti na splošno zadnja možnost. Običajno bi morali imeti možnost neposredne interakcije s predmeti, včasih pa je lažje uporabiti ukaz Sendkeys. Sendkeys je v bistvu isto kot tipkanje s tipkovnico. Preden nadaljujete, se morate prepričati, da so izbrana ustrezna okna in predmeti. Sendkey lahko sprožijo tudi dogodke, ki se izvajajo na podlagi interakcije uporabnikov v spletu. V zgornjem primeru uporabljamo tipke Send, da aktiviramo filter Javascript v tabeli, ki jo uporabljamo na spletni strani.

Sendkeys ima dva vhoda:
1. ključ za vnos (običajno obdan z {}… {enter}, {q}….)
2. Počakajte, da Sendkeys konča, preden nadaljujete TRUE/FALSE. Pri delu z Internet Explorerjem boste na splošno želeli, da je ta nastavitev TRUE.

Zaženite Internet Explorer v ozadju

Če želite Internet Explorer zagnati v ozadju, morate narediti dve stvari:

1. Pokličite makro, ki vsebuje kodo IE z aplikacijo Application.Run, tako da se makro izvaja v ozadju, ko nadaljujete z delom:

1 Application.Run ("Automate_IE_Load_Page")

Opomba: Ta koda lahko potencialno prekine vaše delo ali pa vaše delo moti kodo. Če na primer uporabljate SendKeys, lahko Sendkeys pošlje pritisk tipke na napačno aplikacijo. Pri tem bodite zelo previdni.
2. Skrij IE:

1 IE.Visible = Napačno

Selen in VBA

Če se vam je zdel ta članek koristen, si oglejte tečaj Dan Stronga o spletni avtomatizaciji. Zajema, kako uporabljati Selenium z VBA.

(Od Dan -ovega tečaja prejmem pridruženo provizijo)

Pričanje enega od Danovih študentov

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

Vam bo pomagal razvoj spletnega mesta, ki si delijo stran s svojimi prijatelji

wave wave wave wave wave