Troubleshooting

فشل اختبار CAPTCHA لأتمتة المتصفح ولكن واجهة برمجة التطبيقات تعمل: دليل التصحيح

لقد قمت بحل اختبار CAPTCHA عبر CaptchaAI وحصلت على رمز صالح، ولكن إدخاله في المتصفح لا يعمل. يغطي هذا الدليل كل الأسباب وكيفية إصلاح كل منها.


نقاط الفشل المشتركة

المشكلة أعراض السبب الجذري
لم يتم إدخال الرمز المميز في العنصر الصحيح يتم إرسال النموذج بدون رمز مميز محدد منطقة النص خاطئ
انتهت صلاحية الرمز المميز قبل الإرسال يعرض الموقع اختبار CAPTCHA مرة أخرى بطيء جدًا بين الحل والإرسال
لم يتم تشغيل رد الاتصال يظل زر النموذج معطلاً رد اتصال grecaptcha مفقود
تم إرسال عنوان URL خاطئ إلى API الرمز غير صالح لهذا المجال عنوان URL غير متطابق
اكتشاف الروبوتات خارج نطاق اختبار CAPTCHA تم الحظر بعد قبول الرمز المميز بصمة المتصفح

الإصلاح 1: حقن الرمز المميز الصحيح لـ reCAPTCHA v2

يجب أن ينتقل الرمز المميز إلى منطقة النص g-recaptcha-response ويجب إطلاق رد الاتصال:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time


def inject_recaptcha_token(driver, token):
    """Properly inject reCAPTCHA v2 token in browser."""

    # Step 1: Make the response textarea visible and set the value
    driver.execute_script("""
        // Find all response textareas (may be multiple on page)
        var textareas = document.querySelectorAll('[name="g-recaptcha-response"]');
        textareas.forEach(function(ta) {
            ta.style.display = 'block';
            ta.value = arguments[0];
        });

        // Also set via ID if present
        var byId = document.getElementById('g-recaptcha-response');
        if (byId) {
            byId.style.display = 'block';
            byId.value = arguments[0];
        }
    """, token)

    # Step 2: Trigger the callback
    driver.execute_script("""
        // Try standard callback
        if (typeof ___grecaptcha_cfg !== 'undefined') {
            var clients = ___grecaptcha_cfg.clients;
            for (var key in clients) {
                var client = clients[key];
                // Navigate nested structure to find callback
                for (var prop in client) {
                    var val = client[prop];
                    if (val && typeof val === 'object') {
                        for (var subprop in val) {
                            var subval = val[subprop];
                            if (subval && typeof subval === 'object' && subval.callback) {
                                subval.callback(arguments[0]);
                                return;
                            }
                        }
                    }
                }
            }
        }
        // Fallback: try common callback names
        if (typeof onCaptchaSuccess === 'function') onCaptchaSuccess(arguments[0]);
        else if (typeof captchaCallback === 'function') captchaCallback(arguments[0]);
    """, token)


# Usage
driver = webdriver.Chrome()
driver.get("https://example.com/form")
# ... solve CAPTCHA via CaptchaAI ...
inject_recaptcha_token(driver, token)
time.sleep(1)
driver.find_element(By.CSS_SELECTOR, "button[type=submit]").click()

الإصلاح 2: التعامل مع النماذج المعتمدة على رد الاتصال

تظل بعض النماذج معطلة حتى يتم تشغيل رد اتصال CAPTCHA:

def find_and_trigger_callback(driver, token):
    """Find the reCAPTCHA callback and trigger it."""

    # Method 1: Extract callback from data attribute
    callback_name = driver.execute_script("""
        var widget = document.querySelector('.g-recaptcha');
        if (widget) {
            return widget.getAttribute('data-callback');
        }
        return null;
    """)

    if callback_name:
        driver.execute_script(f"window['{callback_name}'](arguments[0]);", token)
        return True

    # Method 2: Extract from grecaptcha config
    triggered = driver.execute_script("""
        try {
            var widgetId = 0;
            var callback = ___grecaptcha_cfg.clients[widgetId].aa.l.callback;
            if (typeof callback === 'function') {
                callback(arguments[0]);
                return true;
            }
        } catch(e) {}
        return false;
    """, token)

    return triggered

