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

selenium / vba

Forumthread: selenium / vba

selenium / vba
10.11.2022 14:52:37
Fred
Hallo Yal,
vorweg entschuldige bitte, das ich mich erst 1 Tag später melde. Meine demenzkranke Mutter ......
Ja, den Tipp mit Selenium habe ich bereits vor knapp 1 Jahr von ralf_b bekommen und nun habe ich auch entsprechend installiert.
Das Tutorial als Muster genutzt klappt bisher eingeschränkt.
Das Tutorial habe ich bisher darin genutzt
1. öffnen der Seite https://www.xscores.com/soccer/germany/bundesliga/results
2. Zustimmung für pers. Daten ...
3. Cookies akzeptieren
https://www.herber.de/bbs/user/156122.xlsb
Die "Wrapper-Klassen" machen mir Kummer. Die Seite (bzw. die mich interessierenden Daten) ist ja nicht wie im Tutorial klar mit einer Tabelle (tr, td, th) aufgebaut sondern mehr mit diesen "Wrapper".
Gruss
Fred
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: selenium / vba
10.11.2022 16:15:07
Fred
... oder hat wer anderes eine Idee, wie Website Daten nach Excel zu bekommen sind?
Ich bin nun mal zu meiner "Lieblingsseite" geswitcht https://www.totalcorner.com/league/view/16
Diese Seite ist allerdings locker mit >Daten / Aus dem Web Diese Seite scheint mir aber mit einer "klassischen Tabelle" aufgebaut zu sein
Ich möchte mit Selenium weiter auf die Detail-Seiten der einzelnen Spiele und mir das HalbeitErgebnis entsprechend eintragen
https://www.herber.de/bbs/user/156126.xlsb
Wird anscheinend noch viel "Versuch & Irrtum" geben
Gruss
Fred
Anzeige
AW: selenium / vba
10.11.2022 16:16:58
Fred
.. jemand eine Idee? (hatte nicht auf offen gestellt :-)
AW: selenium / vba
10.11.2022 18:24:11
Yal
Hallo Fred,
es ist tatsächlich so, dass das Scraping von Webseite ein gesundes Wissen über html erfordert. Aber nicht erschrecken lassen, man kommt Schritt für Schritt rein.
Tabelle sind z.B. immer zuerst Zeile, tr für table row, dann Spalte in 2 Geschmacksrichtungen: th für table header und td für table data.
Du kannst aber die gesamte html-Tabelle in einem VBA- oder gar Excel-Tabelle übergeben. (hast Du die weitere Videos bei WiseOwl angeschaut?)
Dass Du auf eine Webseite rechtsklicken kannst/musst, und "Untersuchen" auswählen, weisst Du schon. Aud einem Element in den Code kannst Du auch rechtklicken und Information wie XPath kopieren. Damit kannst Du einzelne Element einer Tabelle identifizieren.
Mit folgendem wird -auf eine bestimmte Webseite- einige Werte gesetzt (Region, Monate, Kilometer) und in einer Tabelle auf gezielte Element in Zeile 1 / Spalte 2 geklickt, dann Zeile 5 / Spalte3, dann 10 /3. "id" sind immer eindeutig in einer Webseite. Darauf kannst Du/musst Du aufbauen.

    With myChromeDriver
.FindElementById("ref_market").SendKeys pMarket 'Region
.FindElementById("fcc_month").SendKeys 12 'Monate
.FindElementById("fcc_mileage").ClickAndHold
.FindElementById("fcc_mileage").SendKeys Keys.Home
.FindElementById("fcc_mileage").SendKeys "20000" 'Kilometer
.FindElementByXPath("//*[@id=""settings""]/tbody/tr[1]/td[2]/input").Click 'Standard-Modul ist UCC
.FindElementByXPath("//*[@id=""settings""]/tbody/tr[5]/td[3]/input").Click 'inkl. VAT
.FindElementByXPath("//*[@id=""settings""]/tbody/tr[10]/td[2]/input").Click 'Default vehicle type: Car (nur Car)
.FindElementById("bu_save").Click
End With
Diese XPath sind Texten. Die 1 und 2, 5 und 3, 10 und 2 kannst Du in Schleifen überschreiben, und so alle td einer Zeile und alle tr einer Tabelle ansprechen.
Aber in ein solcher Fall ist es leichter AsTable zu verwenden:
myArray = .FindElementByXPath("//*[@id=""settings""]/tbody").AsTable.Data
oder ähnlichen:

    Data_Sub = .FindElementByClass("main").FindElementByTag("tbody").AsTable.Data
