1. Automatisches Scrollen der Seite
Stell dir vor, du sitzt vor einem dieser nervigen, aber beliebten Social-Media-Feeds, in denen Inhalte faul nachgeladen werden, während du scrollst. Dieses magische Scrolling hat überraschenderweise ein API zur Automatisierung mit Selenium.
Methode execute_script()
Die Methode execute_script() in Selenium erlaubt die Ausführung von JavaScript-Code auf der Seite, und das ist ein mächtiges Werkzeug, wenn es ums Scrollen geht. Lass uns anschauen, wie man es nutzt, um Seiten zu scrollen.
from selenium import webdriver
import time
# Initialisierung des Browser-Treibers
driver = webdriver.Chrome()
# Zielseite öffnen
driver.get('https://example.com/scrolling_page')
# Seite nach unten scrollen
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(3) # Warten, damit der Content geladen wird
# Seite nach oben scrollen (zur Abwechslung)
driver.execute_script("window.scrollTo(document.body.scrollHeight, 0);")
# Sitzung beenden
driver.quit()
In diesem Skript nutzen wir window.scrollTo(), um die Seite zu scrollen. Die Argumente (0, document.body.scrollHeight) geben an, dass vom Anfang bis zum Ende der Seite gescrollt wird. Das ist eine einfache und effektive Technik, um sicherzugehen, dass alle dynamischen Elemente geladen werden.
Warum ist das wichtig?
Die Verwendung von execute_script() zum Scrollen der Seite erlaubt es, Inhalte zu laden, die zuerst versteckt sind, z. B. bei endlosem Scrollen. Das ist besonders nützlich für Social-Media-Feeds und Nachrichtenportale, bei denen Inhalte dynamisch geladen werden.
2. Navigation zu Links
Jetzt, da wir das Scrollen gemeistert haben, ist es Zeit, zur nächsten Aufgabe überzugehen - dem automatischen Navigieren zu Links. Das ist eine Schlüsselkompetenz für Data Scraping, besonders wenn Informationen auf unterschiedlichen Seiten verteilt sind.
Grundlagen der Link-Navigation
Um auf einen Link zu klicken, können wir die Methode click() auf dem ausgewählten Element verwenden. Lass uns ein einfaches Beispiel durchgehen:
from selenium import webdriver
# Initialisierung des Browser-Treibers
driver = webdriver.Chrome()
# Zielseite öffnen
driver.get('https://example.com/links_page')
# Link nach Text finden und klicken
link = driver.find_element_by_link_text('Next Page')
link.click()
# Sitzung beenden
driver.quit()
In diesem Beispiel suchen wir den Link über seinen Textinhalt. Aber was, wenn der Text nicht eindeutig ist? In solch einem Fall können genauere Methoden wie find_element_by_xpath() oder find_element_by_css_selector() verwendet werden.
# Link über XPath finden
link = driver.find_element_by_xpath('//a[@href="/next_page"]')
link.click()
Vorteile der automatischen Link-Navigation
Die Navigation zu Links mit Selenium erlaubt es, Prozesse zum Sammeln von Daten von Seiten mit Pagination oder solchen, bei denen Daten auf mehrere Unterseiten verteilt sind, zu automatisieren. Das eignet sich hervorragend zum Durchlaufen von Suchergebnissen oder zum Anzeigen von Produktkatalogen auf E-Commerce-Webseiten.
3. Kombination von Scrollen und Navigation
Stell dir nun vor, du musst eine Seite scrollen, um den benötigten Link oder das benötigte Element zu finden, und dann auf eine andere Seite wechseln. Das ist ein kombinierter Prozess, der automatisiert werden kann.
Beispiel eines kombinierten Skripts
from selenium import webdriver
import time
# Initialisierung des Browser-Treibers
driver = webdriver.Chrome()
# Zielseite öffnen
driver.get('https://example.com/scroll_and_click')
# Seite scrollen, um versteckte Elemente zu laden
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(3)
# Link finden und klicken
link = driver.find_element_by_xpath('//a[text()="Load More"]')
link.click()
# Sitzung beenden
driver.quit()
Was könnte schiefgehen?
Beim Arbeiten mit dynamischen Seiten kann es vorkommen, dass Elemente nicht rechtzeitig geladen werden oder nicht vollständig nachgeladen sind. In solchen Fällen müssen Warte-Methoden verwendet werden, um sicherzustellen, dass die Elemente, mit denen du interagieren möchtest, bereits verfügbar sind.
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# Warten, bis das Element klickbar wird
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//a[text()="Load More"]'))
)
element.click()
Die Verwendung von Warte-Methoden hilft, Fehler zu vermeiden, die durch nicht geladene Elemente verursacht werden, und macht das Skript stabiler.
GO TO FULL VERSION