الإصلاح 3: التوقيت - الحل والاستخدام على الفور

import requests
import time


def solve_and_inject_fast(driver, api_key, sitekey, page_url):
    """Solve CAPTCHA and inject token with minimal delay."""
    # Submit solve request
    resp = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": api_key,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": page_url,
        "json": 1,
    }, timeout=30)
    task_id = resp.json()["request"]

    # Poll for result
    time.sleep(15)
    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:
            token = data["request"]

            # IMMEDIATELY inject — don't wait
            inject_recaptcha_token(driver, token)

            # Submit form within 5 seconds
            time.sleep(0.5)
            return True

        if data["request"] != "CAPCHA_NOT_READY":
            raise RuntimeError(data["request"])
        time.sleep(5)

    raise TimeoutError("Solve timeout")

الإصلاح 4: تصحيح عنوان URL الخاص بـ SPA وإطارات Iframe

def get_correct_pageurl(driver):
    """Get the URL that reCAPTCHA actually sees."""

    # Check if CAPTCHA is in an iframe
    iframes = driver.find_elements(By.TAG_NAME, "iframe")

    for iframe in iframes:
        src = iframe.get_attribute("src") or ""
        if "recaptcha" in src or "anchor" in src:
            # CAPTCHA is in iframe — use parent page URL
            return driver.current_url

    # For SPAs, use current URL (may differ from initial load)
    return driver.current_url


# WRONG — using the URL you navigated to
pageurl = "https://example.com/form"  # May have redirected

# CORRECT — using the URL the browser is actually on
pageurl = get_correct_pageurl(driver)

الإصلاح 5: اكتشاف برامج مكافحة الروبوتات بما يتجاوز اختبار CAPTCHA

حتى مع وجود رمز صالح، قد يحظر الموقع المتصفحات الآلية:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service


def create_stealth_driver():
    """Create a browser that avoids basic bot detection."""
    options = Options()

    # Remove automation indicators
    options.add_argument("--disable-blink-features=AutomationControlled")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option("useAutomationExtension", False)

    # Set realistic window size
    options.add_argument("--window-size=1920,1080")

    driver = webdriver.Chrome(options=options)

    # Override navigator.webdriver
    driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
        "source": "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
    })

    return driver


driver = create_stealth_driver()

الإصلاح 6: حقن رمز Turnstile

يستخدم Cloudflare Turnstile طريقة حقن مختلفة:

def inject_turnstile_token(driver, token):
    """Inject Turnstile token into the page."""
    driver.execute_script("""
        // Find Turnstile response input
        var inputs = document.querySelectorAll(
            'input[name="cf-turnstile-response"], ' +
            'input[name="g-recaptcha-response"]'
        );

        inputs.forEach(function(input) {
            input.value = arguments[0];
        });

        // Trigger change event
        inputs.forEach(function(input) {
            input.dispatchEvent(new Event('change', { bubbles: true }));
            input.dispatchEvent(new Event('input', { bubbles: true }));
        });

        // Try Turnstile callback
        if (window.turnstile) {
            var widgets = document.querySelectorAll('[data-callback]');
            widgets.forEach(function(w) {
                var cb = w.getAttribute('data-callback');
                if (typeof window[cb] === 'function') {
                    window[cb](arguments[0]);
                }
            });
        }
    """, token)

قائمة التحقق من التصحيح

def debug_captcha_injection(driver, token):
    """Print debug info to diagnose injection failures."""
    info = driver.execute_script("""
        var result = {};

        // Check textarea exists
        var ta = document.querySelector('[name="g-recaptcha-response"]');
        result.textarea_found = !!ta;
        result.textarea_value_set = ta ? ta.value.length > 0 : false;

        // Check reCAPTCHA loaded
        result.grecaptcha_loaded = typeof grecaptcha !== 'undefined';

        // Check for callback
        var widget = document.querySelector('.g-recaptcha');
        result.has_data_callback = widget ? !!widget.getAttribute('data-callback') : false;
        result.callback_name = widget ? widget.getAttribute('data-callback') : null;

        // Current URL
        result.current_url = window.location.href;

        // Check for errors in console (basic)
        result.has_submit_button = !!document.querySelector('button[type=submit], input[type=submit]');

        return result;
    """)

    for key, value in info.items():
        print(f"  {key}: {value}")

    return info

