Wie man CAPTCHAs mit Selenium in Python umgeht

Erfahren Sie in diesem umfassenden Tutorial, wie Sie CAPTCHAs in Selenium umgehen können. Entdecken Sie praktische Techniken zum Umgang mit CAPTCHA-Herausforderungen beim Web-Scraping.
11 min lesen
How to bypass CAPTCHAs with Selenium blog image

In diesem Tutorial zum Umgehen von Selenium-CAPTCHAs lernen Sie:

  • Was CAPTCHAs sind und ob sie umgangen werden können
  • Wie Sie ein CAPTCHA in Selenium umgehen können
  • Was zu tun ist, wenn dennoch ein CAPTCHA angezeigt wird

Lassen Sie uns loslegen!

Was sind CAPTCHAs und kann man sie umgehen?

Ein CAPTCHA, kurz für „Completely Automated Public Turing test to tell Computers and Humans Apart” (vollständig automatisierter öffentlicher Turing-Test zur Unterscheidung von Computern und Menschen), ist ein Mechanismus, der dazu dient, zwischen menschlichen Benutzern und Bots zu unterscheiden. Es stellt Aufgaben, die für Menschen leicht, für Maschinen jedoch schwer zu lösen sind. Bekannte CAPTCHA-Anbieter sind Google reCAPTCHA, hCaptcha und BotDetect.

Beliebte Arten von CAPTCHAs sind:

  • Textbasierte Herausforderungen: Benutzer müssen eine Folge verzerrter Buchstaben und Zahlen eingeben.
  • Bildbasierte Herausforderungen: Benutzer müssen bestimmte Objekte in einem Raster von Bildern identifizieren.
  • Audiobasierte Herausforderungen: Benutzer müssen die Wörter eingeben, die sie hören.
  • Rätselaufgaben: Benutzer müssen einfache Rätsel lösen, z. B. einen Irrgarten durchqueren.
Text CAPTCHA example

CAPTCHAs sind oft Teil bestimmter Benutzerabläufe, beispielsweise als letzter Schritt eines Formularübermittlungsprozesses:

captcha as a step of a form submission process example

In diesen Fällen sollen CAPTCHAs sicherstellen, dass Bots den Benutzerablauf nicht abschließen. Um diese Herausforderungen zu automatisieren, können Sie CAPTCHA-Lösungen oder -Dienste verwenden, die sich auf menschliche Bediener stützen, um die Herausforderungen in Echtzeit zu lösen. Hardcodierte CAPTCHAs sind jedoch aufgrund ihrer negativen Auswirkungen auf die Benutzererfahrung selten.

Häufiger sind CAPTCHAs Teil umfassender Anti-Bot-Lösungen, wie z. B. einer WAF (Web Application Firewall):

Example-of-a-Web-Application-Firewall

Diese Systeme zeigen CAPTCHAs dynamisch an, wenn sie Bot-Aktivitäten vermuten. In solchen Fällen können CAPTCHAs umgangen werden, indem Ihr Bot das menschliche Verhalten in einem realen Browser nachahmt. Dies erfordert jedoch eine ständige Aktualisierung Ihrer Skripte, um neuen Bot-Erkennungsmethoden immer einen Schritt voraus zu sein.

Eine effektivere Lösung zur Umgehung von CAPTCHAs ist die Verwendung eines Tools der nächsten Generation wie der CAPTCHA-Lösung von Bright Data. Dieses Cloud-Tool ist immer auf dem neuesten Stand und kann eine Vielzahl von CAPTCHA-Typen für Sie verarbeiten.

Selenium CAPTCHA-Verarbeitung: Schritt-für-Schritt-Anleitung

Wie Sie gerade gelernt haben, besteht eine effektive Methode zur Umgehung von CAPTCHAs darin, Ihr automatisiertes Skript menschliches Verhalten nachahmen zu lassen, während Sie einen Browser mit einem realen Fingerabdruck steuern. Eines der besten Tools für diesen Zweck ist Selenium, eine beliebte Bibliothek zur Browserautomatisierung.

In diesem Tutorial-Abschnitt erfahren Sie, wie Sie CAPTCHAs in Selenium mit einem Python-Skript umgehen können. Legen wir los!

Schritt 1: Erstellen Sie ein neues Python-Projekt

Bevor Sie beginnen, stellen Sie sicher, dass Python 3 und Chrome lokal installiert sind.

Wenn Sie bereits über ein Selenium-Web-Scraping- oder Testskript verfügen, können Sie die ersten drei Schritte überspringen. Andernfalls erstellen Sie einen Ordner für Ihr Selenium-CAPTCHA-Bypass-Demoprojekt und navigieren Sie im Terminal dorthin:

