Automatizujte Internet Explorer (IE) pomocou VBA

Táto stránka obsahuje príklady kódovania na automatizáciu programu Internet Explorer (IE) pomocou jazyka VBA.

** Aktualizácia 7. júna 2019: V súčasnej dobe je najlepší spôsob, ako dosiahnuť automatizáciu webu s VBA, pomocou selénu. Tento článok NEZAHRNUJE selén. Nasledujúce príklady budú fungovať a môžu byť dostatočné pre vaše potreby. Ak však máte pokročilejšie potreby alebo sa chcete stať odborníkom na automatizáciu webu, dôrazne odporúčam namiesto toho použiť Selenium. Kurz Dana Stronga o automatizácii webu (zľava dostupná prostredníctvom tohto odkazu) je fantastickým zdrojom informácií o seléne:

(Dostávam províziu za pridruženie z kurzu Dana)

Prejdite na webovú stránku s VBA

Prvá časť kódu otvorí IE a prejde na webovú stránku. Druhá časť kódu otvorí IE, prejde na webovú stránku a interaguje so vstupným poľom.

12345678910111213141516171819202122232425262728293031323334353637 Sub Automate_IE_Load_Page ()„Tým sa načíta webová stránka v IEDim i As LongDim URL ako reťazecDim IE ako objektDim objElement As ObjectDim objCollection As Object'Vytvorte objekt InternetExplorerNastaviť IE = CreateObject ("InternetExplorer.Application")„Nastavte IE.Visible = True, aby bol IE viditeľný, alebo False, aby IE bežal na pozadíIE.Visible = True'Definujte URLURL = "https://www.automateexcel.com/excel/"'Prejdite na URLIE. Prejdite na URL'Stavový riadok informuje používateľa, že webová stránka sa načítavaApplication.StatusBar = URL & "sa načítava. Počkajte prosím…"„Počkajte, kým sa načítava IE…“ IE ReadyState = 4 znamená, že webová stránka je načítaná (prvá slučka je nastavená tak, aby sa zabránilo neúmyselnému preskočeniu druhej slučky)Do While IE.ReadyState = 4: DoEvents: Loop 'Do WhileUrobiť do IE.ReadyState = 4: DoEvents: Smyčka Do Do'Webová stránka je načítanáApplication.StatusBar = URL a "načítané"„Uvoľnite IENastaviť IE = NičNastaviť objElement = ničNastaviť objCollection = ničKoniec pod

Veľmi častým problémom, s ktorým sa ľudia stretávajú pri práci s IE vo VBA, je pokus VBA o spustenie kódu pred úplným načítaním programu Internet Explorer. Použitím tohto kódu poviete VBA, aby opakoval slučku, kým nebude IE pripravený (IE.ReadyState - 4).

1234 „Počkajte, kým sa načítava IE…“ IE ReadyState = 4 znamená, že webová stránka je načítaná (prvá slučka je nastavená tak, aby sa zabránilo neúmyselnému preskočeniu druhej slučky)Do While IE.ReadyState = 4: DoEvents: Loop 'Do WhileUrobiť do IE.ReadyState = 4: DoEvents: Smyčka Do Do

Všimnite si tiež tento riadok kódu:

1 IE.Visible = TRUE

Tento kód prepína, či IE beží na pozadí alebo v popredí.

Otvorte URL a zadajte údaje do formulára pomocou VBA

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 „Toto musí byť v hornej časti modulu. Slúži na nastavenie IE ako aktívneho oknaVerejná deklarácia Funkcia SetForegroundWindow Lib "user32" (ByVal HWND As Long) Tak dlhoSub Automate_IE_Enter_Data ()„Tým sa načíta webová stránka v IEDim i As LongDim URL ako reťazecDim IE ako objektDim objElement As ObjectDim objCollection As ObjectDim HWNDSrc ako dlhé'Vytvorte objekt InternetExplorerNastaviť IE = CreateObject ("InternetExplorer.Application")„Nastavte IE.Visible = True, aby bol IE viditeľný, alebo False, aby IE bežal na pozadíIE.Visible = True'Definujte URLURL = "https://www.automateexcel.com/vba"'Prejdite na URLIE. Prejdite na URL'Stavový riadok informuje používateľa, že webová stránka sa načítavaApplication.StatusBar = URL & "sa načítava. Počkajte prosím…"„Počkajte, kým sa načítava IE…“ IE ReadyState = 4 znamená, že webová stránka je načítaná (prvá slučka je nastavená tak, aby sa zabránilo neúmyselnému preskočeniu druhej slučky)Vykonajte IE.ReadyState = 4: DoEvents: LoopVykonajte do IE.ReadyState = 4: DoEvents: Loop'Webová stránka je načítanáApplication.StatusBar = URL a "načítané"„Získajte ID okna pre IE, aby sme ho mohli nastaviť ako aktivačné oknoHWNDSrc = IE.HWND„Nastaviť IE ako aktívne oknoSetForegroundWindow HWNDSrc„Nájdite a vyplňte vstupné polen = 0Pre každú položku v IE.document.allAk itm = "[objekt HTMLInputElement]" Potomn = n + 1Ak n = 3 Potomitm.Value = "orksheet"itm.Focus 'Aktivuje vstupné pole (zobrazí kurzor)Application.SendKeys "{w}", True 'Simuluje stlačenie klávesu' W '. Pravda hovorí, že VBA má čakať“dovoľte, aby klávesová skratka skončila, než budete pokračovať'javascript na stránke na spustenie a filtrovanie tabuľkyChoď na endmacroKoniec AkKoniec AkĎalšie„Uvoľnite IEendmacro:Nastaviť IE = NičNastaviť objElement = ničNastaviť objCollection = ničKoniec pod

