API-Tutorials

Benutzerdefinierte CAPTCHA-Typen: Senden ungewöhnlicher Herausforderungen an CaptchaAI

Nicht alle CAPTCHAs sind reCAPTCHA oder Standardtextbilder. Benutzerdefinierte CAPTCHAs erfordern kreative Ansätze für die Parameterextraktion und -übermittlung.


Identifizieren benutzerdefinierter CAPTCHAs

Typ Eigenschaften Ansatz
Slider-CAPTCHA An die Position ziehen Screenshot als Bild, Textanweisungen verwenden
Puzzle (Puzzle) Ziehen Sie das Teil, um es anzupassen Kann einer Lösung im GeeTest-Stil zugeordnet werden
Audio-CAPTCHA Hören Sie zu und tippen Sie Audiodatei einreichen
Bild drehen Zur korrekten Ausrichtung drehen Screenshot + Anleitung
Bestellung auswählen Klicken Sie nacheinander auf die Elemente Verwenden Sie den Bildrasteransatz
Mathematische Gleichung Arithmetik lösen Verwenden Sie den Parameter calc=1
Benutzerdefinierte interaktiv Sitespezifisches JS-Widget Screenshot + Textanweisungen

Senden benutzerdefinierter Bilder mit Anweisungen

Machen Sie für jedes visuelle CAPTCHA einen Screenshot und geben Sie Anweisungen:

import requests
import base64
import time
import os

API_KEY = os.environ["CAPTCHAAI_API_KEY"]


def solve_custom_captcha(image_b64, instructions):
    """Solve any visual CAPTCHA using image + text instructions."""
    resp = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": API_KEY,
        "method": "base64",
        "body": image_b64,
        "textinstructions": instructions,
        "json": 1,
    }, timeout=30)

    result = resp.json()
    if result.get("status") != 1:
        raise RuntimeError(result.get("request"))

    task_id = result["request"]

    time.sleep(10)
    for _ in range(30):
        resp = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY, "action": "get",
            "id": task_id, "json": 1,
        }, timeout=15)
        data = resp.json()
        if data.get("status") == 1:
            return data["request"]
        if data["request"] != "CAPCHA_NOT_READY":
            raise RuntimeError(data["request"])
        time.sleep(5)

    raise TimeoutError("Solve timeout")

Slider-Position CAPTCHAs

CAPTCHAs, die das Ziehen eines Schiebereglers an eine bestimmte Position erfordern:

# slider_captcha.py
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains


def solve_slider_captcha(driver, captcha_selector):
    """Screenshot slider CAPTCHA and solve via CaptchaAI."""
    captcha = driver.find_element(By.CSS_SELECTOR, captcha_selector)
    image_b64 = captcha.screenshot_as_base64

    result = solve_custom_captcha(
        image_b64,
        "What pixel position should the slider be dragged to? "
        "Return only the X offset number."
    )

    try:
        offset = int(result)
    except ValueError:
        return False

    # Drag slider to position
    slider = driver.find_element(By.CSS_SELECTOR, ".slider-handle")
    ActionChains(driver).click_and_hold(slider).move_by_offset(offset, 0).release().perform()

    return True

Rotations-CAPTCHAs

CAPTCHAs, bei denen ein Bild in die richtige Ausrichtung gedreht werden muss:

# rotation_captcha.py


def solve_rotation_captcha(driver, captcha_selector):
    """Solve rotation CAPTCHA."""
    captcha = driver.find_element(By.CSS_SELECTOR, captcha_selector)
    image_b64 = captcha.screenshot_as_base64

    result = solve_custom_captcha(
        image_b64,
        "How many degrees should this image be rotated clockwise "
        "to be in the correct upright orientation? Return only the number."
    )

    try:
        degrees = int(result)
    except ValueError:
        return False

    # Click rotation button the correct number of times
    rotate_btn = driver.find_element(By.CSS_SELECTOR, ".rotate-button")
    clicks = degrees // 90  # Each click rotates 90 degrees

    for _ in range(clicks):
        rotate_btn.click()
        time.sleep(0.3)

    return True

Auswahlreihenfolge CAPTCHAs

CAPTCHAs, bei denen Elemente in einer bestimmten Reihenfolge angeklickt werden müssen:

# order_captcha.py


def solve_order_captcha(driver, captcha_selector, item_selector):
    """Solve click-in-order CAPTCHA."""
    captcha = driver.find_element(By.CSS_SELECTOR, captcha_selector)
    image_b64 = captcha.screenshot_as_base64

    result = solve_custom_captcha(
        image_b64,
        "What is the correct order? Return as comma-separated "
        "numbers (1-indexed) representing positions left-to-right, top-to-bottom."
    )

    # Parse order
    try:
        order = [int(x.strip()) for x in result.split(",")]
    except ValueError:
        return False

    # Click items in order
    items = driver.find_elements(By.CSS_SELECTOR, item_selector)
    for idx in order:
        if 1 <= idx <= len(items):
            items[idx - 1].click()
            time.sleep(0.5)

    return True

