المرجع

مرجع طرق حقن رمز CAPTCHA

عند حلّ اختبار CAPTCHA عبر CaptchaAI تحصل على سلسلة رمزية (توكن) أو ملف تعريف ارتباط، ثم يبقى أمامك مسار واحد من مسارين لإدخال هذه النتيجة في الصفحة، ويتحدّد المسار بنوع CAPTCHA وحده:

  • حقن الرمز في حقل مخفي: تضبط قيمة الحقل النصي ثم ترسل النموذج، وهو مسار reCAPTCHA وTurnstile.
  • حقن الكوكي في الجلسة: تضع كوكي cf_clearance في جلستك ثم تعيد تحميل الصفحة، وهو مسار Cloudflare Challenge.

مثال شائع: أثناء اختبار ضمان جودة لنموذج محمي بـ Cloudflare Turnstile في منصة تجارة إلكترونية إقليمية، يعيد CaptchaAI حلًّا صحيحًا لكنّ النموذج يرفض الإرسال، والسبب غالبًا في مرحلة الحقن لا في الحل. يجمع هذا المرجع طرق الحقن حسب النوع بأمثلة في JavaScript وSelenium وPuppeteer وطلبات HTTP.


الحقن حسب نوع اختبار CAPTCHA

يحدّد نوع الاختبار ما تحصل عليه وموضع حقنه:

  • reCAPTCHA v2 وEnterprise: سلسلة رمزية تُضبط في الحقل النصي g-recaptcha-response.
  • reCAPTCHA v2 غير المرئية وv3: سلسلة رمزية في g-recaptcha-response مع استدعاء رد نداء.
  • Cloudflare Turnstile: سلسلة رمزية تُضبط في الحقل cf-turnstile-response.
  • Cloudflare Challenge: كوكي cf_clearance يوضع في كوكيز الجلسة.

reCAPTCHA v2 — الحقن في الحقل المخفي

ينشئ reCAPTCHA v2 عنصر textarea مخفيًا اسمه g-recaptcha-response؛ اضبط قيمته على الرمز الذي حلّه CaptchaAI ثم أرسل النموذج فورًا.

من داخل المتصفح: JavaScript وSelenium وPuppeteer

في وحدة تحكم المتصفح أو عبر execute_script في Selenium، اضبط قيمة الحقل ثم أظهره إن كان الموقع يتحقق من العرض:

// Set the token
document.getElementById("g-recaptcha-response").value = "SOLVED_TOKEN";

// Make it visible if needed (some sites validate display)
document.getElementById("g-recaptcha-response").style.display = "block";

والمبدأ نفسه داخل جلسة Selenium مع Python، مع إرسال النموذج بعد الحقن مباشرة:

from selenium import webdriver

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

# After solving with CaptchaAI
token = "SOLVED_TOKEN"

# Inject the token
driver.execute_script(f'''
    document.getElementById("g-recaptcha-response").value = "{token}";
''')

# Submit the form
driver.find_element("css selector", "form").submit()

وفي Node.js تمرّر الرمز إلى سياق الصفحة عبر page.evaluate ثم تنقر زر الإرسال:

const puppeteer = require("puppeteer");

const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto("https://example.com/login");

const token = "SOLVED_TOKEN";

await page.evaluate((t) => {
  document.getElementById("g-recaptcha-response").value = t;
}, token);

await page.click('button[type="submit"]');

من دون متصفح: طلب HTTP مباشر

للنماذج التي تُرسَل بطلب POST عادي، أضف الرمز حقلًا ضمن حمولة الطلب دون تشغيل متصفح، ما يجعله الخيار الأخفّ للنماذج التقليدية:

import requests

token = "SOLVED_TOKEN"

resp = requests.post("https://example.com/login", data={
    "username": "user",
    "password": "pass",
    "g-recaptcha-response": token
})

reCAPTCHA غير المرئية وv3 — الحقن عبر رد النداء