mkdir selenium_demo

cd selenium_demo

Fügen Sie als Nächstes eine neue virtuelle Python-Umgebung hinzu:

python -m venv venv

Öffnen Sie den Projektordner in Ihrer bevorzugten Python-IDE und erstellen Sie eine neue Datei mit dem Namen script.py.

Fantastisch! Der Ordner Ihres Projekts enthält nun eine Python-Anwendung.

Schritt 2: Selenium installieren

Aktivieren Sie die virtuelle Python-Umgebung mit dem folgenden Befehl:

venvScriptsactivate

Oder, wenn Sie Linux- oder macOS-Benutzer sind:

source venv/bin/activate

Installieren Sie anschließend Selenium über das pip -Paket mit dem folgenden Befehl:

pip install selenium

Der Installationsvorgang kann eine Weile dauern, haben Sie also bitte etwas Geduld.

Großartig! Sie sind nun bereit, Ihr Selenium-Skript zu initialisieren.

Schritt 3: Richten Sie Ihr Selenium-Skript ein

Importieren Sie Selenium, indem Sie die folgende Zeile zu script.py hinzufügen:

from selenium import webdriver

Erstellen Sie nun ein ChromeOptions -Objekt, um Chrome so zu konfigurieren, dass es im Headless-Modus startet:

options = webdriver.ChromeOptions()

options.add_argument("--headless")

Wenn Sie mit dieser Option nicht vertraut sind, finden Sie weitere Informationen in unserem Leitfaden zu Headless-Browsern.

Initialisieren Sie eine Chrome WebDriver- Instanz mit diesen Optionen und schließen Sie sie schließlich mit quit(). So sollte Ihre aktuelle script.py -Datei derzeit aussehen:

from selenium import webdriver

# Chrome so konfigurieren, dass es im Headless-Modus startet

options = webdriver.ChromeOptions()

options.add_argument("--headless")

# Eine Chrome-Instanz starten

driver = webdriver.Chrome(options=options)

# Browser-Automatisierungslogik...

# Den Browser schließen und seine Ressourcen freigeben

driver.quit()

Das obige Skript startet eine neue Chrome-Instanz im Headless-Modus, bevor der Browser geschlossen wird. Super! Jetzt ist es an der Zeit, die Browser-Automatisierungslogik zu implementieren.

Schritt 4: Hinzufügen der Browser-Automatisierungslogik

Um die CAPTCHA-Umgehungslogik von Selenium zu bewerten, verbindet sich das automatisierte Skript mit bot.sannysoft.com und macht einen Screenshot. Diese spezielle Webseite führt mehrere Tests im Browser durch, um festzustellen, ob der Benutzer ein Mensch oder ein Bot ist. Wenn Sie die Seite in Ihrem bevorzugten Browser besuchen, werden Sie sehen, dass alle Tests bestanden sind.

Weisen Sie die Chrome-Instanz an, die Zielseite mit der Methode get() aufzurufen:

driver.get("https://bot.sannysoft.com/")

Anschließend müssen Sie einen Screenshot der gesamten Seite erstellen. Leider bietet Selenium keine Funktion, um dies direkt zu erreichen. Als Workaround können Sie das Browserfenster auf die Breite und Höhe des <body> -Knotens einstellen und dann einen Screenshot erstellen:

# Breite und Höhe des Body abrufen

full_width = driver.execute_script("return document.body.parentNode.scrollWidth")

full_height = driver.execute_script("return document.body.parentNode.scrollHeight")

# Browserfenster auf Breite und Höhe des Body einstellen

driver.set_window_size(full_width, full_height)

# Screenshot der gesamten Seite erstellen

driver.save_screenshot("screenshot.png")

# ursprüngliche Fenstergröße wiederherstellen

driver.set_window_size(original_size["width"], original_size["height"])

Der oben beschriebene Trick funktioniert, und screenshot.png enthält den Screenshot der gesamten Seite.

Wenn Sie alles zusammenfügen, erhalten Sie die folgende Logik:

from selenium import webdriver

# Chrome so konfigurieren, dass es im Headless-Modus startet

options = webdriver.ChromeOptions()

options.add_argument("--headless")

# Eine Chrome-Instanz starten

driver = webdriver.Chrome(options=options)

# Mit der Zielseite verbinden

driver.get("https://bot.sannysoft.com/")

# aktuelle Fenstergröße abrufen

original_size = driver.get_window_size()

