Туториалы по API

Пользовательские типы CAPTCHA: отправка необычных задач в CaptchaAI

Не все CAPTCHA являются reCAPTCHA или стандартными текстовыми изображениями. Пользовательские CAPTCHA требуют творческого подхода к извлечению и отправке параметров.


Определение пользовательских CAPTCHA

Тип Характеристики Подход
Слайдер КАПЧА Перетащите в нужное положение Снимок экрана в виде изображения, используйте текстовые инструкции
Головоломка (головоломка) Перетащите фрагмент, чтобы он поместился Может сопоставляться с решением в стиле GeeTest.
Аудиокапча Слушайте и печатайте Отправить аудиофайл
Поворот изображения Поверните, чтобы исправить ориентацию Скриншот + инструкция
Выберите заказ Нажимайте элементы последовательно Используйте подход сетки изображений
Математическое уравнение Решить арифметику Используйте параметр calc=1.
Пользовательский интерактивный JS-виджет для конкретного сайта Скриншот + текстовая инструкция

Отправка пользовательских изображений с инструкциями

Для любой визуальной CAPTCHA сделайте снимок экрана и предоставьте инструкции:

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

Положение слайдера CAPTCHA

CAPTCHA, требующие перетаскивания ползунка в определенную позицию:

# 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

Ротация CAPTCHA

CAPTCHA, где изображение необходимо повернуть в правильную ориентацию:

# 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

Порядок выбора CAPTCHA

CAPTCHA, где элементы необходимо нажимать в определенном порядке:

# 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

Аудио CAPTCHA

Некоторые сайты предлагают аудиоальтернативы:

# 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

Пользовательские CAPTCHA для виджетов

Для полностью настраиваемых виджетов CAPTCHA:

# 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

# 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"]

Поиск неисправностей

Проблема Причина Исправить
ERROR_CAPTCHA_UNSOLVABLE Изображение нечеткое или инструкции расплывчаты. Улучшите качество скриншотов и инструкции
Неправильный формат ответа Решатель вернул описание вместо значения Будьте конкретны: «Верните только число».
Пользовательский виджет не сохранен Элемент вне области просмотра Прокрутите до элемента перед скриншотом
Взаимодействие не удалось Неправильные координаты клика Тщательно сопоставьте решение с реальными элементами пользовательского интерфейса.

Часто задаваемые вопросы

Может ли CaptchaAI решить любой тип CAPTCHA?

CaptchaAI изначально поддерживает более 27 500 типов CAPTCHA. Для действительно новых пользовательских CAPTCHA подход «изображение + текстовые инструкции» обеспечивает наилучшее покрытие.

Что делать, если пользовательская CAPTCHA часто меняется?

Используйте функцию определения типа, чтобы определить текущую задачу и направить ее к соответствующему решателю.

Как получить поддержку нового типа CAPTCHA?

Свяжитесь со службой поддержки CaptchaAI и предоставьте примеры изображений и URL-адрес сайта. На платформу можно добавлять новые типы.


Связанные руководства

  • Стратегии решения многосимвольных задач
  • подходящий практики кодирования Base64

Решите любую капчу —начни с CaptchaAI.

Комментарии для этой статьи отключены.