تعتمد reCAPTCHA غير المرئية والإصدار v3 غالبًا على دالة رد نداء (callback)؛ فلا يكفي ضبط الحقل النصي وحده، بل تلزم ثلاث خطوات:

  1. حدّد اسم دالة رد النداء من السمة data-callback أو من الحالة الداخلية لـ reCAPTCHA.
  2. اضبط الرمز في الحقل النصي g-recaptcha-response.
  3. شغّل الدالة يدويًا لتكتمل المعالجة ويُرسَل النموذج.
// Check for data-callback attribute
document.querySelector("[data-callback]")?.getAttribute("data-callback");

// Or search for the callback in reCAPTCHA's internal state
___grecaptcha_cfg.clients[0]?.aa?.l?.callback;

بعد معرفة الاسم، اضبط الرمز ثم شغّل الدالة سواء كان اسمها معروفًا أو مُكتشفًا تلقائيًا:

// Set the token
document.getElementById("g-recaptcha-response").value = "SOLVED_TOKEN";

// Trigger the callback
// Method 1: If callback name is known
onSubmit("SOLVED_TOKEN");

// Method 2: Find and call the callback automatically
const callback = document.querySelector("[data-callback]")?.getAttribute("data-callback");
if (callback && window[callback]) {
    window[callback]("SOLVED_TOKEN");
}
token = "SOLVED_TOKEN"

driver.execute_script(f'''
    document.getElementById("g-recaptcha-response").value = "{token}";

    // Try to find and trigger callback
    var callback = document.querySelector("[data-callback]");
    if (callback) {{
        var fn = callback.getAttribute("data-callback");
        if (window[fn]) window[fn]("{token}");
    }}
''')

reCAPTCHA — عدة أدوات على صفحة واحدة

قد تضم الصفحة أكثر من أداة reCAPTCHA، ولكل أداة عنصر g-recaptcha-response خاص بها؛ اجمعها أولًا ثم احقن الرمز في الأداة الصحيحة، وهي غالبًا الأولى:

// Find all response textareas
const textareas = document.querySelectorAll("[id^='g-recaptcha-response']");
console.log(`Found ${textareas.length} reCAPTCHA widgets`);

// Set the token on the correct widget (usually index 0)
textareas[0].value = "SOLVED_TOKEN";

أو استهدف الحقل داخل نموذج محدّد بمعرّفه لتتفادى الالتباس:

// Find the textarea inside a specific form
const form = document.querySelector("#login-form");
const textarea = form.querySelector("[name='g-recaptcha-response']");
textarea.value = "SOLVED_TOKEN";

Cloudflare Turnstile — حقن الرمز في cf-turnstile-response

يستخدم Cloudflare Turnstile الاسم cf-turnstile-response لحقله المخفي، والمبدأ نفسه: اضبط القيمة ثم أرسل النموذج. عبر JavaScript:

// Set Turnstile token
const input = document.querySelector("[name='cf-turnstile-response']");
if (input) {
    input.value = "SOLVED_TOKEN";
}

وداخل Selenium مع Python مع إرسال النموذج بعده مباشرة:

token = "SOLVED_TOKEN"

driver.execute_script(f'''
    var input = document.querySelector("[name='cf-turnstile-response']");
    if (input) input.value = "{token}";
''')
driver.find_element("css selector", "form").submit()

وللنماذج التي تُرسَل مباشرة بلا متصفح، أضف الرمز نفسه إلى حمولة طلب POST:

resp = requests.post("https://example.com/login", data={
    "username": "user",
    "password": "pass",
    "cf-turnstile-response": token
})

Cloudflare Challenge — حقن كوكي cf_clearance

تختلف Cloudflare Challenge عن سابقاتها؛ فهي تُعيد كوكي cf_clearance بدلًا من رمز نصي، ويجب أن يطابق طلبك اللاحق بيئة الحل نفسها وإلا رُفض الكوكي.

