Inhalte von Internetseiten mit Excel VBA herunterladen
Schritt-für-Schritt-Anleitung
Um Inhalte von einer Internetseite mit Excel VBA auszulesen, kannst du die folgenden Schritte befolgen:
-
Referenz hinzufügen: Öffne die VBA-IDE in Excel und füge eine Referenz zur Selenium Type Library
hinzu. Das geht über Extras -> Verweise... -> Selenium Type Library
.
-
SeleniumBasic und WebDriver installieren: Lade SeleniumBasic herunter und installiere es. Stelle sicher, dass du die korrekte Version des Chrome WebDriver
hast, die mit deiner Chrome-Version übereinstimmt. Du kannst den WebDriver hier herunterladen.
-
Makro erstellen: Erstelle ein neues Makro in deiner Excel-Datei. Hier ist ein einfaches Beispiel, um den Inhalt einer Webseite auszulesen:
Sub InhalteAuslesen()
Dim bot As New WebDriver
bot.Start "chrome", "https://www.offiziellecharts.de/titel-details-2145979"
bot.Get "/"
MsgBox bot.FindElementByTag("h1").Text
End Sub
-
Ausführen: Führe das Makro aus, um die Inhalte der angegebenen Webseite herunterzuladen.
Häufige Fehler und Lösungen
-
Laufzeitfehler '-2146697211 (800c00005)': Dieser Fehler kann auftreten, wenn die URL nicht gefunden wird. Überprüfe, ob die URL korrekt ist und von deinem System aus zugänglich ist.
-
Internet Explorer funktioniert nicht: Viele Webseiten unterstützen den Internet Explorer nicht mehr. Verwende stattdessen Selenium
mit Chrome
oder Firefox
.
-
Dynamische Inhalte werden nicht geladen: Stelle sicher, dass du eine Wartezeit einfügst, um den dynamischen Inhalt abzuwarten. Verwende dazu Application.Wait
oder Schleifen, die auf bestimmte Elemente warten.
Alternative Methoden
Falls du mit Selenium
nicht arbeiten möchtest, kannst du auch XMLHTTP
verwenden, um statische Inhalte herunterzuladen. Hier ein einfaches Beispiel:
Sub MitXMLHTTP()
Dim objXMLHTTP As Object
Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
objXMLHTTP.Open "GET", "https://www.offiziellecharts.de/titel-details-2145979", False
objXMLHTTP.send
If objXMLHTTP.Status = 200 Then
Dim html As Object
Set html = CreateObject("htmlfile")
html.body.innerHTML = objXMLHTTP.responseText
MsgBox html.body.innerText
End If
Set objXMLHTTP = Nothing
Set html = Nothing
End Sub
Diese Methode eignet sich für Webseiten, die keine dynamischen Inhalte nachladen.
Praktische Beispiele
-
Inhalt einer Webseite auslesen:
Sub WebseiteAuslesen()
Dim bot As New WebDriver
bot.Start "chrome", "https://www.offiziellecharts.de/titel-details-2145979"
bot.Get "/"
MsgBox bot.FindElementByTag("h1").Text
End Sub
-
Screenshot der Webseite erstellen:
Sub ScreenshotErstellen()
Dim bot As New WebDriver
bot.Start "chrome", "https://www.offiziellecharts.de/titel-details-2145979"
bot.Get "/"
Dim screenshot As Object
Set screenshot = bot.TakeScreenshot
screenshot.ToExcel Range("A1")
End Sub
Tipps für Profis
-
Verwende die innerHTML
-Eigenschaft: Wenn du spezifische HTML-Elemente extrahieren möchtest, nutze die innerHTML
-Eigenschaft, um den Inhalt eines Elements zu erhalten.
-
Nutze CreateObject
effizient: Du kannst CreateObject("htmlfile")
verwenden, um HTML-Dokumente zu erstellen und zu manipulieren.
-
Fehlerbehandlung einfügen: Implementiere eine Fehlerbehandlung in deinem VBA-Code, um unerwartete Probleme abzufangen.
FAQ: Häufige Fragen
1. Ist Selenium für alle Browser verfügbar?
Ja, mit Selenium kannst du verschiedene Browser wie Chrome, Firefox oder Edge steuern. Achte darauf, den entsprechenden WebDriver herunterzuladen.
2. Wie kann ich eine Webseite als PDF speichern?
Das direkte Speichern einer Webseite als PDF ist mit VBA nicht möglich. Du kannst jedoch den Inhalt in Excel importieren und dann die Excel-Datei als PDF exportieren.
3. Warum funktioniert mein XMLHTTP-Code nicht?
Überprüfe, ob die URL korrekt ist und ob die Seite von deinem Netzwerk aus zugänglich ist. Möglicherweise wird auch eine Authentifizierung benötigt.