Hướng Dẫn API

Giải CAPTCHA toán học bằng tham số CaptchaAI calc

CAPTCHA toán học hiển thị một phương trình số học và mong đợi kết quả được tính toán — chứ không phải văn bản phương trình. Tham số calc yêu cầu CaptchaAI giải toán và trả về câu trả lời.


Calc hoạt động như thế nào

Giá trị tính toán Hành vi
0 (mặc định) Trả về văn bản nguyên trạng (ví dụ: "3+7")
1 Tính toán kết quả và trả về kết quả đó (ví dụ: "10")

Giải CAPTCHA toán học cơ bản

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"

Các định dạng CAPTCHA toán học phổ biến

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

Với văn bản hướng dẫn

Đối với các định dạng phức tạp, hãy thêm hướng dẫn:

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"

Xử lý các trường hợp cạnh

# 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

Luồng hoàn chỉnh

# 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",
)

Khắc phục sự cố

Vấn đề Nguyên nhân Cách xử lý
Trả về biểu thức thay vì kết quả Thiếu calc=1 Thêm calc=1 để gửi
Kết quả sai Toán tử đọc sai (× vs +) Thêm textinstructions mô tả định dạng phương trình
Trả về số thập phân cho phương trình số nguyên Điểm nổi Chuyển đổi sang int: str(int(float(result)))
ERROR_CAPTCHA_UNSOLVABLE Phương trình rất méo mó Hãy thử xử lý trước hình ảnh trước

Câu hỏi thường gặp

calc có thể xử lý các biểu thức phức tạp không?

CaptchaAI xử lý số học cơ bản (+, -, ×, ÷). Đối với các biểu thức phức tạp có dấu ngoặc đơn hoặc số mũ, hãy sử dụng calc=0 và phân tích cú pháp biểu thức cục bộ.

Nếu kết quả là âm tính thì sao?

CaptchaAI trả về số âm một cách chính xác (ví dụ: "5 - 8 = ?" trả về "-3").

calc có hoạt động với toán học dựa trên văn bản không?

Nếu CAPTCHA hiển thị "ba cộng năm", hãy sử dụng textinstructions để gợi ý rằng đó là phép toán dựa trên văn bản. Kết quả có thể khác nhau.


Hướng dẫn liên quan


Tự động giải CAPTCHA toán học —bắt đầu với CaptchaAI.

Os comentários estão desativados para este artigo.