# Breite und Höhe des Hauptbereichs abrufen

full_width = driver.execute_script("return document.body.parentNode.scrollWidth")

full_height = driver.execute_script("return document.body.parentNode.scrollHeight")

# Browserfenster auf Breite und Höhe des Hauptbereichs einstellen

driver.set_window_size(full_width, full_height)

# Screenshot der gesamten Seite erstellen

driver.save_screenshot("screenshot.png")

# Ursprüngliche Fenstergröße wiederherstellen

driver.set_window_size(original_size["width"], original_size["height"])

# Schließen Sie den Browser und geben Sie seine Ressourcen frei.

driver.quit()

Starten Sie die oben genannte Datei script.py mit diesem Befehl:

python script.py

Das Skript startet eine Chromium-Instanz im Headless-Modus, verbindet sich mit der gewünschten Seite, macht einen Screenshot und schließt den Browser. Am Ende der Skriptausführung erscheint eine Datei namens screenshot.png im Stammordner des Projekts. Öffnen Sie diese Datei, um Folgendes zu sehen:

screenshot.png file example

Wie Sie an den roten Kästchen erkennen können, besteht Chrome im Headless-Modus, der über Vanilla Selenium gesteuert wird, verschiedene Tests nicht. Das bedeutet, dass Ihr Skript wahrscheinlich als Bot erkannt wird. Die Folge ist, dass eine mit Anti-Bot-Technologie geschützte Website möglicherweise ein CAPTCHA anzeigt, wenn Sie mit ihr interagieren. Die Lösung, um ein CAPTCHA in Selenium zu vermeiden? Das Stealth-Plugin!

Schritt 5: Installieren Sie das Selenium Stealth-Plugin

Selenium Stealth ist ein Python-Paket, das entwickelt wurde, um die von Selenium gesteuerte Chrome/Chromium-Instanz als Bot weniger erkennbar zu machen. Das Ziel dieses Projekts ist es, den Browser so zu konfigurieren, dass er fast alle bekannten Bot-Erkennungsstrategien umgeht.

Insbesondere modifiziert Selenium Stealth die Eigenschaften des Browsers, um jegliche Lecks zu verhindern, die den Browser als automatisiert entlarven könnten. Wenn Sie mit Anti-Bot-Bypass-Lösungen vertraut sind, kann dieses Paket als eine Neuimplementierung von Puppeteer Stealth angesehen werden.

Installieren Sie Selenium Stealth über das pip -Paket selenium-stealth:

pip install selenium-stealth

Importieren Sie anschließend die Bibliothek, indem Sie diese Zeile zur Datei script.py hinzufügen:

from selenium_stealth import stealth

Das war’s schon! Jetzt müssen Sie nur noch die Stealth-Einstellungen konfigurieren.

Schritt 6: Konfigurieren Sie die Stealth-Einstellungen, um CAPTCHAs zu vermeiden

Um Selenium Stealth zu registrieren und den Chrome WebDriver so zu konfigurieren, dass CAPTCHAs vermieden werden, rufen Sie die Funktion stealth() wie folgt auf:

stealth(

driver,

user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",

languages=["en-US", "en"],

vendor="Google Inc.",

platform="Win32",

webgl_vendor="Intel Inc.",

renderer="Intel Iris OpenGL Engine",

fix_hairline=True,

)

Konfigurieren Sie die Funktionsargumente nach Ihren Wünschen, aber beachten Sie, dass die oben genannten Werte ausreichen, um die meisten Anti-Bot-Maßnahmen zu umgehen.

Gut gemacht! Der von Selenium gesteuerte Browser erscheint nun als ein echter Browser, der von einem menschlichen Benutzer verwendet wird.

Schritt 7: Wiederholen Sie den Bot-Erkennungstest

Nachfolgend finden Sie die endgültige Datei „script.js “:

from selenium import webdriver

from selenium_stealth import stealth

# Chrome so konfigurieren, dass es im Headless-Modus startet

options = webdriver.ChromeOptions()

options.add_argument("--headless")

# Eine Chrome-Instanz starten

driver = webdriver.Chrome(options=options)

# Den WebDriver so konfigurieren, dass die Bot-Erkennung umgangen wird

# mit Selenium Stealth

stealth(

driver,

user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",

languages=["en-US", "en"],

vendor="Google Inc.",

platform="Win32",

webgl_vendor="Intel Inc.",

renderer="Intel Iris OpenGL Engine",

fix_hairline=True,

)

# Verbindung zur Zielseite herstellen

driver.get("https://bot.sannysoft.com/")

# Aktuelle Fenstergröße abrufen

