Integrationen

ChromeDriver + CaptchaAI: Integration in automatisierte Test-Pipelines

undetected-chromedriver ist eine Python-Bibliothek, die auf dem Selenium-ChromeDriver aufbaut und den Browser so konfiguriert, dass er sich verhält wie ein regulärer Chrome-Browser. Sie kümmert sich um den Chrome-Versionsabgleich und setzt die Browser-Konfiguration auf praxisnahe Standardwerte zurück – nützlich für QA-Pipelines, bei denen ein realistisches Browser-Verhalten für korrekte Test-Ergebnisse wichtig ist.

Wenn in Ihrem Test-Szenario ein CAPTCHA auftritt, löst CaptchaAI das Token und gibt es zurück, sodass Ihr Test-Workflow fortgesetzt werden kann.


Abhängigkeiten

pip install undetected-chromedriver requests

Grundlegende Einrichtung

import undetected_chromedriver as uc
import requests
import time

CAPTCHAAI_KEY = "YOUR_API_KEY"
CAPTCHAAI_URL = "https://ocr.captchaai.com"


def create_browser():
    # Einen Chrome-Browser fuer automatisierte Tests starten
    options = uc.ChromeOptions()
    # Fuer CI/CD-Umgebungen ohne Anzeige:
    # options.add_argument("--headless=new")
    options.add_argument("--no-sandbox")
    options.add_argument("--disable-gpu")
    return uc.Chrome(options=options)

CAPTCHA lösen und Token einfügen

def solve_recaptcha_v2(sitekey, pageurl):
    resp = requests.post(
        f"{CAPTCHAAI_URL}/in.php",
        data={
            "key": CAPTCHAAI_KEY,
            "method": "userrecaptcha",
            "googlekey": sitekey,
            "pageurl": pageurl,
            "json": 1,
        },
        timeout=30,
    )
    resp.raise_for_status()
    task_id = resp.json()["request"]

    for _ in range(30):
        time.sleep(5)
        result = requests.get(
            f"{CAPTCHAAI_URL}/res.php",
            params={"key": CAPTCHAAI_KEY, "action": "get", "id": task_id, "json": 1},
            timeout=30,
        )
        result.raise_for_status()
        data = result.json()
        if data.get("status") == 1:
            return data["request"]

    raise TimeoutError("CAPTCHA-Lösungszeit abgelaufen")


def inject_recaptcha_token(driver, token):
    # Token in das g-recaptcha-response-Feld einfuegen
    driver.execute_script(
        'document.getElementById("g-recaptcha-response").value = arguments[0];',
        token,
    )

Vollständiger Testablauf

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


def run_integration_test():
    # Integrationstests mit CAPTCHA-Handling in eigener Staging-Umgebung
    driver = create_browser()
    wait = WebDriverWait(driver, 30)

    try:
        # Eigene Testseite aufrufen
        driver.get("https://staging.example-app.test/form")

        # Auf Seitenladung warten
        wait.until(EC.presence_of_element_located((By.ID, "submit-button")))

        # CAPTCHA-Element finden und Sitekey extrahieren
        captcha_el = driver.find_element(By.CLASS_NAME, "g-recaptcha")
        sitekey = captcha_el.get_attribute("data-sitekey")
        pageurl = driver.current_url

        # Token lösen und an das eigene Testformular übergeben
        token = solve_recaptcha_v2(sitekey, pageurl)
        inject_recaptcha_token(driver, token)

        # Formular in der Staging-Umgebung absenden
        driver.find_element(By.ID, "submit-button").click()

        # Erfolg pruefen
        success_el = wait.until(
            EC.presence_of_element_located((By.CLASS_NAME, "success-message"))
        )
        print(f"Test bestanden: {success_el.text}")

    finally:
        driver.quit()


if __name__ == "__main__":
    run_integration_test()

Cloudflare Turnstile in ChromeDriver

def solve_turnstile(sitekey, pageurl):
    resp = requests.post(
        f"{CAPTCHAAI_URL}/in.php",
        data={
            "key": CAPTCHAAI_KEY,
            "method": "turnstile",
            "sitekey": sitekey,
            "pageurl": pageurl,
            "json": 1,
        },
        timeout=30,
    )
    resp.raise_for_status()
    task_id = resp.json()["request"]

    for _ in range(24):
        time.sleep(5)
        result = requests.get(
            f"{CAPTCHAAI_URL}/res.php",
            params={"key": CAPTCHAAI_KEY, "action": "get", "id": task_id, "json": 1},
            timeout=30,
        )
        result.raise_for_status()
        data = result.json()
        if data.get("status") == 1:
            return data["request"]

    raise TimeoutError("Turnstile-Lösungszeit abgelaufen")


def inject_turnstile_token(driver, token):
    # Token in das cf-turnstile-response-Feld einfuegen
    driver.execute_script(
        "document.querySelector(\"[name='cf-turnstile-response']\").value = arguments[0];",
        token,
    )

Wiederholungslogik für Produktions-Testläufe

import time


def with_retry(fn, retries=3, delay=5.0):
    # Funktion mit Wiederholungslogik bei Fehlern ausfuehren
    for attempt in range(1, retries + 1):
        try:
            return fn()
        except Exception as exc:
            if attempt == retries:
                raise
            print(
                f"Versuch {attempt}/{retries} fehlgeschlagen: {exc} "
                f"– neuer Versuch in {delay}s"
            )
            time.sleep(delay)

Fehlerbehebung

Problem Ursache Maßnahme
ChromeDriver-Version passt nicht Chrome-Update uc.Chrome() lädt automatisch die passende Version
CAPTCHA erscheint nicht Sitekey-Konfiguration Sitekey in der Staging-Config prüfen
Token nach Einspeisung abgelehnt Token abgelaufen (>120 s) Token zeitnah nach Lösung einspeisen
NoSuchElementException DOM-Änderung Selektoren in der Staging-Umgebung prüfen
Session abgelaufen Cookie-Verwaltung Cookies zwischen Tests beibehalten

FAQ

Wird der Chrome-Versionsabgleich automatisch gehandhabt?

Ja, undetected-chromedriver lädt automatisch die zum installierten Chrome passende ChromeDriver-Version herunter.

Kann ich die Bibliothek in headless CI/CD-Umgebungen einsetzen?

Ja, mit options.add_argument("--headless=new") und --no-sandbox. Testen Sie zuerst in headed mode, um sicherzustellen, dass CAPTCHA-Selektoren korrekt sind.

Was passiert, wenn kein CAPTCHA erscheint?

Wenn das CAPTCHA-Element nicht im DOM gefunden wird, überspringen Sie den Lösungsschritt und fahren Sie mit dem Test fort.


Verwandte Leitfäden

  • Python + Selenium + CaptchaAI
  • CAPTCHA-Token-Injection-Methoden
  • Fehlerbehandlung und Wiederholungslogik

Integrieren Sie CaptchaAI in Ihre Selenium-Test-Pipeline – Holen Sie sich Ihren CaptchaAI-Schlüssel.

Kommentare sind für diesen Artikel deaktiviert.