Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Daten aus Webseiten auslesen mittels Selenium

Daten aus Webseiten auslesen mittels Selenium
07.12.2019 13:09:28
Andi
Hallo zusammen,
ich hoffe es kann mir jemand weiterhelfen. Ich möchte Daten aus Webseiten auslesen und ins Excel übertragen. Dafür habe ich ein Makro, welches ursprünglich mit dem Internet Explorer 11 funktionierte. Nun ist dieser leider nicht mehr auf meinem Rechner und ich habe gelesen, dass es mit Selenium funktioniert.
Leider bekomme ich mit Selenium (SeleniumBasic-2.0.9.0.exe) bei allen Browsern (edge, Firefox, Chrome) Laufzeitfehler mit Verweis, dass irgendwelche Treiber nicht stimmen. Kann mir bitte jemand sagen, welcher Browser mit welchen Treibern am besten funktioniert (bitte Links der Treiber angeben).
Mit dem Chrome Browser komme ich am weitesten (siehe folgendes Beispiel):

Sub test ()
Dim Selenium As New WebDriver
Dim url as string
url = "https://www.onvista.de/“
Selenium.Start "chrome"
Selenium.Timeouts.PageLoad = 2000
Selenium.Get url, Raise:=False
Set knoten = Selenium.FindElementById("searchValue")
knoten.SendKeys ("DE000A1EWWW0")
Set knoten = Selenium.FindElementById("siteSearch")
knoten.Submit
End Sub