original_size = driver.get_window_size()

# Breite und Höhe des Hauptbereichs abrufen

full_width = driver.execute_script("return document.body.parentNode.scrollWidth")

full_height = driver.execute_script("return document.body.parentNode.scrollHeight")

# Browserfenster auf Breite und Höhe des Hauptbereichs einstellen

driver.set_window_size(full_width, full_height)

# Screenshot der gesamten Seite erstellen

driver.save_screenshot("screenshot.png")

# Ursprüngliche Fenstergröße wiederherstellen

driver.set_window_size(original_size["width"], original_size["height"])

# Browser schließen und Ressourcen freigeben

driver.quit()

Führen Sie das Selenium-Python-Skript zum Umgehen von CAPTCHAs erneut aus:

python script.py

Sehen Sie sich screenshot.png an, und Sie werden feststellen, dass alle Bot-Erkennungstests bestanden wurden:

All bot detection tests passed on the new screenshot.png

Et voilà! Jetzt kennen Sie den Trick, um Anti-Bot-CAPTCHAs in Selenium zu umgehen.

Was tun, wenn die oben genannte CAPTCHA-Umgehungslösung in Selenium nicht funktioniert?

Leider sind die Browsereinstellungen nicht der einzige Aspekt, auf den sich Anti-Bot-Lösungen konzentrieren. Die IP-Reputation ist ein weiterer wichtiger Aspekt, und Sie können Ihre IP nicht einfach mit einer kostenlosen Bibliothek durch eine zuverlässigere ersetzen. Dazu ist eine Selenium-Proxy-Integration erforderlich!

Mit anderen Worten: Selbst wenn Sie Ihren Browser optimal konfigurieren, können CAPTCHAs weiterhin angezeigt werden. Für einfache CAPTCHAs, die nur einen einzigen Klick erfordern, können Sie versuchen, Pakete wie selenium-recaptcha-solver oder selenium-recptcha zu verwenden. Diese Bibliotheken funktionieren jedoch nur mit reCAPTCHA v2 und werden nicht mehr gepflegt.

Das Hauptproblem bei dem Ansatz aus dem vorherigen Kapitel und diesen Paketen ist, dass sie nur bei einfachen CAPTCHAs funktionieren. Bei komplexeren Anti-Bot-Systemen wie Cloudflare benötigen Sie eine viel leistungsfähigere Lösung.

Suchen Sie nach einer echten Selenium-CAPTCHA-Lösung? Probieren Sie die Web-Scraping-Lösungen von Bright Data aus!

Diese bieten hervorragende Entsperrungsfunktionen mit einer speziellen CAPTCHA-Lösung zur automatischen Verarbeitung von reCAPTCHA, hCaptcha, px_captcha, SimpleCaptcha, GeeTest CAPTCHA, FunCaptcha, Cloudflare Turnstile, AWS WAF Captcha, KeyCAPTCHA und vielen anderen.

Die Integration des CAPTCHA-Lösers von Bright Data in Ihr Skript ist einfach, da er mit jedem HTTP-Client oder Browser-Automatisierungstool funktioniert – einschließlich Selenium.

Erfahren Sie mehr über die Verwendung des CAPTCHA-Lösers von Bright Data und lesen Sie die Dokumentation für alle Konfigurationsdetails.

Fazit

In diesem Artikel haben Sie erfahren, warum CAPTCHAs eine Herausforderung für automatisierte Software darstellen und wie Sie diese in Selenium umgehen können. Dank der Selenium Stealth-Bibliothek können Sie die Standardkonfigurationen von Chrome überschreiben, um die Bot-Erkennung einzuschränken. Dieser Ansatz ist jedoch keine endgültige Lösung.

Unabhängig davon, wie ausgeklügelt Ihre Selenium-CAPTCHA-Umgehungslogik ist, können Sie dennoch von fortschrittlichen Bot-Erkennungs-Tools blockiert werden. Die echte Lösung besteht darin, sich über eine Entsperr-API mit der Zielwebsite zu verbinden, die den CAPTCHA-freien HTML-Code jeder Webseite zurückgeben kann.

Diese API ist kein Traum. Sie existiert und heißt Web Unlocker, eine Scraping-API, die Ihre Exit-IP bei jeder Anfrage über eine Proxy-Integration automatisch rotiert und Browser-Fingerprinting, automatische Wiederholungsversuche und CAPTCHA-Auflösung für Sie übernimmt. Der Umgang mit CAPTCHAs war noch nie so einfach!

Melden Sie sich jetzt an und starten Sie das Gratis-Testen.