Hallo,
Zu 1.
Den HTML-Qulltext einer Seite kannst Du mit unten stehendem Makro auslesen. Du hast den dann aber nur als String vorliegen und kannst ihn dann nur mit entsprechenden Methoden weiter verarbeiten. Statt dessen solltest Du Dich mit dem DOM beschäftigen (Document Object Model). Damit kannst Du bereits sehr viel mit den Get-Methoden getElementsByTagName(), getElementsByClassName() und getElementByID() erreichen. Zusätzlich sind die Methoden hasAttribute() und getAttribute() gut zu gebrauchen. Im folgenden Makro wird exemplarisch getElementsByTagName() verwendet (auch wenn nicht selbsterklärend ist, was da eigentlich passiert, zeigt es die Anwendung der Get-Methoden).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | Sub HTML_QuellcodeAuslesen()
Dim url As String
Dim browser As Object
Dim knotenWurzel As Object
Dim htmlQuellCode As String
Set browser = CreateObject( "InternetExplorer.Application" )
browser.Visible = False
browser.navigate url
Do Until browser.ReadyState = 4: DoEvents: Loop
Set knotenWurzel = browser.document.getElementsByTagName( "html" )(0)
If Not knotenWurzel Is Nothing Then
htmlQuellCode = knotenWurzel.outerHTML
Else
htmlQuellCode = "Kein HTML-Quellcode ausgelesen"
End If
browser.Quit
Set browser = Nothing
Set knotenWurzel = Nothing
MsgBox htmlQuellCode
End Sub
|
Zu 2.
Ich verwende immer late binding, weil solche Makros dann auch automatisch auf anderen Rechnern laufen, ohne Verweise setzen zu müssen. Auf den Luxus von IntelliSense verzichtet man dann in der Tat. Allerdings überwiegen für mich die Vorteile des late bindings. Da ich es nicht getestet habe unter Vorbehalt:
Du brauchst folgenden Verweis, wenn Du early binding verwenden willst: Microsoft Internet Controls
Dann kannst Du den Browser dann folgendermaßen instanzieren: Dim browserAs New InternetExplorer
Unter folgendem Link findest Du die Dokumentation zum DOM. Mach Dich nicht verrückt wegen des Umfangs. Beschäftige dich zuerst mit den Get-Methoden. Dazu die Anmerkung, dass dort zwar auch noch getElementsByName() aufgeführt ist, die Methode ist jedoch "outdatet" (also veraltet) und wird von VBA (dem IE) auch nicht mehr unterstützt.
Links im Menü einfach die Get-Methoden anklicken: https://developer.mozilla.org/de/docs/Web/API/Document
Zu 3.
Direkt aus VBA raus kannst Du nur den Internet Explorer ansprechen, weil er der einzige Browser mit COM Schnittstelle ist (Component Object Model). https://de.wikipedia.org/wiki/Component_Object_Model
Chrome müsste über Selenium funktionieren, FireFox ist da grade ausßen vor soweit ich weiß. https://www.seleniumhq.org/
Ich hoffe das hilft Dir für den Anfang. Du findest im I-Net sehr viele Beispiele zu Lösungen über das DOM. Es wäre von Vorteil, wenn Du bereits Programmieren kannst, bzw. Dich mindestens mit Programmfluss und Kontrollstrukturen auskennst.
Viele Grüße,
Zwenn
|