Erfahren Sie, warum Selenium möglicherweise keine Elemente mit Klassennamen und komplexen XPaths findet und wie Sie CSS-Selektoren effektiv mit WebDriverWait verwenden, um Daten von dynamischen Webseiten zu scrapen.
---
Besuchen Sie diese Links für den Originalinhalt und weitere Details, wie alternative Lösungen, die neuesten Updates/Entwicklungen zu diesem Thema, Kommentare, Versionsgeschichte usw. Zum Beispiel war der ursprüngliche Titel der Frage: Warum findet Selenium keine Elemente?
Wenn Ihnen etwas seltsam vorkommt, können Sie mir gerne einen Kommentar unter diesem Video hinterlassen.
---
Problemübersicht
Beim Scraping von Webseiten mit Selenium ist ein häufiges Problem, dass keine Ergebnisse angezeigt werden, wenn versucht wird, Elemente zu finden. Dies geschieht oft, weil:
Die Ziel-Elemente nicht mit den angegebenen Selektoren (Klassennamen oder XPath) übereinstimmen.
Die Elemente noch nicht geladen sind, wenn die Suche ausgeführt wird.
Komplexe oder fragile XPaths leicht durch Änderungen der Seitenstruktur brechen können.
Warum Ihr Code möglicherweise keine Ausgabe zurückgibt
Im Beispiel wurden Elemente gefunden mit:
[[Siehe Video, um diesen Text oder Code-Snippet zu enthüllen]]
Das ist problematisch, weil By.CLASS_NAME nur einen Klassennamen akzeptiert, nicht mehrere. Die Verwendung von zwei Klassennamen zusammen führt zum Scheitern.
Außerdem ist die Verwendung eines absoluten XPaths innerhalb jedes Haus-Elements fragil und wahrscheinlich anfällig für Brüche, wenn sich das Seitenlayout ändert.
Ein besserer, zuverlässigerer Ansatz
Verwenden Sie CSS-Selektoren anstelle von Klassennamen oder komplexen XPaths
CSS-Selektoren ermöglichen es, Elemente klar und prägnant durch Kombination von Attributen und Hierarchie anzusprechen.
Warten Sie, bis Elemente erscheinen
Webseiten laden Daten oft dynamisch. Verwenden Sie WebDriverWait und expected_conditions, um zu warten, bis die Elemente vorhanden sind, bevor Sie Daten extrahieren.
Beispielcode
[[Siehe Video, um diesen Text oder Code-Snippet zu enthüllen]]
Warum das besser funktioniert
CSS-Selektor: Zielt direkt auf jede Hausanzeige (div[data-testid=result-item]) und deren Titel <h2> ab.
WebDriverWait: Stellt sicher, dass Selenium wartet, bis die Elemente auf der Seite erscheinen.
Robuste Textextraktion: etext() behandelt Fälle, in denen .text leer sein könnte, aber textContent die Daten enthält.
Zusammenfassung
Um zu verhindern, dass Selenium keine Elemente findet:
Vermeiden Sie die Kombination mehrerer Klassen in By.CLASS_NAME — verwenden Sie stattdessen By.CSS_SELECTOR.
Bevorzugen Sie CSS-Selektoren oder relative XPaths gegenüber absoluten XPaths.
Verwenden Sie explizite Wartezeiten (WebDriverWait), um mit dynamischen Seiteninhalten umzugehen.
Dieser Ansatz führt zu zuverlässigeren und wartbareren Web-Scraping-Skripten.