For Zeile = 2 To UBound(Data_Sub, 1)
For Spalte = 2 To UBound(Data_Sub, 2)
AusgabeDatei.WriteLine Trim(Data_Sub(Zeile, 1)) & ";" & Trim(Data_Sub(1, Spalte)) & ";" & Data_Sub(Zeile, Spalte)
Next
Next
Die Möglichkeit sind unendlich. Es muss leider sehr viel über Try&Error laufen. Aber Schritt für Schritt kommt man ran.
VG
Yal
Anzeige
;
Anzeige

Infobox / Tutorial

Selenium in VBA: Schritt für Schritt zum Web-Scraping


Schritt-für-Schritt-Anleitung

  1. Installation von Selenium für VBA:

    • Lade die seleniumwrappervba herunter und füge sie zu deinem Excel-VBA-Projekt hinzu. Du kannst die Wrapper-Bibliothek von GitHub oder von WiseOwl herunterladen.
  2. Selenium für VBA einrichten:

    • Stelle sicher, dass du die benötigten Treiber für deinen Browser (z.B. ChromeDriver) installiert hast und dass diese im Systempfad verfügbar sind.
  3. Erstellen eines neuen VBA-Moduls:

    • Öffne deinen VBA-Editor (ALT + F11) und erstelle ein neues Modul.
  4. Code für das Öffnen einer Webseite:

    Dim driver As New Selenium.ChromeDriver
    driver.Start "chrome"
    driver.Get "https://www.xscores.com/soccer/germany/bundesliga/results"
  5. Interaktion mit der Webseite:

    • Du kannst die FindElementByXPath oder FindElementById Methoden verwenden, um auf Elemente der Webseite zuzugreifen.
      driver.FindElementByXPath("//button[text()='Cookies akzeptieren']").Click

Häufige Fehler und Lösungen

  • Fehler: Element nicht gefunden:

    • Mögliche Lösung: Überprüfe den XPath oder die ID des Elements. Stelle sicher, dass das Element tatsächlich auf der Seite vorhanden ist, bevor du es ansteuerst.
  • Fehler: Selenium-Driver startet nicht:

    • Mögliche Lösung: Überprüfe, ob der richtige Treiber installiert und im Systempfad verfügbar ist. Achte darauf, dass die Version des Treibers mit deiner Browser-Version übereinstimmt.

Alternative Methoden

Wenn du Schwierigkeiten mit dem vba selenium hast, gibt es auch andere Möglichkeiten, Daten aus Webseiten in Excel zu importieren:

  • Power Query: Eine eingebaute Funktion in Excel, die es dir ermöglicht, Daten von Webseiten zu importieren, ohne VBA zu verwenden.

  • HTTP-Anfragen: Du kannst die XMLHTTP-Objekte verwenden, um Webseiten zu laden und die Daten direkt zu extrahieren.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du mit findelementbyxpath in VBA Daten extrahieren kannst:

Dim driver As New Selenium.ChromeDriver
driver.Start "chrome"
driver.Get "https://www.totalcorner.com/league/view/16"

Dim data As String
data = driver.FindElementByXPath("//table[@class='results']//tr[1]/td[2]").Text
Debug.Print data

Dieses Skript öffnet die Webseite und extrahiert das Ergebnis eines Spiels aus der ersten Zeile der Tabelle.


Tipps für Profis

  • Nutze Schleifen: Wenn du mehrere Elemente auf einer Seite ansteuern möchtest, ist es effizienter, Schleifen zu verwenden, um durch die Elemente zu iterieren.

  • XPath optimieren: Lerne die Grundlagen von XPath, um präzise und effektive Abfragen zu erstellen. Achte darauf, dass du findelementbyxpath effizient nutzt, um die besten Ergebnisse zu erzielen.

  • Debugging: Nutze Debug.Print, um den Wert von Variablen während der Ausführung zu überprüfen. Dies kann dir helfen, Fehler schnell zu identifizieren.


FAQ: Häufige Fragen

1. Was ist Selenium in VBA?
Selenium ist ein Framework, das es ermöglicht, Webanwendungen zu automatisieren und Daten von Webseiten zu extrahieren. In VBA kannst du Selenium verwenden, um mit Internetbrowsern zu interagieren.

2. Wo kann ich die Selenium-Bibliothek für VBA herunterladen?
Du kannst die seleniumwrappervba auf GitHub oder von der WiseOwl-Website herunterladen. Achte darauf, die aktuellste Version zu verwenden.

3. Was ist der Unterschied zwischen FindElementById und FindElementByXPath?
FindElementById sucht nach einem Element basierend auf seiner ID, während FindElementByXPath es ermöglicht, mit einer XPath-Abfrage nach Elementen zu suchen, die möglicherweise keine ID haben oder komplexere Strukturen aufweisen.

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