Internet Explorer automatiseren
- 18/08/2011
Voorbeeldbestanden bij dit artikel: | |
Inleiding
Dit artikel heeft als doelstelling om enkele mogelijkheden te laten zien, hoe we vanuit Excel VBA Internet Explorer kunnen automatiseren en aansturen. Code zal getoond en besproken worden. De concrete aanleiding tot dit artikel is mijn code voor het downloaden van Betfair paardenraces en weddenschappen. Omdat het alleszins niet-alledaagse code is met een ruim toepassingsgebied en mogelijks veel tijdswinst, schrijf ik er een artikel over.
Daarnaast zijn er nog 2 eerdere artikels van mij die gelinkt zijn:
- forumposts tellen: ik heb voor dit artikel nieuwe code geschreven die geen gebruik maakt van in Excel ingebouwde webqueries (wat overigens geen verkeerde manier van werken is);
- een artikel met webqueries (als oefening laat ik het aan jullie om de code daaruit te herschrijven op basis van code uit dit artikel). UPDATE: ik heb dat zelf reeds gedaan, zie: KVV wedstrijddata
Ik ben er mezelf van bewust dat:
- code voor het automatiseren van Internet Explorer niet nieuw is. Zie bijvoorbeeld hier om al direct een goede start te nemen en het wiel niet opnieuw uit te (moeten) vinden. Toch kopieert dit artikel niet zomaar andermans werk en bevat het een hoop interessante zaken.
- het onderwerp van de code wat ‘raar’ is: het tellen van het aantal posts op forums :-) Wie weet zet dit artikel jou wel aan om meer nuttige dingen te gaan doen met de algemene code.
- wanneer een webpagina verandert van structuur, mogelijk de code dient aangepast te worden. Als je een bepaalde tabel zoekt op een webpagina en die tabel bestaat niet meer, dan gaat die uiteraard niet kunnen gevonden worden.
Onze missie
We gaan dus code bestuderen om in Excel:
- een Internet Explorer sessie te starten die naar 5 verschillende websites browset (automatisch). Dit is telkens een forum waar ik actief ben en een gebruikersaccount heb.
- op elke website de nodige informatie te nemen, het aantal posts in dit geval
- onszelf bij 2 websites aan te melden met een gebruikersnaam en paswoord.
Eerst geef ik nog een lijstje mee van de benodigdheden / vaardigheden bij dit werk:
- je moet een beetje HTML kennis hebben en wat algemene kennis van (het bouwen van) websites. Ondermeer de elementen die men zoal gebruikt op websites. Hier is een goede handleiding over HTML
- Je moet bijvoorbeeld weten dat je met een rechtermuisklik op een webpagina of frame je van sommige websites de broncode kan bekijken. Die geeft ons de nodige info over wat en hoe we zoeken in die webpagina.
- Ik maak gebruik van de Mozilla Firefox internet browser. Webontwikkelaars kennen ongetwijfeld de nuttige Web Developer Toolbar: een zeer nuttige add-on voor Firefox die voor dit soort klusjes ook zeer goed van pas komt. Je kan hem hier downloaden.
- Notepad++ is een andere makkelijke en gratis software. De naam zegt het zelf: een veel betere versie van de text editor Notepad (Kladblok). Zie hier. Eens geïnstalleerd zal de broncode van een webpagina in Internet Explorer openen in Notepad++.
- De VBE Object Browser is een zeer nuttige bron van informatie. Druk in VBE op F2, geef de naam van een library en zoekwoord op, en de gevonden info wordt dan daaronder gepresenteerd. Hier is een voorbeeld van alle objecten, eigenschappen, methoden, … in de MSHTML library (zie verder) die het woord button bevatten:
VBA-code
Dit is de procedure die uitgevoerd wordt na het klikken op de knop - 5 andere procedures worden aangeroepen tijdens de uitvoering:
Dim oIE As InternetExplorerSub GetForumPosts()On Error GoTo ErH Set oIE = CreateObject("InternetExplorer.Application") 'de verschillende forums Helpmij Worksheet Ozgrid MrExcel TM1forum Columns(1).NumberFormat = "#" MsgBox "Klaar.", vbInformation, "Status" oIE.Quit Set oIE = Nothing Exit Sub ErH: If Not oIE Is Nothing Then oIE.Quit: Set oIE = Nothing MsgBox "Error " & Err.Number & ":" & vbNewLine & Err.Description, vbCritical, "Onverwachte foutmelding"End Sub
Wie dit artikel reeds tot hier gevolgd heeft en niet afgehaakt is, kan denk ik wel bovenstaande code begrijpen. Wat ik doe, is een variabele opzetten (oIE) voor de Internet Explorer sessie. Deze variabele komt bovenaan de module te staan waardoor die aangesproken en vernieuwd kan worden door alle procedures en functies in de module. Dan hebben we de aanroep naar afzonderlijke procedures, eentje per forum. Eens dit afgewerkt is, is de macro omzeggens klaar. Er volgt nog een melding voor de gebruiker en het opkuisen van de objectvariabele.
Late binding en early binding
Om bovenstaande code te laten werken, hebben we een extra library nodig: de MSHTML library. Die bevat objecten, methoden en eigenschappen die we inzetten tijdens het benaderen van de webpagina‘s. Ga in VBA naar Opties > Verwijzingen… (of: Tools > References…) en vink de juiste library aan: Microsoft Internet Controls.
Het zetten van de referentie kan ook op een geautomatiseerde manier:
Sub SetReference()On Error Resume Next ' Adds a reference to MS Internet Controls ThisWorkbook.VBProject.References.AddFromGuid "{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}", 1, 1End Sub
Als je variabelen gebruikt zoals ik hierboven doe, en dus een expliciete referentie legt naar bibliotheken (niet Excel, VBA, Office bibliotheken), dan noemen we dat early binding. Late binding daarentegen doet dit niet: je declareert variabelen als Object en hebt geen referenties nodig. Voordeel van early binding is dat je intellisense kan gebruiken. Voorbeeld: typ oIE, vervolgens een punt en je krijgt een keuzelijst van beschikbare methoden en eigenschappen of de andere objecten in de hiërarchische objecten onder een Internet Explorer object (wat je doet via oIE.
Wordt vervolgd…
Op pagina 2 bekijken we de code binnen de aangesproken procedures.
- « Vorige
- 1
- 2
- 3
- Volgende »