1. Technische Grundlagen
Formulare ausfüllen und abschicken
Die Arbeit mit Formularen ist oft notwendig, um User-Registrierungen, Umfragen oder Datensammlungen zu automatisieren. Wenn du hunderte Formulare ausfüllen musst, ist das manuell wie der Versuch, eine Wassermelone durch einen Strohhalm zu essen. Mit unseren Superkräften von Selenium erledigen wir das in wenigen Sekunden.
Werfen wir zuerst einen Blick darauf, wie wir Textfelder ausfüllen und Formulare abschicken können. Anhand eines typischen Login-Formulars auf einer Webseite lernen wir die grundlegenden Schritte kennen:
from selenium import webdriver
# Treiber einrichten (z.B. ChromeDriver)
driver = webdriver.Chrome()
try:
# Webseite öffnen
driver.get("https://example.com/login")
# Eingabefeld für den Benutzernamen suchen und Text eingeben
username_input = driver.find_element_by_name("username")
username_input.send_keys("mein_login")
# Eingabefeld für das Passwort suchen und Text eingeben
password_input = driver.find_element_by_name("password")
password_input.send_keys("mein_passwort")
# Sende-Button des Formulars suchen und darauf klicken
submit_button = driver.find_element_by_name("submit")
submit_button.click()
finally:
# Treiber schließen
driver.quit()
Validierung und Fehlerbehandlung
Nichts nervt Programmierer mehr als unerwartete Fehler. Daher behandeln wir diese im Voraus. Mit try/except
fangen wir Fehler ab und erstellen Logs, um zu verstehen, was schiefgelaufen ist.
try:
username_input = driver.find_element_by_name("username")
username_input.send_keys("mein_login")
except Exception as e:
print(f"Fehler beim Ausfüllen des Benutzernamens: {e}")
logging.error("Fehler beim Ausfüllen des Benutzernamens", exc_info=True)
2. Checkboxes
Nun, da wir gelernt haben, Buttons zu klicken, probieren wir aus, wie man mehrere Optionen aus einer Liste auswählt. Um ein Häkchen zu setzen oder zu entfernen, kann man die Methode click()
benutzen. Wenn du prüfen möchtest, ob ein Häkchen gesetzt ist, kannst du das Attribut is_selected()
verwenden.
checkbox = driver.find_element_by_id("checkbox_id")
if not checkbox.is_selected():
checkbox.click()
3. Radio Buttons
Radio Buttons erlauben es, nur eine Option aus mehreren auszuwählen. Die Arbeit mit ihnen erfolgt ähnlich wie mit Checkboxes: Man wählt eine Option mit der Methode click()
und prüft den Zustand mit is_selected()
.
radio_button = driver.find_element_by_id("radio_button_id")
if not radio_button.is_selected():
radio_button.click()
4. Dropdowns
Dropdowns enthalten mehrere Auswahlmöglichkeiten. Selenium bietet die Klasse Select
, die Methoden zur Arbeit mit solchen Listen bereitstellt.
from selenium.webdriver.support.ui import Select
dropdown = Select(driver.find_element_by_id("dropdown_id"))
dropdown.select_by_visible_text("Option 1")
Es ist auch möglich, Optionen mit select_by_index()
oder select_by_value()
auszuwählen.
5. Text Areas
Textbereiche ähneln Textfeldern, werden aber normalerweise für größere Textmengen verwendet. Die Arbeit damit ist identisch wie bei normalen Textfeldern.
text_area = driver.find_element_by_id("textarea_id")
text_area.send_keys("Das ist ein Beispieltext für den Textbereich.")
6. Date Picker
Kalenderfelder erlauben es Nutzern, ein Datum auszuwählen. Wenn es sich um ein normales Textfeld handelt, das das Datumsformat unterstützt, kann man send_keys()
verwenden, um den Wert im gewünschten Format einzugeben.
date_field = driver.find_element_by_id("date_field_id")
date_field.send_keys("2023-12-25") # Das Datumsformat kann je nach Webseite variieren
Einige Kalenderfelder erfordern jedoch zusätzliche Aktionen, wie das Öffnen eines Popup-Kalenders und die Auswahl eines Datums.
7. File Upload
Diese Felder erlauben das Hochladen von Dateien auf den Server. Man kann mit ihnen interagieren, indem man die Methode send_keys()
verwendet und den Pfad zur Datei auf dem lokalen Rechner angibt.
file_input = driver.find_element_by_id("file_upload_id")
file_input.send_keys("/path/to/file.txt")
8. Hidden Fields
Versteckte Felder sind auf der Seite nicht sichtbar, können aber zur Speicherung von Informationen verwendet werden, die für das Absenden eines Formulars notwendig sind. Man kann mit ihnen interagieren, wenn man Zugriff auf ihren Wert hat (z.B. zur Prüfung oder Änderung).
hidden_field = driver.find_element_by_id("hidden_field_id")
value = hidden_field.get_attribute("value")
print("Versteckter Feldwert:", value)
9. Überprüfung der Erfolgsquote
Das Abrufen von Daten zum Status von Aktionen ist dein Erfolgsindikator. Nach dem Absenden eines Formulars möchtest du sicherstellen, dass deine Anfrage erfolgreich angenommen wurde, oder? Hier ist, wie du das machen kannst:
# Erfolgreiche Anmeldung auf der Webseite überprüfen
if "Willkommen" in driver.page_source:
print("Anmeldung war erfolgreich!")
else:
print("Beim Anmelden ist ein Fehler aufgetreten.")
10. Probleme und Lösungen
Probleme
- Instabilität der Arbeit: Webseiten ändern sich oft. Änderungen in der Seitenstruktur können Skriptabstürze verursachen, daher ist regelmäßiges Überprüfen des Codes notwendig.
- Abhängigkeit von der Netzwerkgeschwindigkeit: Die Ladezeit von Seiten und Elementen kann variieren. Verwende explizite Wartezeiten (explicit waits), um Verzögerungen zu handhaben.
Lösungen
- Logging: Führe Logs über alle Aktionen, um Probleme besser zu verstehen. Die Verwendung der
logging
-Bibliothek erleichtert das Logging erheblich. - Modularität des Codes: Teile komplexe Aktionen in Funktionen und Module auf, um Änderungen leichter vornehmen und testen zu können.
GO TO FULL VERSION