دروس API

حل reCAPTCHA الخفي (Invisible) باستخدام CaptchaAI API

يتم تشغيل اختبار reCAPTCHA غير المرئي عندما ينقر المستخدم على زر أو يرسل نموذجًا - ولا يوجد مربع اختيار. يحدث التحدي في الخلفية، وتستمر الصفحة فقط عند التحقق من الرمز المميز. حل هذه المشكلة من خلال CaptchaAI يشبه الإصدار 2 القياسي، مع إضافة مفتاح واحد: يجب عليك تمرير invisible=1 في طلب واجهة برمجة التطبيقات (API) الخاص بك.

أكبر اختلاف في التكامل هو كيفية إدخال الرمز المميز. تستخدم معظم التطبيقات غير المرئية وظيفة رد الاتصال بدلاً من حقل g-recaptcha-response المخفي. تحتاج إلى العثور على رد الاتصال هذا والاتصال به.

لست متأكدًا مما إذا كان الإصدار 2 غير مرئي أم قياسي؟ اقرأشرح reCAPTCHA v2 مقابل Invisibleللحصول على نصائح الكشف.


ما تحتاجه

المتطلبات التفاصيل
مفتاح CaptchaAI API captchaai.com/api.php
مفتاح الموقع من data-sitekey على القطعة أو الزر
عنوان URL للصفحة عنوان URL الكامل حيث يتم تشغيل اختبار CAPTCHA غير المرئي
أداة المتصفح Selenium/Puppeteer لتنفيذ رد الاتصال

الخطوة 1: اكتشاف reCAPTCHA غير المرئي

ابحث عن هذه الأنماط في صفحة HTML:

<!-- Option 1: div with data-size="invisible" -->
<div class="g-recaptcha" data-sitekey="6LdKlZEU..." data-size="invisible" data-callback="onSubmit"></div>

<!-- Option 2: button with data-sitekey (invisible by default) -->
<button data-sitekey="6LdKlZEU..." data-callback="onSubmit">Submit</button>

<!-- Option 3: programmatic execution -->
<script>
  grecaptcha.execute('6LdKlZEU...', {action: 'submit'});
</script>

إذا رأيت data-size="invisible"، أو زرًا به data-sitekey، أو grecaptcha.execute() بدون حاوية، فهذا يعني أن reCAPTCHA غير مرئي.

الخطوة 2: أرسل إلى CaptchaAI

import requests

response = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": "6LdKlZEUAAAAAPoxm...",
    "pageurl": "https://example.com/signup",
    "invisible": 1,
    "json": 1
})

task_id = response.json()["request"]
const params = new URLSearchParams({
  key: "YOUR_API_KEY", method: "userrecaptcha",
  googlekey: "6LdKlZEUAAAAAPoxm...",
  pageurl: "https://example.com/signup",
  invisible: 1, json: 1,
});
const res = await fetch(`https://ocr.captchaai.com/in.php?${params}`);
const { request: taskId } = await res.json();

الخطوة 3: استطلاع النتيجة

import time

for _ in range(40):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": "YOUR_API_KEY", "action": "get", "id": task_id, "json": 1
    }).json()
    if result.get("status") == 1:
        token = result["request"]
        break
    if result.get("request") != "CAPCHA_NOT_READY":
        raise RuntimeError(f"Error: {result['request']}")

الخطوة 4: أدخل الرمز المميز عبر رد الاتصال

هذه هي الخطوة الحاسمة. يتوقع reCAPTCHA غير المرئي وظيفة رد الاتصال، وليس مجرد قيمة حقل مخفية:

# Selenium example
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://example.com/signup")

# Find the callback name
callback = driver.execute_script("""
    var el = document.querySelector('[data-callback]');
    if (el) return el.getAttribute('data-callback');
    var btn = document.querySelector('[data-sitekey]');
    if (btn) return btn.getAttribute('data-callback');
    return null;
""")

# Execute the callback with the token
if callback:
    driver.execute_script(f"window['{callback}']('{token}');")
else:
    # Fallback: fill hidden field and submit
    driver.execute_script(f"""
        document.getElementById('g-recaptcha-response').innerHTML = '{token}';
        document.querySelector('form').submit();
    """)
// Puppeteer example
await page.evaluate((token) => {
  const el = document.querySelector('[data-callback]') || document.querySelector('[data-sitekey]');
  const callbackName = el?.getAttribute('data-callback');

  if (callbackName && window[callbackName]) {
    window[callbackName](token);
  } else {
    document.getElementById('g-recaptcha-response').innerHTML = token;
    document.querySelector('form').submit();
  }
}, token);

وظيفة العمل كاملة

import requests
import time

def solve_invisible_recaptcha(api_key, sitekey, page_url):
    submit = requests.get("https://ocr.captchaai.com/in.php", params={
        "key": api_key, "method": "userrecaptcha", "googlekey": sitekey,
        "pageurl": page_url, "invisible": 1, "json": 1
    }).json()

    if submit.get("status") != 1:
        raise RuntimeError(f"Submit error: {submit.get('request')}")

    task_id = submit["request"]

    for _ in range(40):
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": api_key, "action": "get", "id": task_id, "json": 1
        }).json()
        if result.get("status") == 1:
            return result["request"]
        if result.get("request") != "CAPCHA_NOT_READY":
            raise RuntimeError(f"Solve error: {result.get('request')}")

    raise TimeoutError("Timed out")

token = solve_invisible_recaptcha("YOUR_API_KEY", "6LdKlZEU...", "https://example.com/signup")

مثال كامل قابل للتشغيل

هل تحتاج إلى مشروع عمل كامل مع إعداد البيئة والاستقصاء وإعادة المحاولة ومعالجة الأخطاء؟

راجع المثال الكامل القابل للتشغيل على GitHub →


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

كيف أعرف إذا كان reCAPTCHA غير مرئي؟

ابحث عن data-size="invisible" في قسم عنصر واجهة المستخدم أو زر باستخدام data-sitekey. إذا لم يكن هناك مربع اختيار مرئي، فمن المحتمل أن يكون غير مرئي.

هل أحتاج إلى غير مرئي = 1 لإجراء اختبار reCAPTCHA غير المرئي؟

نعم. بدونها، يتعامل CaptchaAI مع المهمة على أنها الإصدار 2 القياسي وقد يتم رفض الرمز المميز.

ماذا لو لم أتمكن من العثور على وظيفة رد الاتصال؟

حاول ملء الحقل المخفي g-recaptcha-response وإرسال النموذج. تعود بعض التطبيقات غير المرئية إلى هذه الطريقة. إذا فشل ذلك، فابحث في صفحة JavaScript عن الوظائف التي تتعامل مع استجابات reCAPTCHA.

هل يمكن أن يكون reCAPTCHA غير المرئي مؤسسيًا؟

نعم. أضف كلاً من invisible=1 وenterprise=1 إلى طلبك.

لماذا لا تستجيب الصفحة بعد تنفيذ رد الاتصال؟

قد يكون اسم رد الاتصال خاطئًا، أو قد تتوقع الصفحة حقول نموذج إضافية. تحقق من اسم رد الاتصال الدقيق وتأكد من ملء جميع حقول النموذج المطلوبة قبل إطلاق رد الاتصال.


ابدأ في حل reCAPTCHA غير المرئي

احصل على مفتاح API الخاص بك علىcaptchaai.com/api.php. أضف invisible=1 إلى كود الحل v2 الخاص بك واستخدم نمط حقن رد الاتصال أعلاه.


أدلة ذات صلة

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