استكشاف الأخطاء وإصلاحها

أعراض السبب إصلاح
تم تعيين الرمز المميز ولكن تم رفض النموذج لم يتم تشغيل رد الاتصال ابحث عن وظيفة رد الاتصال واستدعها
يبقى زر الإرسال معطلاً رد الاتصال يتيح ذلك تشغيل رد الاتصال بعد حقن الرمز المميز
"اختبار CAPTCHA غير صالح" بعد الإرسال انتهت صلاحية الرمز المميز تقليل الوقت بين الحل والإرسال
403 بعد تقديم النموذج اكتشاف الروبوتات (وليس اختبار CAPTCHA) استخدم خيارات المتصفح الخفي
يعمل في الطلبات، ويفشل في المتصفح عنوان URL مختلف استخدم driver.current_url كعنوان URL للصفحة

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

لماذا يعمل الرمز المميز في الطلبات وليس في المتصفح؟

عادةً بسبب عدم تشغيل وظيفة رد الاتصال. تعتمد نماذج المتصفح غالبًا على رد الاتصال لتمكين الإرسال أو تعيين الحقول المخفية.

هل أحتاج إلى استخدام متصفح معين؟

Chrome/Chromium هو الأكثر توافقًا. يعمل Firefox ولكنه قد يحتاج إلى أساليب مختلفة لأوامر CDP. استخدم برنامج chromedriver الذي لم يتم اكتشافه للمواقع التي تتمتع باكتشاف قوي للروبوتات.

هل يجب علي استخدام وضع مقطوعة الرأس؟

تكتشف بعض المواقع المتصفحات مقطوعة الرأس وترفض الرموز المميزة. جرب وضع الرأس أولاً، ثم قم بالتبديل إلى وضع بدون رأس مع الأعلام المناسبة إذا كان يعمل.


أدلة ذات صلة



الخطوات التالية

النقاشات (0)

لا توجد تعليقات بعد.

مقالات ذات صلة

API Tutorials Bash + cURL + CaptchaAI: أتمتة CAPTCHA من سطر الأوامر
شرح خطوة بخطوة لـ Bash + c URL + Captcha AI: أتمتة CAPTCHA من سطر الأوامر مع أمثلة مباشرة قابلة لإعادة الاستخدام ومسار واضح لتطبيقه باستخدام Captcha AI.

شرح خطوة بخطوة لـ Bash + c URL + Captcha AI: أتمتة CAPTCHA من سطر الأوامر مع أمثلة مباشرة قابلة لإعادة الاستخد...

Apr 21, 2026
Integrations Bright Data + CaptchaAI: دليل تكامل البروكسي
دليل تكامل لـ Bright Data + Captcha AI: دليل تكامل البروكسي يوضح الإعداد، وأمثلة الكود، ومسار الدمج الأنسب لتشغيل Captcha AI داخل تطبيقاتك بصورة واضحة وقابلة لل...

دليل تكامل لـ Bright Data + Captcha AI: دليل تكامل البروكسي يوضح الإعداد، وأمثلة الكود، ومسار الدمج الأنسب لتش...

Apr 25, 2026
DevOps & Scaling حل CAPTCHA بدون خوادم باستخدام AWS Lambda وCaptchaAI
دليل تشغيلي لـ حل CAPTCHA بدون خوادم باستخدام AWS Lambda وCaptcha AI يغطّي قرارات البنية، والاعتمادية، والمراقبة، وأنماط الأتمتة المناسبة لتشغيل Captcha AI في ب...

دليل تشغيلي لـ حل CAPTCHA بدون خوادم باستخدام AWS Lambda وCaptcha AI يغطّي قرارات البنية، والاعتمادية، والمراق...

Apr 20, 2026