Tato stránka obsahuje příklady kódování pro automatizaci aplikace Internet Explorer (IE) pomocí jazyka VBA.
** Aktualizace 7. 6. 2019: V současné době je nejlepším způsobem, jak dosáhnout webové automatizace pomocí VBA, použití selenu. Tento článek NEZAHRNUJE selen. Níže uvedené příklady budou fungovat a mohou být dostatečné pro vaše potřeby. Pokud však máte pokročilejší potřeby nebo se chcete stát odborníkem na automatizaci webu, důrazně doporučuji místo toho použít Selenium. Kurz Dana Stronga o webové automatizaci (sleva k dispozici prostřednictvím tohoto odkazu) je fantastickým zdrojem pro učení selenu:
(Dostávám affiliate provizi z Danova kurzu)
Přejděte na webovou stránku pomocí VBA
První část kódu otevře IE a přejde na web. Druhá část kódu otevře IE, přejde na web a interaguje se vstupním polem.
12345678910111213141516171819202122232425262728293031323334353637 | Sub Automate_IE_Load_Page ()"Tím se načte webová stránka v IE."Dim i As LongDim URL jako řetězecDim IE jako objektDim objElement As ObjectDim objCollection As Object'Vytvořit objekt InternetExplorerNastavit IE = CreateObject ("InternetExplorer.Application")'Nastavit IE.Visible = True, aby byl IE viditelný, nebo False, aby IE běžel na pozadíIE.Visible = True'Definujte URLURL = "https://www.automateexcel.com/excel/"'Přejít na URLIE. Přejít na URL„Stavový řádek informuje uživatele, že se web načítáApplication.StatusBar = URL & "se načítá. Počkejte prosím …"„Počkejte, než se načte IE…“ IE ReadyState = 4 znamená, že se webová stránka načetla (první smyčka je nastavena tak, aby nedošlo k nechtěnému přeskočení druhé smyčky)Do While IE.ReadyState = 4: DoEvents: Loop 'Do WhileDo Do IE.ReadyState = 4: DoEvents: Loop 'Do Do'Webová stránka načtenaApplication.StatusBar = URL a "načteno"„Uvolněte IENastavit IE = NicNastavit objElement = NicNastavit objCollection = NicEnd Sub |
Velmi častým problémem, se kterým se lidé setkávají při práci s IE ve VBA, je pokus VBA spustit kód před úplným načtením aplikace Internet Explorer. Pomocí tohoto kódu řeknete VBA, aby opakoval smyčku, dokud nebude IE připraven (IE.ReadyState - 4).
1234 | „Počkejte, než se načte IE…“ IE ReadyState = 4 znamená, že se webová stránka načetla (první smyčka je nastavena tak, aby nedošlo k nechtěnému přeskočení druhé smyčky)Do While IE.ReadyState = 4: DoEvents: Loop 'Do WhileDo Do IE.ReadyState = 4: DoEvents: Loop 'Do Do |
Všimněte si také tohoto řádku kódu:
1 | IE.Visible = TRUE |
Tento kód přepíná, zda IE běží na pozadí nebo v popředí.
Otevřete URL a zadejte data do formuláře pomocí VBA
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 | „To musí být v horní části modulu. Slouží k nastavení IE jako aktivního oknaFunkce veřejné deklarace SetForegroundWindow Lib "user32" (ByVal HWND As Long) Jak dlouháSub Automate_IE_Enter_Data ()"Tím se načte webová stránka v IE."Dim i As LongDim URL jako řetězecDim IE jako objektDim objElement As ObjectDim objCollection As ObjectDim HWNDSrc jako dlouhý'Vytvořit objekt InternetExplorerNastavit IE = CreateObject ("InternetExplorer.Application")'Nastavit IE.Visible = True, aby byl IE viditelný, nebo False, aby IE běžel na pozadíIE.Visible = True'Definujte URLURL = "https://www.automateexcel.com/vba"'Přejít na URLIE. Přejít na URL„Stavový řádek informuje uživatele, že se web načítáApplication.StatusBar = URL & "se načítá. Počkejte prosím …"„Počkejte, než se načte IE…“ IE ReadyState = 4 znamená, že se webová stránka načte (první smyčka je nastavena tak, aby se zabránilo nechtěnému přeskočení druhé smyčky)Do While IE.ReadyState = 4: DoEvents: LoopProveďte do IE.ReadyState = 4: DoEvents: Loop'Webová stránka načtenaApplication.StatusBar = URL a "načteno"„Získejte ID okna pro IE, abychom jej mohli nastavit jako aktivační oknoHWNDSrc = IE.HWND„Nastavit IE jako aktivní oknoSetForegroundWindow HWNDSrc'Vstupní pole Najít a vyplnitn = 0Pro každou položku v IE.document.allPokud itm = "[objekt HTMLInputElement]" Pakn = n + 1Pokud n = 3 Pakitm.Value = "orksheet"itm.Focus 'Aktivuje vstupní pole (zobrazí kurzor)Application.SendKeys "{w}", True 'Simuluje stisk klávesy' W '. True říká VBA, aby počkala“než stisknutí klávesy skončí, než budete pokračovat, povolte'javascript na stránce pro spuštění a filtrování tabulkyPřejít na endmacroKonec IfKonec Ifdalší„Uvolněte IEendmacro:Nastavit IE = NicNastavit objElement = NicNastavit objCollection = NicEnd Sub |
GetElement v IE pomocí VBA
Interakce s objekty v aplikaci Internet Explorer může být často bolest. Musíte určit, s jakým konkrétním objektem pracovat. Ve výše uvedeném kódu hledáme 3. instanci „[objekt HTMLInputElement]“ (vstupní formulář). Poté zadáme „orksheet“ do vstupního formuláře (itm.value = „orksheet“), přesuneme kurzor do vstupního formuláře (itm.focus) a napíšeme „w“. V tomto případě je pro aktivaci javascriptu použitého k filtrování tabulky nutné zadat „w“.
Existuje více přímých metod výběru objektů, tato metoda by však měla fungovat, pokud vše ostatní selže.
Chcete -li použít tyto další metody, budete chtít použít následující možnosti:
1234 | IE.document.getelementbyid ("ID"). Value = "value" 'Najít podle IDIE.document.getelementsbytagname ("ID"). Value = "value" 'Najít podle značkyIE.document.getelementsbyclassname ("ID"). Value = "value" 'Najít podle třídyIE.document.getelementsbyname ("ID"). Value = "value" 'Najít podle názvu |
Při použití těchto metod můžete narazit na problémy, pokud existuje více než jeden prvek se stejným názvem. Pomocí smyčky (jako v ukázkovém kódu výše) můžete určit, kterou instanci prvku použít.
Interakce s IE pomocí VBA
Ve výše uvedeném kódu používáme událost: Soustředit se (itm.focus) pro aktivaci kurzoru ve formuláři.
Další příklady událostí, metod a vlastností objektů/prvků najdete zde: https://msdn.microsoft.com/en-us/library/ms535893(v=vs.85).aspx
Ne všechny z nich budou fungovat s každým objektem / prvkem a při interakci s objekty v IE může docházet k pokusům a omylům.
Odeslat klíče do aplikace Internet Explorer
Ve výše uvedeném kódu jsme použili příkaz Sendkeys:
1 | Application.SendKeys "{w}", pravda |
Sendkeys by obecně měly být poslední možností. Obvykle byste měli být schopni komunikovat s objekty přímo, někdy je však jednodušší použít příkaz Sendkeys. Sendkeys je v podstatě stejný jako psaní pomocí klávesnice. Než budete pokračovat, musíte se ujistit, že jsou vybrána správná okna a objekty. Sendkeys mohou také spouštět události, které se spouštějí na základě interakce uživatele na webu. Ve výše uvedeném příkladu používáme Sendkeys k aktivaci filtru Javascript v tabulce, kterou používáme na webové stránce.
Sendkeys má dva vstupy:
1. klíč pro zadání (obvykle obklopen {}… {enter}, {q}….)
2. Před pokračováním PRAVDA/NEPRAVDA počkejte, až se Sendkeys dokončí. Při práci s aplikací Internet Explorer budete obecně chtít, aby tato sada byla PRAVDA.
Spusťte Internet Explorer na pozadí
Chcete -li spustit Internet Explorer na pozadí, musíte udělat dvě věci:
1. Zavolejte makro obsahující kód IE pomocí Application.Run, aby makro běželo na pozadí, jak budete pokračovat v práci:
1 | Application.Run ("Automate_IE_Load_Page") |
Poznámka: Tento kód by mohl potenciálně přerušit vaši práci nebo by vaše práce mohla kód narušit. Pokud například používáte SendKeys, Sendkeys může odeslat stisknutí klávesy nesprávné aplikaci. Buďte velmi opatrní.
2. Skrýt IE:
1 | IE.Visible = False |
Selen a VBA
Pokud vám tento článek přišel užitečný, můžete se podívat na kurz Dana Stronga o webové automatizaci. Zahrnuje, jak používat selen s VBA.
(Dostávám affiliate provizi z Danova kurzu)
Svědectví jednoho z Danových studentů
https://excelvbaisfun.com/wp-content/uploads/2019/06/dan_strong_complete_web_automation_course_review_VbFn2vwul8A_1080p.mp4