Audio-CAPTCHAs

Einige Websites bieten Audio-Alternativen an:

# audio_captcha.py
import requests


def solve_audio_captcha(audio_url):
    """Download and solve an audio CAPTCHA."""
    # Download audio
    resp = requests.get(audio_url, timeout=30)
    audio_b64 = base64.b64encode(resp.content).decode("ascii")

    # Submit as image with instructions
    # CaptchaAI may support audio via the base64 method
    result = solve_custom_captcha(
        audio_b64,
        "This is an audio CAPTCHA. Transcribe the spoken characters."
    )
    return result

Benutzerdefinierte Widget-CAPTCHAs

Für vollständig benutzerdefinierte CAPTCHA-Widgets:

# custom_widget.py
from selenium import webdriver
from selenium.webdriver.common.by import By


def handle_custom_widget(driver, widget_selector):
    """Handle an unknown custom CAPTCHA widget."""

    # Step 1: Screenshot the entire widget
    widget = driver.find_element(By.CSS_SELECTOR, widget_selector)
    image_b64 = widget.screenshot_as_base64

    # Step 2: Get any visible instructions
    try:
        instructions_el = widget.find_element(By.CSS_SELECTOR, ".instructions, .prompt, p")
        visible_instructions = instructions_el.text
    except Exception:
        visible_instructions = "Solve this CAPTCHA"

    # Step 3: Submit with descriptive instructions
    result = solve_custom_captcha(
        image_b64,
        f"CAPTCHA instructions: {visible_instructions}. "
        f"Return the answer text."
    )

    # Step 4: Try to submit result
    try:
        input_el = widget.find_element(By.CSS_SELECTOR, "input")
        input_el.clear()
        input_el.send_keys(result)
    except Exception:
        # No input — try clicking based on result
        driver.execute_script("""
            var input = document.querySelector('input[name*="captcha"]');
            if (input) input.value = arguments[0];
        """, result)

    return result

CAPTCHA-Typerkennung

# detector.py
import re


def detect_captcha_type(page_html):
    """Detect which CAPTCHA type is on a page."""
    checks = {
        "recaptcha_v2": r'data-sitekey.*g-recaptcha',
        "recaptcha_v3": r'recaptcha/api\.js\?render=',
        "turnstile": r'cf-turnstile|challenges\.cloudflare\.com/turnstile',
        "geetest": r'gt\b.*challenge|geetest',
        "bls": r'method.*bls|bls-captcha',
        "image_text": r'captcha.*\.(png|jpg|gif|jpeg)',
        "slider": r'slider.*captcha|slide.*verify',
        "audio": r'audio.*captcha|captcha.*audio',
    }

    detected = []
    for captcha_type, pattern in checks.items():
        if re.search(pattern, page_html, re.IGNORECASE):
            detected.append(captcha_type)

    return detected if detected else ["unknown"]

Fehlerbehebung

Problem Ursache Lösung
ERROR_CAPTCHA_UNSOLVABLE Bild unklar oder Anweisungen vage Verbessern Sie die Qualität und Anleitung des Screenshots
Falsches Antwortformat Der Solver hat eine Beschreibung anstelle eines Werts zurückgegeben Seien Sie konkret: „Nur die Nummer zurückgeben“
Benutzerdefiniertes Widget wurde nicht erfasst Element außerhalb des Ansichtsfensters Scrollen Sie vor dem Screenshot zum Element
Die Interaktion schlägt fehl Falsche Klickkoordinaten Ordnen Sie die Lösung sorgfältig den tatsächlichen UI-Elementen zu

FAQ

Kann CaptchaAI jeden CAPTCHA-Typ lösen?

CaptchaAI unterstützt nativ mehr als 27.500 CAPTCHA-Typen. Für wirklich neuartige benutzerdefinierte CAPTCHAs bietet der Ansatz mit Bild- und Textanweisungen die beste Abdeckung.

Was passiert, wenn sich das benutzerdefinierte CAPTCHA häufig ändert?

Verwenden Sie die Typerkennungsfunktion, um die aktuelle Herausforderung zu identifizieren und sie an den entsprechenden Löser weiterzuleiten.

Wie erhalte ich Unterstützung für einen neuen CAPTCHA-Typ?

Kontaktieren Sie den CaptchaAI-Support mit Beispielbildern und der Site-URL. Der Plattform können neue Typen hinzugefügt werden.


Verwandte Leitfäden

  • Lösungsstrategien für mehrere Zeichen
  • Best Practices für die Base64-Kodierung

Lösen Sie alle CAPTCHAs – Beginnen Sie mit CaptchaAI.

Kommentare sind für diesen Artikel deaktiviert.