دروس API

أنواع CAPTCHA المخصصة: إرسال تحديات غير عادية إلى CaptchaAI

ليست كل اختبارات CAPTCHA عبارة عن reCAPTCHA أو صور نصية قياسية. تتطلب اختبارات CAPTCHA المخصصة طرقًا إبداعية لاستخراج المعلمات وإرسالها.


تحديد CAPTCHAs المخصصة

النوع الخصائص النهج
شريط التمرير CAPTCHA اسحب إلى الموضع لقطة شاشة كصورة، استخدم التعليمات النصية
لغز (بانوراما) اسحب القطعة لتناسب قد يتم تعيينه لحل بأسلوب GeeTest
اختبار CAPTCHA الصوتي استمع واكتب إرسال الملف الصوتي
تدوير الصورة تدوير لتصحيح الاتجاه لقطة شاشة + تعليمات
حدد النظام انقر فوق العناصر بالتسلسل استخدم نهج شبكة الصور
معادلة الرياضيات حل العمليات الحسابية استخدم المعلمة 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

ترتيب الاختيار CAPTCHAs

اختبارات 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

عناصر واجهة المستخدم المخصصة CAPTCHAs

للحصول على أدوات 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 الصورة غير واضحة أو التعليمات غامضة تحسين جودة لقطة الشاشة والتعليمات
صيغة الإجابة خاطئة قام Solver بإرجاع الوصف بدلاً من القيمة كن محددًا: "إرجاع الرقم فقط"
لم يتم التقاط القطعة المخصصة عنصر خارج إطار العرض قم بالتمرير إلى العنصر قبل لقطة الشاشة
التفاعل يفشل إحداثيات النقر خاطئة قم بتعيين الحل لعناصر واجهة المستخدم الفعلية بعناية

الأسئلة الشائعة

هل يستطيع CaptchaAI حل أي نوع من أنواع CAPTCHA؟

يدعم CaptchaAI أكثر من 27500 نوع من أنواع CAPTCHA محليًا. بالنسبة لاختبارات CAPTCHA المخصصة الجديدة حقًا، يوفر نهج الصورة + تعليمات النص أفضل تغطية.

ماذا لو تغير اختبار CAPTCHA المخصص بشكل متكرر؟

استخدم وظيفة اكتشاف النوع لتحديد التحدي الحالي والتوجيه إلى الحل المناسب.

كيف يمكنني الحصول على دعم لنوع CAPTCHA جديد؟

اتصل بدعم CaptchaAI مع أمثلة للصور وعنوان URL للموقع. يمكن إضافة أنواع جديدة إلى المنصة.


أدلة ذات صلة


حل أي اختبار CAPTCHA — ابدأ بـ CaptchaAI.

التعليقات غير مفعّلة لهذا المقال.