عبر مكتبة requests مع Python، احرص على مطابقة User-Agent والخادم الوسيط لما استُخدم وقت الحل:

import requests

session = requests.Session()

# Set the cookie
session.cookies.set("cf_clearance", "COOKIE_VALUE", domain=".example.com")

# MUST use same User-Agent and proxy as the solve
session.headers["User-Agent"] = "Mozilla/5.0 ..."
session.proxies = {"http": "http://user:pass@host:port", "https": "http://user:pass@host:port"}

# Now access the site
resp = session.get("https://example.com")

وداخل Selenium مع Python، أضف الكوكي ثم أعد تحميل الصفحة:

driver.get("https://example.com")

# Add the cookie
driver.add_cookie({
    "name": "cf_clearance",
    "value": "COOKIE_VALUE",
    "domain": ".example.com",
    "path": "/"
})

# Reload the page — should bypass the challenge
driver.refresh()

نافذة صلاحية الرمز

لكل نوع نافذة زمنية يبقى فيها الرمز أو الكوكي صالحًا، وبعد انتهائها يلزم إعادة الحل؛ أرسل فور الحقن دون فجوة:

  • reCAPTCHA v2 وv3: احقن وأرسل خلال 120 ثانية.
  • Cloudflare Turnstile: خلال 300 ثانية (5 دقائق).
  • كوكي Cloudflare Challenge: بين 15 و30 دقيقة.

أخطاء الحقن الشائعة

أكثر مشكلات الحقن شيوعًا وإصلاحها المباشر:

  • اسم حقل خاطئ كاستخدام g-recaptcha-response مع Turnstile: يُتجاهَل الرمز، فاستخدم cf-turnstile-response.
  • ضبط الرمز دون إرسال النموذج: لا يحدث شيء، فأرسل النموذج بعد الحقن.
  • reCAPTCHA غير مرئية بلا رد نداء: يُضبَط الرمز دون معالجة، فابحث عن الدالة وشغّلها.
  • نطاق كوكي بلا نقطة بادئة: لا يصل الكوكي للنطاقات الفرعية، فاستخدم .example.com.
  • تأخّر بين الحقن والإرسال: تنتهي صلاحية الرمز، فأرسل فورًا.

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

ما المدة التي يبقى فيها الرمز المحقون صالحًا؟

نحو 120 ثانية لـ reCAPTCHA v2 وv3، وحتى 300 ثانية لـ Turnstile، و15–30 دقيقة لكوكي Cloudflare Challenge. أرسل النموذج فور الحقن دون فجوة زمنية.

لماذا يُرفض كوكي cf_clearance رغم أنني حقنته بشكل صحيح؟

لأن Cloudflare تربط الكوكي ببصمة الجلسة؛ فيجب أن يستخدم طلبُك اللاحق نفس User-Agent ونفس الخادم الوسيط اللذين حُلّ بهما التحدي. أيّ اختلاف يُبطل الكوكي.

كيف أتعامل مع صفحة فيها أكثر من أداة reCAPTCHA؟

اجمع عناصر g-recaptcha-response عبر querySelectorAll، ثم احقن الرمز في الأداة الصحيحة — غالبًا الأولى — أو استهدف الحقل داخل النموذج المقصود بمعرّفه.

ضبطت الرمز في reCAPTCHA غير المرئية لكنّ النموذج لا يُرسَل، ما السبب؟

الأنواع غير المرئية تنتظر استدعاء دالة رد النداء؛ فضبط الحقل النصي وحده لا يكفي. حدّد اسم الدالة من السمة data-callback ثم شغّلها يدويًا ليُرسَل النموذج.


احصل على مفتاح CaptchaAI API

احصل على حلول موثوقة لرموز CAPTCHA واحقنها في نماذجك مباشرة عبر captchaai.com.


أدلة ذات صلة

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