Automatizirajte Internet Explorer (IE) pomoću VBA

Ova stranica sadrži primjere kodiranja za automatiziranje Internet Explorera (IE) pomoću VBA.

** Ažuriranje 6.6.2019 .: Trenutno je najbolji način za postizanje web automatizacije pomoću VBA -e korištenje Selenium -a. Ovaj članak NE pokriva selen. Primjeri u nastavku će funkcionirati i možda će biti dovoljni za vaše potrebe. Međutim, ako imate naprednije potrebe ili želite postati stručnjak za web automatizaciju, toplo preporučujem korištenje Selenium. Tečaj Dan Stronga o web automatizaciji (popust dostupan putem ove veze) fantastičan je izvor za učenje selena:

(Primam Proviziju za pridružene osobe s Danovog tečaja)

Idite na web stranicu s VBA -om

Prvi dio koda otvara IE i odlazi na web stranicu. Drugi dio koda otvara IE, odlazi na web stranicu i komunicira s okvirom za unos.

12345678910111213141516171819202122232425262728293031323334353637 Sub Automate_IE_Load_Page ()'Ovo će učitati web stranicu u IE -uDim i As LongZatamni URL kao nizDim IE kao objektDim objElement As ObjectDim objCollection As Object'Stvorite InternetExplorer objektPostavi IE = CreateObject ("InternetExplorer.Application")'Postavi IE.Visible = Tačno da bi IE bio vidljiv ili Netačno da bi IE radio u pozadiniIE.Visible = Istina'Definirajte URLURL = "https://www.automateexcel.com/excel/"'Idite na URLIE.Navigate URL'Statusna traka neka obavijesti korisnika da se web stranica učitavaApplication.StatusBar = URL & "učitava se. Molimo pričekajte …""Pričekajte dok se IE učitava …" IE ReadyState = 4 znači da se web stranica učitala (prva petlja postavljena je kako bi se izbjeglo nenamjerno preskakanje druge petlje)Do While IE.ReadyState = 4: DoEvents: Petlja 'Do WhileUčiniti do IE.ReadyState = 4: DoEvents: Petlja 'Učiniti do'Web stranica učitanaApplication.StatusBar = URL & "Učitano"'Istovari IEPostavite IE = NištaPostavi objElement = NištaPostavi objCollection = NištaKraj podm

Vrlo čest problem s kojim se ljudi susreću pri radu s IE -om u VBA je VBA koji pokušava pokrenuti kôd prije nego se Internet Explorer potpuno učita. Korištenjem ovog koda govorite VBA -i da ponavlja petlju dok IE ne bude spreman (IE.ReadyState - 4).

1234 "Pričekajte dok se IE učitava …" IE ReadyState = 4 znači da se web stranica učitala (prva je petlja postavljena kako bi se izbjeglo nenamjerno preskakanje druge petlje)Do While IE.ReadyState = 4: DoEvents: Petlja 'Do WhileUčiniti do IE.ReadyState = 4: DoEvents: Petlja 'Učiniti do

Također, imajte na umu ovaj red koda:

1 IE.Visible = ISTINA

Ovaj kôd prebacuje radi li IE u pozadini ili u prednjem planu.

Otvorite URL i unesite podatke u obrazac pomoću VBA

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 'Ovo mora ići na vrhu vašeg modula. Koristi se za postavljanje IE -a kao aktivnog prozoraJavna deklaracija funkcije SetForegroundWindow Lib "user32" (ByVal HWND sve dok)Sub Automate_IE_Enter_Data ()'Ovo će učitati web stranicu u IE -uDim i As LongZatamni URL kao nizDim IE kao objektDim objElement As ObjectDim objCollection As ObjectDim HWNDSrc As Long'Stvorite InternetExplorer objektPostavi IE = CreateObject ("InternetExplorer.Application")'Postavi IE.Visible = Tačno da bi IE bio vidljiv ili Netačno da bi IE radio u pozadiniIE.Visible = Istina'Definirajte URLURL = "https://www.automateexcel.com/vba"'Idite na URLIE.Navigate URL'Statusna traka neka obavijesti korisnika da se web stranica učitavaApplication.StatusBar = URL & "učitava se. Molimo pričekajte …""Pričekajte dok se IE učitava …" IE ReadyState = 4 znači da se web stranica učitala (prva je petlja postavljena kako bi se izbjeglo nenamjerno preskakanje druge petlje)Do While IE.ReadyState = 4: DoEvents: PetljaDo Do IE.ReadyState = 4: DoEvents: Petlja'Web stranica učitanaApplication.StatusBar = URL & "Učitano"'Nabavite ID prozora za IE kako bismo ga mogli postaviti kao prozor za aktiviranjeHWNDSrc = IE.HWND'Postavi IE kao aktivni prozorSetForegroundWindow HWNDSrc'Pronađi i ispuni okvir za unosn = 0Za svaki predmet U IE.document.allAko je itm = "[objekt HTMLInputElement]" Zatimn = n + 1Ako je n = 3 Tadaitm.Value = "orksheet"itm.Focus 'Aktivira okvir za unos (prikazuje kursor)Application.SendKeys "{w}", True 'Simulira pritisak tipke' W '. True govori VBA -i da pričeka'dok pritiskanje tipke ne završi prije nego što nastavite, dopuštajući'javascript na stranici za pokretanje i filtriranje tabliceIdi na endmakroZavrši akoZavrši akoSljedeći'Istovari IEendmakro:Postavite IE = NištaPostavi objElement = NištaPostavi objCollection = NištaKraj podm

