Tutoriels API

Types CAPTCHA personnalisés : soumission de défis inhabituels à CaptchaAI

Tous les CAPTCHA ne sont pas des reCAPTCHA ou des images de texte standard. Les CAPTCHA personnalisés nécessitent des approches créatives pour l'extraction et la soumission des paramètres.


Identifier les CAPTCHA personnalisés

Tapez Caractéristiques Approche
CAPTCHA du curseur Faites glisser vers la position Capture d'écran sous forme d'image, utilisez les instructions textuelles
Casse-tête (scie sauteuse) Faites glisser la pièce pour l'ajuster Peut correspondre à une résolution de style GeeTest
CAPTCHA audio Écoutez et tapez Soumettre le fichier audio
Faire pivoter l'image Faire pivoter pour corriger l'orientation Capture d'écran + instructions
Sélectionnez la commande Cliquez sur les éléments dans l'ordre Utiliser l'approche de grille d'images
Équation mathématique Résoudre l'arithmétique Utiliser le paramètre calc=1
Interactif personnalisé Widget JS spécifique au site Capture d'écran + instructions textuelles

Soumettre des images personnalisées avec des instructions

Pour tout CAPTCHA visuel, capturez-le et fournissez les instructions :

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 de position du curseur

CAPTCHA qui nécessitent de faire glisser un curseur vers une position spécifique :

# 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 de rotation

CAPTCHA où une image doit être pivotée dans la bonne orientation :

# 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 d’ordre de sélection

CAPTCHA où les éléments doivent être cliqués dans un ordre spécifique :

# 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

Certains sites proposent des alternatives audio :

# 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 de widget personnalisé

Pour les widgets CAPTCHA entièrement personnalisés :

# 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

Détection de type 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"]

Dépannage

Problème Parce que Corriger
ERROR_CAPTCHA_UNSOLVABLE Image peu claire ou instructions vagues Améliorer la qualité des captures d'écran et les instructions
Mauvais format de réponse Le solveur a renvoyé une description au lieu d'une valeur Soyez précis : "Renvoyer uniquement le numéro"
Widget personnalisé non capturé Élément en dehors de la fenêtre Faites défiler jusqu'à l'élément avant la capture d'écran
L'interaction échoue Coordonnées de clic incorrectes Mapper soigneusement la solution aux éléments réels de l’interface utilisateur

FAQ

CaptchaAI peut-il résoudre n’importe quel type de CAPTCHA ?

CaptchaAI prend en charge plus de 27 500 types CAPTCHA de manière native. Pour les CAPTCHA personnalisés vraiment nouveaux, l’approche des instructions image + texte offre la meilleure couverture.

Que se passe-t-il si le CAPTCHA personnalisé change fréquemment ?

Utilisez la fonction de détection de type pour identifier le défi actuel et l'orienter vers le solveur approprié.

Comment puis-je obtenir de l'aide pour un nouveau type CAPTCHA ?

Contactez le support CaptchaAI avec des exemples d'images et l'URL du site. De nouveaux types peuvent être ajoutés à la plateforme.


Guides connexes

  • Stratégies de résolution multi-caractères
  • Meilleures pratiques d’encodage Base64

Résolvez n'importe quel CAPTCHA -commencer par CaptchaAI.

Les commentaires sont désactivés pour cet article.