API-Tutorials

Mathematische CAPTCHA-Lösung mit CaptchaAI calc-Parameter

Mathematische CAPTCHAs zeigen eine arithmetische Gleichung an und erwarten das berechnete Ergebnis – nicht den Gleichungstext. Der Parameter calc weist CaptchaAI an, die Mathematik zu lösen und die Antwort zurückzugeben.


Wie Berechnung funktioniert

berechneter Wert Verhalten
0 (Standard) Gibt den Text unverändert zurück (z. B. "3+7")
1 Berechnet das Ergebnis und gibt es zurück (z. B. "10")

Grundlegende mathematische CAPTCHA-Lösung

import requests
import base64
import time
import os

API_KEY = os.environ["CAPTCHAAI_API_KEY"]


def solve_math_captcha(image_b64):
    """Solve a math CAPTCHA — returns the computed result."""
    resp = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": API_KEY,
        "method": "base64",
        "body": image_b64,
        "calc": 1,          # Compute the math
        "numeric": 1,       # Result will be a number
        "json": 1,
    }, timeout=30)

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

    task_id = result["request"]

    time.sleep(8)
    for _ in range(24):
        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")


# Example: Image shows "3 + 7 = ?"
# With calc=0: Returns "3+7"
# With calc=1: Returns "10"

Gängige Mathe-CAPTCHA-Formate

Format              Example        Result
─────────────────────────────────────────
Addition            3 + 7 = ?      10
Subtraction         15 - 8 = ?     7
Multiplication      4 × 6 = ?      24
Division            20 ÷ 5 = ?     4
Mixed               3 + 4 × 2 = ?  11
Text-based          "three plus five"  8

Mit Textanweisungen

Fügen Sie für komplexe Formate Anweisungen hinzu:

def solve_text_math_captcha(image_b64, instructions):
    """Solve a math CAPTCHA with custom instructions."""
    resp = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": API_KEY,
        "method": "base64",
        "body": image_b64,
        "calc": 1,
        "textinstructions": instructions,
        "json": 1,
    }, timeout=30)
    return resp.json()


# Example instructions:
# "Solve the math expression and enter the number"
# "What is the result of the equation shown?"
# "Enter the sum of the two numbers"

Umgang mit Grenzfällen

# edge_cases.py


def validate_math_result(answer):
    """Validate and clean math CAPTCHA result."""
    if not answer:
        return None

    # Remove spaces
    answer = answer.strip()

    # Handle negative results
    if answer.startswith("-"):
        try:
            return str(int(answer))
        except ValueError:
            return answer

    # Handle decimal results
    try:
        num = float(answer)
        if num == int(num):
            return str(int(num))
        return str(num)
    except ValueError:
        return answer


def solve_math_with_fallback(image_b64):
    """Try calc=1, fall back to manual parsing if needed."""
    # Try with calc
    result = solve_math_captcha(image_b64)

    # Validate result is actually a number
    try:
        float(result)
        return result
    except (ValueError, TypeError):
        pass

    # Fallback: solve without calc and compute locally
    resp = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": API_KEY,
        "method": "base64",
        "body": image_b64,
        "calc": 0,      # Get the expression text
        "json": 1,
    }, timeout=30)

    # ... poll for result ...
    expression = "3+7"  # Example OCR result

    # Safely evaluate
    return str(safe_eval(expression))


def safe_eval(expression):
    """Safely evaluate a simple math expression."""
    # Only allow digits and basic operators
    import re
    cleaned = expression.replace("×", "*").replace("÷", "/").replace("=", "").replace("?", "")
    cleaned = cleaned.strip()

    if not re.match(r'^[\d\s+\-*/().]+$', cleaned):
        raise ValueError(f"Unsafe expression: {expression}")

    return eval(cleaned)  # Safe because we validated the pattern

Vollständiger Ablauf

# full_flow.py
from selenium import webdriver
from selenium.webdriver.common.by import By
import base64
import os


def solve_math_captcha_on_page(driver, captcha_selector, input_selector, submit_selector):
    """Complete flow: capture math CAPTCHA, solve, enter answer."""

    # Capture CAPTCHA image
    captcha_el = driver.find_element(By.CSS_SELECTOR, captcha_selector)
    image_b64 = captcha_el.screenshot_as_base64

    # Solve with calc=1
    answer = solve_math_captcha(image_b64)
    print(f"Math answer: {answer}")

    # Enter the computed result
    input_el = driver.find_element(By.CSS_SELECTOR, input_selector)
    input_el.clear()
    input_el.send_keys(answer)

    # Submit
    driver.find_element(By.CSS_SELECTOR, submit_selector).click()


# Usage
driver = webdriver.Chrome()
driver.get("https://example.com/form")

solve_math_captcha_on_page(
    driver,
    captcha_selector="#captcha-image",
    input_selector="#captcha-answer",
    submit_selector="#submit-btn",
)

Fehlerbehebung

Problem Ursache Lösung
Gibt Ausdruck statt Ergebnis zurück calc=1 fehlt Fügen Sie calc=1 zur Einreichung hinzu
Falsches Ergebnis Operator hat falsch verstanden (× vs +) Fügen Sie textinstructions hinzu, das das Gleichungsformat beschreibt
Gibt eine Dezimalzahl für eine Ganzzahlgleichung zurück Gleitkomma In int konvertieren: str(int(float(result)))
ERROR_CAPTCHA_UNSOLVABLE Sehr verzerrte Gleichung Versuchen Sie zunächst, das Bild vorzuverarbeiten

FAQ

Kann Calc mit komplexen Ausdrücken umgehen?

CaptchaAI übernimmt die Grundrechenarten (+, -, ×, ÷). Verwenden Sie für komplexe Ausdrücke mit Klammern oder Exponenten calc=0 und analysieren Sie den Ausdruck lokal.

Was ist, wenn das Ergebnis negativ ist?

CaptchaAI gibt negative Zahlen korrekt zurück (z. B. "5 - 8 = ?" gibt "-3" zurück).

Funktioniert die Berechnung mit textbasierter Mathematik?

Wenn das CAPTCHA „drei plus fünf“ anzeigt, verwenden Sie textinstructions, um darauf hinzuweisen, dass es sich um textbasierte Mathematik handelt. Die Ergebnisse können variieren.


Verwandte Leitfäden

  • Bild-CAPTCHA falsche Antwort Qualitätsoptimierung
  • Mehr-Zeichen-Bild-CAPTCHA-Lösungsstrategien

Mathematische CAPTCHAs automatisch lösen – Beginnen Sie mit CaptchaAI.

Diskussionen (0)

Noch keine Kommentare.