GetElement v IE pomocou VBA

Interakcia s objektmi v programe Internet Explorer môže byť často bolestivá. Musíte určiť, s akým konkrétnym predmetom chcete pracovať. Vo vyššie uvedenom kóde hľadáme 3. inštanciu „[objekt HTMLInputElement]“ (vstupný formulár). Potom zadáme „orksheet“ do vstupného formulára (itm.value = „orksheet“), presunieme kurzor do vstupného formulára (itm.focus) a napíšeme „w“. Zadanie „w“ je v tomto prípade nevyhnutné na aktiváciu JavaScriptu používaného na filtrovanie tabuľky.

Existuje viac priamych spôsobov výberu objektov, táto metóda by však mala fungovať, ak všetko ostatné zlyhá.

Ak chcete použiť tieto ďalšie metódy, budete chcieť použiť nasledujúce možnosti:

1234 IE.document.getelementbyid ("ID"). Value = "value" 'Nájsť podľa IDIE.document.getelementsbytagname ("ID"). Value = "value" 'Nájsť podľa značkyIE.document.getelementsbyclassname ("ID"). Value = "value" 'Nájsť podľa triedyIE.document.getelementsbyname ("ID"). Value = "value" 'Nájsť podľa názvu

Pri použití týchto metód môžete naraziť na problémy, ak existuje viac ako jeden prvok s rovnakým názvom. Pomocou slučky (ako vo vzorovom kóde vyššie) môžete určiť, ktorú inštanciu prvku chcete použiť.

Interakcia s IE pomocou VBA

Vo vyššie uvedenom kóde používame udalosť: Sústrediť sa (itm.focus) na aktiváciu kurzora vo formulári.

Viac príkladov udalostí, metód a vlastností objektov/prvkov nájdete tu: https://msdn.microsoft.com/en-us/library/ms535893(v=vs.85).aspx

Nie všetky budú fungovať s každým objektom / prvkom a pri interakcii s objektmi v IE môže dôjsť k značnému pokusu a omylu.

Kľúče odoslané do programu Internet Explorer

V kóde uvedenom vyššie sme použili príkaz Sendkeys:

1 Application.SendKeys "{w}", pravda

Sendkeys by mali byť vo všeobecnosti krajnou možnosťou. Obvykle by ste mali mať možnosť komunikovať s objektmi priamo, niekedy je však jednoduchšie použiť príkaz Sendkeys. Sendkeys je v zásade to isté ako písanie pomocou klávesnice. Pred pokračovaním sa musíte uistiť, že sú vybraté správne okná a objekty. Sendkeys môžu tiež spúšťať udalosti, ktoré sa spustia na základe interakcie používateľov na webe. V uvedenom príklade používame Sendkeys na aktiváciu filtra Javascript v tabuľke, ktorú používame na webovej stránke.

Sendkeys má dva vstupy:
1. kľúč na zadanie (spravidla je obklopený znakom {} … {enter}, {q} ….)
2. Pred pokračovaním TRUE/FALSE počkajte, kým sa Sendkeys nedokončí. Pri práci s programom Internet Explorer budete spravidla chcieť, aby bola táto sada nastavená na hodnotu TRUE.

Spustite Internet Explorer na pozadí

Ak chcete spustiť Internet Explorer na pozadí, musíte urobiť dve veci:

1. Zavolajte makro obsahujúce kód IE pomocou Application.Run, aby makro pokračovalo v práci na pozadí:

1 Application.Run ("Automate_IE_Load_Page")

Poznámka: Tento kód môže potenciálne prerušiť vašu prácu alebo by vaša práca mohla zasahovať do kódu. Ak napríklad používate klávesy SendKeys, klávesy Sendkeys môžu odoslať stlačenie klávesu do nesprávnej aplikácie. S týmto buďte veľmi opatrní.
2. Skryť IE:

1 IE.Visible = False

Selén a VBA

Ak bol tento článok pre vás užitočný, možno by ste sa chceli pozrieť na kurz Dana Stronga o automatizácii webu. Pokrýva, ako používať selén s VBA.

(Dostávam províziu za pridruženie z kurzu Dana)

Svedectvo jedného z Danových študentov

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

Vám pomôže rozvoju miesta, zdieľať stránku s priateľmi

wave wave wave wave wave