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).
Sub HTML_QuellcodeAuslesen()
Dim url As String
Dim browser As Object
Dim knotenWurzel As Object
Dim htmlQuellCode As String
url = "https://www.heise.de/" '<-- anpassen
'Internet Explorer initialisieren, Sichtbarkeit festlegen,
'URL aufrufen und warten bis Seite vollständig geladen wurde
Set browser = CreateObject("InternetExplorer.Application")
browser.Visible = False
browser.navigate url
Do Until browser.ReadyState = 4: DoEvents: Loop
'Über die richtige Get-Methode den alles umfassenden HTML-Tag
'als DOM-Object speichern
Set knotenWurzel = browser.document.getElementsByTagName("html")(0)
If Not knotenWurzel Is Nothing Then
'Konnte das Objekt gebildet werden, den
'HTML-Quellcode in eine String-Variable
'speichern
htmlQuellCode = knotenWurzel.outerHTML
Else
'Konnte das Objekt nicht gebildet werden,
'einen Hinweis ausgeben
htmlQuellCode = "Kein HTML-Quellcode ausgelesen"
End If
'Aufräumen
browser.Quit
Set browser = Nothing
Set knotenWurzel = Nothing
'Sichtkontrolle in einer MessageBox
'Bitte Beachten, dass bei Ausgabe in eine
'Zelle max. 32.767 Zeichen gespechert werden
'können. Der Rest verfällt
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
|