GetElement u IE -u pomoću VBA

Interakcija s objektima u Internet Exploreru često može biti bolna. Morate identificirati s kojim konkretnim objektom ćete raditi. U gornjem kodu tražimo treću instancu “[object HTMLInputElement]” (obrazac za unos). Zatim unosimo "orksheet" u obrazac za unos (itm.value = "orksheet"), pomičemo kursor u obrazac za unos (itm.focus) i upisujemo "w". Upisivanje "w" potrebno je u ovom slučaju za aktiviranje javascripta koji se koristi za filtriranje tablice.

Postoje izravnije metode odabira objekata, no ova bi metoda trebala funkcionirati ako sve drugo ne uspije.

Da biste koristili te druge metode, htjet ćete koristiti sljedeće opcije:

1234 IE.document.getelementbyid ("ID"). Value = "value" 'Pronađi po ID -uIE.document.getelementsbytagname ("ID"). Value = "value" 'Pronađi po oznaciIE.document.getelementsbyclassname ("ID"). Value = "value" 'Pronađi po klasiIE.document.getelementsbyname ("ID"). Value = "value" 'Pronađi po imenu

Kad koristite ove metode, možete naići na probleme ako postoji više elemenata s istim imenom. Korištenjem petlje (kao u gornjem primjeru koda), možete odrediti koju ćete instancu elementa koristiti.

Interakcija s IE -om pomoću VBA

U gornjem kodu koristimo događaj: Usredotočenost (itm.focus) za aktiviranje pokazivača u obliku.

Više primjera Objekt/Element događaja, metoda i svojstava možete pronaći ovdje: https://msdn.microsoft.com/en-us/library/ms535893(v=vs.85).aspx

Neće svi ovi funkcionirati sa svakim objektom / elementom i može doći do dosta pokušaja i pogrešaka pri interakciji s objektima u IE -u.

Pošaljite ključeve u Internet Explorer

Koristili smo naredbu Sendkeys u gornjem kodu:

1 Application.SendKeys "{w}", Istina

Sendkey bi općenito trebao biti posljednje sredstvo. Obično biste trebali moći izravno komunicirati s objektima, no ponekad je lakše upotrijebiti naredbu Sendkeys. Sendkeys je u biti isto što i tipkanje tipkovnicom. Prije nastavka morate provjeriti jesu li odabrani ispravni prozori i objekti. Sendkejevi također mogu pokrenuti događaje koji se pokreću na temelju interakcije korisnika na webu. U gornjem primjeru koristimo Sendkeys za aktiviranje Javascript filtra u tablici koju koristimo na web stranici.

Sendkeys ima dva ulaza:
1. ključ za unos (općenito okružen sa {}… {enter}, {q}….)
2. Pričekajte da Sendkeys završi prije nego nastavite TRUE/FALSE. Općenito ćete htjeti da ovo podešenje bude TRUE kada radite s Internet Explorerom.

Pokrenite Internet Explorer u pozadini

Da biste pokrenuli Internet Explorer u pozadini, morate učiniti dvije stvari:

1. Pozovite makronaredbu koja sadrži IE kôd s Application.Run tako da makronaredba radi u pozadini dok nastavljate raditi:

1 Application.Run ("Automatiziraj_IE_Load_Page")

Napomena: Ovaj kôd mogao bi potencijalno prekinuti vaš rad ili bi vaš rad mogao ometati kôd. Na primjer, ako koristite SendKeys, Sendkeys može poslati pritisak na pogrešnu aplikaciju. Budite vrlo oprezni s ovim.
2. Sakrij IE:

1 IE.Visible = Netočno

Selen i VBA

Ako vam je ovaj članak bio koristan, možda biste htjeli pogledati tečaj Dan Stronga o web automatizaciji. Pokriva kako koristiti Selenium s VBA.

(Primam Proviziju za pridružene osobe s Danovog tečaja)

Iskaz jednog od Danovih učenika

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

Vi ćete pomoći u razvoju web stranice, dijeljenje stranicu sa svojim prijateljima

wave wave wave wave wave