Nach dem Begriff „knoten.Submit“ wird die gewünschte Ansicht sogar noch im Browser geladen und angezeigt, dann kommt folgender Fehler:
Laufzeitfehler 21
Timeout Error
Timeout
(session info: chrome=78.0.3904.108)
(Driver info: chrome = 78.0.3904.105)
(……..
Bei allen anderen Browsern kommt ein Laufzeitfehler schon nach dem Begriff „Selenium.Start“.
Grüße
Andi
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: muss es Selenium sein?
07.12.2019 13:17:54
Fennek
Hallo,
Selenium ist primär zur Unterstützung von Entwicklern.
Warum versuchtst Du es nicht mit MSXML2.XMLHttp oder Powershell?
mfg
Umsetzung XMSXML2.XMLHTTP als Excel VBA Makro
08.12.2019 17:13:49
Andi
Hallo Fennek,
vielen Dank für die Info.
Wie ich sehe kann man XMSXML2.XMLHTTP scheinbar auch als Excel VBA Makro umsetzen, aber leider funktionieren die Funktionen .getElementsByClassName und .getElementsByTagName nicht mehr wie gewünscht.
Wie müsste denn das folgende Skript, welches mit dem Internet Explorer 11 funktioniert mit XMSXML2.XMLHTTP aussehen?

Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
Sub test()
Dim ie As Object
Dim url As String
Dim knoten As Object
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
url = "https://www.onvista.de/"
ie.Navigate url
Do While ie.Busy Or ie.ReadyState  4: DoEvents: Loop
Do While ie.Busy Or ie.ReadyState  4: DoEvents: Loop
Set knoten = ie.Document.getElementByID("searchValue")
knoten.Select
knoten.innerText = "DE000A1EWWW0"
Sleep 2000
Set knoten = ie.Document.getElementByID("siteSearch")
knoten.Submit
Sleep 2000
Set knoten = knoten.getElementsByClassName("FUNDAMENTAL_ANALYSE")
Set knoten = knoten.getelementsbytagname("div")(0)
Set knoten = knoten.getelementsbytagname("table")(0)
Set knoten = knoten.getelementsbytagname("tbody")(0)
Set knoten = knoten.getelementsbytagname("tr")(6)
Set knoten = knoten.getelementsbytagname("td")(0)
Set knoten = knoten.getelementsbytagname("span")(0)
Cells(1, 1).Value = knoten.innerhtml
End Sub

Soweit habe ich es bereits geschafft umzusetzen:

Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
Sub XML()
Dim XMLHTTP As Object
Dim html As Object
Dim url
Dim knoten As Object
Set html = CreateObject("htmlfile")
Set XMLHTTP = CreateObject("MSXML2.XMLHTTP.6.0")
url = "https://www.onvista.de/"
XMLHTTP.Open "GET", "https://www.onvista.de/", False
XMLHTTP.setRequestHeader "Content-Type", "text/xml"
XMLHTTP.Send
html.body.innerhtml = XMLHTTP.ResponseText
Set knoten = html.getElementByID("searchValue")
knoten.Select
knoten.innerText = "DE000A1EWWW0"
Sleep 2000
Set knoten = html.getElementByID("siteSearch")
knoten.Submit
Sleep 2000
Set knoten = knoten.getElementsByClassName("FUNDAMENTAL_ANALYSE")
Set knoten = knoten.getelementsbytagname("div")(0)
Set knoten = knoten.getelementsbytagname("table")(0)
Set knoten = knoten.getelementsbytagname("tbody")(0)
Set knoten = knoten.getelementsbytagname("tr")(6)
Set knoten = knoten.getelementsbytagname("td")(0)
Set knoten = knoten.getelementsbytagname("span")(0)
Cells(2, 1).Value = knoten.innerhtml
End Sub
Bei „Set knoten = knoten.getElementsByClassName("FUNDAMENTAL_ANALYSE")“
bricht das Programm ab mit Laufzeitfehler 438.
Grüße
Andi
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Daten aus Webseiten mit Selenium in Excel auslesen


Schritt-für-Schritt-Anleitung

  1. Installiere SeleniumBasic: Lade die neueste Version von SeleniumBasic herunter. Achte darauf, die Version 2.0.9.0 zu verwenden, da sie viele Fehlerbehebungen und Verbesserungen enthält.

  2. Installiere den passenden WebDriver: Für den Chrome-Browser kannst du den ChromeDriver herunterladen, für Firefox den GeckoDriver und für Edge den Edge WebDriver. Stelle sicher, dass du die Version des Treibers verwendest, die mit deiner Browser-Version kompatibel ist.

  3. Erstelle ein neues VBA-Makro:

    • Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
    • Füge ein neues Modul hinzu und kopiere den folgenden Code hinein:
    Sub DatenAusWebseiteAuslesen()
       Dim Selenium As New WebDriver
       Dim url As String
       url = "https://www.onvista.de/"
       Selenium.Start "chrome"
       Selenium.Get url
    
       ' Hier kannst du deine Logik für das Auslesen der Daten einfügen
    End Sub
  4. Füge die Logik zum Auslesen der Daten hinzu: Verwende die Methoden wie FindElementById oder FindElementsByClassName, um die gewünschten Daten von der Webseite zu extrahieren.

  5. Teste dein Makro: Stelle sicher, dass alles funktioniert, indem du das Makro ausführst.


Häufige Fehler und Lösungen

  • Laufzeitfehler beim Start von Selenium: Überprüfe, ob der richtige WebDriver installiert und im Systempfad verfügbar ist. Achte darauf, dass der WebDriver mit der Version deines Browsers übereinstimmt.

  • Timeout Error: Wenn du einen Timeout-Fehler erhältst, erhöhe den Wert für Selenium.Timeouts.PageLoad, um dem Browser mehr Zeit zu geben, die Seite zu laden.

  • Fehler 438 (Objekt unterstützt diese Eigenschaft oder Methode nicht): Dieser Fehler tritt häufig auf, wenn die Methode, die du verwendest, nicht für den Typ des Objekts geeignet ist. Stelle sicher, dass du die richtigen Methoden für die Objekte verwendest.


Alternative Methoden

Wenn du Schwierigkeiten mit Selenium hast, kannst du auch alternative Ansätze verwenden, wie z.B.:

  • MSXML2.XMLHTTP: Diese Methode ermöglicht es dir, HTTP-Anfragen zu senden und HTML-Inhalte zu empfangen, ohne einen Browser zu starten. Hier ein einfaches Beispiel:

    Sub XMLHTTPBeispiel()
       Dim XMLHTTP As Object
       Set XMLHTTP = CreateObject("MSXML2.XMLHTTP")
       XMLHTTP.Open "GET", "https://www.onvista.de/", False
       XMLHTTP.Send
       Debug.Print XMLHTTP.responseText ' Zeigt den HTML-Inhalt in der Debug-Konsole an
    End Sub
  • Powershell: Du kannst auch Powershell verwenden, um Webseiten auszulesen. Ein einfaches Beispiel wäre:

    $url = "https://www.onvista.de/"
    $response = Invoke-WebRequest -Uri $url
    $response.Content

Praktische Beispiele

Hier sind einige praktische Beispiele für das Auslesen von Daten mit Selenium in VBA:

  • Daten aus einem Suchfeld eingeben:

    Dim knoten As WebElement
    Set knoten = Selenium.FindElementById("searchValue")
    knoten.SendKeys "DE000A1EWWW0"
  • Ergebnisse auf der Webseite abrufen:

    Set knoten = Selenium.FindElementByClassName("FUNDAMENTAL_ANALYSE")
    Cells(1, 1).Value = knoten.Text

Diese Beispiele verwenden die selenium vba-Methoden, um mit Webseiten zu interagieren und Informationen zu extrahieren.


Tipps für Profis

  • Verwende die selenium vba documentation: Die offizielle Dokumentation bietet viele nützliche Beispiele und Erklärungen, die dir helfen, komplexe Interaktionen zu verstehen.

  • Debugging: Nutze die Debugging-Funktionen von VBA, um Schritt für Schritt durch deinen Code zu gehen. Dies hilft dir, Fehler schneller zu identifizieren.

  • Automatisierung: Überlege, wie du deine Makros automatisieren kannst, um regelmäßig Daten abzurufen. Dies kann durch das Einrichten von Zeitplänen in Excel geschehen.


FAQ: Häufige Fragen

1. Was ist SeleniumBasic? SeleniumBasic ist ein VBA-Wrapper für Selenium, der es ermöglicht, Selenium in Excel zu verwenden, um Webseiten automatisiert zu steuern und Daten auszulesen.

2. Welche Browser werden unterstützt? SeleniumBasic unterstützt mehrere Browser, darunter Chrome, Firefox und Edge. Stelle sicher, dass du die richtigen WebDriver für den jeweiligen Browser installiert hast.

3. Wo kann ich die WebDriver herunterladen? Die WebDriver für verschiedene Browser kannst du auf den offiziellen Webseiten der jeweiligen Browser herunterladen. Achte darauf, die Version zu wählen, die mit deinem Browser kompatibel ist.

4. Wie kann ich mit Powershell Webseiten auslesen? Mit Powershell kannst du die Invoke-WebRequest-Funktion verwenden, um Anfragen an Webseiten zu senden und deren Inhalte zu erhalten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige