Use Cases

Selenium CAPTCHA-Handhabung mit Python und CaptchaAI

Selenium automatisiert Browserinteraktionen, aber CAPTCHAs verhindern dies. Die API von CaptchaAI löst CAPTCHAs extern, während Selenium den Browser verwaltet – Sie extrahieren die CAPTCHA-Parameter, senden sie an die API und fügen das zurückgegebene Token ein.

Anforderungen

Anforderung Einzelheiten
Python 3.7+ Mit installiertem Pip
Selen pip install selenium
Chrome + ChromeDriver Passende Versionen
Anfragen pip install requests
CaptchaAI API-Schlüssel Auscaptchaai.com

Wie es funktioniert

  1. Selenium lädt die Zielseite
  2. Ihr Skript extrahiert den CAPTCHA-Site-Schlüssel aus dem Seiten-DOM
  3. CaptchaAI löst das CAPTCHA mithilfe des Site-Schlüssels und der Seiten-URL
  4. Ihr Skript fügt das Token in die Seite ein und sendet das Formular ab

Das CAPTCHA wird serverseitig von CaptchaAI gelöst – Selenium interagiert nie direkt mit dem CAPTCHA-Widget.

Schritt 1: Selenium einrichten

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

options = Options()
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36")

driver = webdriver.Chrome(options=options)

Das AutomationControlled-Flag hilft, die grundlegende Bot-Erkennung zu vermeiden. Für eine robustere Konfiguration fügen Sie Folgendes hinzu:

options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)

Schritt 2: Erstellen Sie den CAPTCHA-Solver

import requests
import time

API_KEY = "YOUR_API_KEY"

def solve_recaptcha_v2(site_key, page_url):
    """Solve reCAPTCHA v2 using CaptchaAI API."""
    resp = requests.get("https://ocr.captchaai.com/in.php", params={
        "key": API_KEY,
        "method": "userrecaptcha",
        "googlekey": site_key,
        "pageurl": page_url
    })
    if not resp.text.startswith("OK|"):
        raise Exception(f"Submit failed: {resp.text}")

    task_id = resp.text.split("|")[1]

    for _ in range(60):
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY,
            "action": "get",
            "id": task_id
        })
        if result.text == "CAPCHA_NOT_READY":
            continue
        if result.text.startswith("OK|"):
            return result.text.split("|")[1]
        raise Exception(f"Solve failed: {result.text}")

    raise TimeoutError("CAPTCHA solve timed out")

Schritt 3: Site-Schlüssel extrahieren und lösen

# Navigate to the target page
driver.get("https://example.com/login")

# Wait for the reCAPTCHA to load
wait = WebDriverWait(driver, 10)
recaptcha = wait.until(
    EC.presence_of_element_located((By.CLASS_NAME, "g-recaptcha"))
)

# Extract the site key
site_key = recaptcha.get_attribute("data-sitekey")
page_url = driver.current_url

print(f"Site key: {site_key}")
print(f"Page URL: {page_url}")

# Solve the CAPTCHA
token = solve_recaptcha_v2(site_key, page_url)
print(f"Token received: {token[:50]}...")

Schritt 4: Injizieren Sie das Token und senden Sie es ab

# Inject the token into the reCAPTCHA response field
driver.execute_script(f"""
    document.getElementById('g-recaptcha-response').innerHTML = '{token}';
    document.getElementById('g-recaptcha-response').style.display = '';
""")

# If the form uses a callback function, trigger it
driver.execute_script(f"""
    if (typeof ___grecaptcha_cfg !== 'undefined') {{
        Object.keys(___grecaptcha_cfg.clients).forEach(function(key) {{
            var client = ___grecaptcha_cfg.clients[key];
            if (client.callback) client.callback('{token}');
        }});
    }}
""")

# Submit the form
driver.find_element(By.CSS_SELECTOR, "form").submit()

# Wait for navigation
wait.until(EC.url_changes(page_url))
print(f"Success! Now on: {driver.current_url}")

Vollständiges Arbeitsbeispiel

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import requests
import time

API_KEY = "YOUR_API_KEY"

def solve_recaptcha_v2(site_key, page_url):
    resp = requests.get("https://ocr.captchaai.com/in.php", params={
        "key": API_KEY,
        "method": "userrecaptcha",
        "googlekey": site_key,
        "pageurl": page_url
    })
    if not resp.text.startswith("OK|"):
        raise Exception(f"Submit failed: {resp.text}")
    task_id = resp.text.split("|")[1]

    for _ in range(60):
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY, "action": "get", "id": task_id
        })
        if result.text == "CAPCHA_NOT_READY":
            continue
        if result.text.startswith("OK|"):
            return result.text.split("|")[1]
        raise Exception(f"Solve failed: {result.text}")
    raise TimeoutError("Timed out")

def main():
    options = Options()
    options.add_argument("--disable-blink-features=AutomationControlled")
    driver = webdriver.Chrome(options=options)

    try:
        driver.get("https://example.com/login")
        wait = WebDriverWait(driver, 10)

        # Extract site key
        recaptcha = wait.until(
            EC.presence_of_element_located((By.CLASS_NAME, "g-recaptcha"))
        )
        site_key = recaptcha.get_attribute("data-sitekey")

        # Solve
        token = solve_recaptcha_v2(site_key, driver.current_url)

        # Inject and submit
        driver.execute_script(
            f"document.getElementById('g-recaptcha-response').innerHTML = '{token}';"
        )
        driver.find_element(By.CSS_SELECTOR, "form").submit()

        wait.until(EC.url_changes(driver.current_url))
        print("Login successful!")

    finally:
        driver.quit()

if __name__ == "__main__":
    main()

Umgang mit verschiedenen CAPTCHA-Typen

reCAPTCHA v3

def solve_recaptcha_v3(site_key, page_url, action="verify"):
    resp = requests.get("https://ocr.captchaai.com/in.php", params={
        "key": API_KEY,
        "method": "userrecaptcha",
        "googlekey": site_key,
        "pageurl": page_url,
        "version": "v3",
        "action": action
    })
    task_id = resp.text.split("|")[1]
    # ... same polling logic

Cloudflare Turnstile

def solve_turnstile(site_key, page_url):
    resp = requests.get("https://ocr.captchaai.com/in.php", params={
        "key": API_KEY,
        "method": "turnstile",
        "sitekey": site_key,
        "pageurl": page_url
    })
    task_id = resp.text.split("|")[1]
    # ... same polling logic

Fehlerbehebung

Problem Ursache Lösung
Token abgelehnt Das Token ist vor der Übermittlung abgelaufen Injizieren und innerhalb von 120 Sekunden abschicken
Site-Schlüssel nicht gefunden CAPTCHA wird dynamisch geladen Fügen Sie WebDriverWait mit längerem Timeout hinzu
NoSuchElementException Falscher Selektor Überprüfen Sie die Seite, um das richtige Element zu finden
Nicht übereinstimmende ChromeDriver-Version Chrome aktualisiert Laden Sie die passende ChromeDriver-Version herunter
Bot-Erkennung trotz korrektem Token Anti-Bot über CAPTCHA hinaus Browser-Flags prüfen und Undetected-Chrome-Treiber verwenden

FAQ

Kann ich Selenium mit CaptchaAI im Headless-Modus ausführen?

Ja. CaptchaAI löst CAPTCHAs serverseitig – der Browser muss nur die Seite laden, um den Site-Schlüssel zu extrahieren. Der Headless-Modus funktioniert einwandfrei.

Muss ich das CAPTCHA-Kontrollkästchen anklicken?

Nein. CaptchaAI gibt ein Token zurück, das Sie direkt in das Formular einfügen. Es ist keine visuelle Interaktion mit dem CAPTCHA-Widget erforderlich.

Was ist mit reCAPTCHA mit Rückrufen?

Einige Websites verwenden JavaScript-Rückrufe anstelle der Formularübermittlung. Verwenden Sie driver.execute_script(), um den Rückruf mit dem gelösten Token auszulösen. SehenSo lösen Sie den reCAPTCHA v2-Rückruf.

Verwandte Leitfäden

Kommentare sind für diesen Artikel deaktiviert.

Verwandte Beiträge

Explainers Mobile Proxys für autorisierte CAPTCHA-Tests in eigener QA
Wann mobile Proxys für autorisierte, eigene QA- und Geo-Tests sinnvoll sind, welche Anbieterkriterien gelten und wie Captcha AI dabei eingebunden wird.

Wann mobile Proxys für autorisierte, eigene QA- und Geo-Tests sinnvoll sind, welche Anbieterkriterien gelten u...

Apr 19, 2026
Integrations Bright Data + CaptchaAI: Vollständiger Leitfaden zur Proxy-Integration
Bright Data Proxys mit Captcha AI kombinieren: Setup, Python/Node.js-Codebeispiele, Sticky Sessions und Fehlerbehebung für CAPTCHA-intensive Scraping-Projekte.

Bright Data Proxys mit Captcha AI kombinieren: Setup, Python/Node.js-Codebeispiele, Sticky Sessions und Fehler...

May 04, 2026