دروس API

كيفية حلّ reCAPTCHA v2 عبر الـ API: دليل خطوة بخطوة

ما زال reCAPTCHA v2 من أكثر العقبات انتشاراً في صفحات تسجيل الدخول والتسجيل والدفع وإرسال النماذج. إذا اصطدمت أتمتتك بمربع الاختيار أو تحدّي الصور لـ reCAPTCHA v2 فيمكنك حلّه عبر الـ API في أربع خطوات: استخرج sitekey و pageurl من الصفحة، أرسلهما إلى حلّال reCAPTCHA v2 من CaptchaAI، انتظر النتيجة، ثم احقن التوكن في التدفّق المحمي.

هذا الدليل موجّه للمطوّرين الذين يحتاجون تكاملاً يعمل، وليس شرحاً نظرياً.

غير متأكّد من إصدار reCAPTCHA؟ اقرأ أولاً كيف تحدّد إصدار reCAPTCHA.


ما تحتاجه قبل البدء

المتطلّب التفاصيل
مفتاح CaptchaAI احصل عليه من captchaai.com/api.php. 32 حرفاً.
عنوان الصفحة الكامل الـ URL الذي يُحمَّل فيه ويدجت reCAPTCHA v2.
sitekey المفتاح العام لنسخة الويدجت في تلك الصفحة.
عميل HTTP requests أو axios أو fetch أو curl.
threads فعّالة يجب أن يحتوي حسابك على threads متاحة.

الخطوة 1: استخرج sitekey و pageurl

pageurl هو العنوان الكامل للصفحة التي تظهر فيها reCAPTCHA. يجب أن يبدأ بـ https://.

للحصول على sitekey ثلاث طرق:

أولاً، من الـ HTML: ابحث عن <div class="g-recaptcha" data-sitekey="...">:

<div class="g-recaptcha" data-sitekey="6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"></div>

ثانياً، من رابط الـ iframe: https://www.google.com/recaptcha/api2/anchor?ar=1&k=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&... حيث يكون البارامتر k= هو الـ sitekey.

ثالثاً، من حركة الشبكة: افتح DevTools → Network وفلتر بـ recaptcha، وستجد البارامتر k في أيّ طلب.


الخطوة 2: أرسل المهمة

import requests

API_KEY = "YOUR_API_KEY"
SITEKEY = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
PAGEURL = "https://example.com/login"

submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": SITEKEY,
    "pageurl": PAGEURL,
    "json": 1,
}).json()

assert submit["status"] == 1, submit
task_id = submit["request"]
print("task id:", task_id)

نسخة Node.js المكافئة:

const r = await fetch("https://ocr.captchaai.com/in.php", {
  method: "POST",
  headers: { "Content-Type": "application/x-www-form-urlencoded" },
  body: new URLSearchParams({
    key: API_KEY,
    method: "userrecaptcha",
    googlekey: SITEKEY,
    pageurl: PAGEURL,
    json: "1",
  }),
});
const { status, request: taskId } = await r.json();
if (status !== 1) throw new Error(taskId);

reCAPTCHA غير المرئية؟ أضف invisible=1. تفاصيل أكثر في كيف تعمل reCAPTCHA غير المرئية.


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

غالباً يستغرق حلّ reCAPTCHA v2 من 15 إلى 60 ثانية. انتظر 20 ثانية ثم استفسر كل 5 ثوانٍ.

import time

time.sleep(20)
while True:
    res = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY,
        "action": "get",
        "id": task_id,
        "json": 1,
    }).json()

    if res.get("request") == "CAPCHA_NOT_READY":
        time.sleep(5)
        continue

    if res.get("status") == 1:
        token = res["request"]
        print("token:", token[:60], "…")
        break

    raise RuntimeError(res)

التوكن المُعاد سلسلة طويلة تبدأ عادةً بـ 03AGdBq25....


الخطوة 4: احقن التوكن في الصفحة

الطريقة تختلف بحسب الموقع. الأشيع: حقل g-recaptcha-response:

document.querySelector('textarea[name="g-recaptcha-response"]').value = token;
document.querySelector("form").submit();

في Selenium:

driver.execute_script(
    "document.querySelector('[name=\"g-recaptcha-response\"]').value = arguments[0];",
    token,
)
driver.find_element(By.CSS_SELECTOR, "form").submit()

في Playwright:

await page.evaluate((t) => {
  document.querySelector('[name="g-recaptcha-response"]').value = t;
}, token);
await page.click('button[type="submit"]');

إن كان للويدجت data-callback، نادِ تلك الدالة أيضاً:

const callback = document.querySelector(".g-recaptcha").dataset.callback;
if (callback && window[callback]) window[callback](token);

مثال كامل (Python)

import time
import requests

API_KEY = "YOUR_API_KEY"
SITEKEY = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
PAGEURL = "https://example.com/login"

def solve_recaptcha_v2():
    submit = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": API_KEY, "method": "userrecaptcha",
        "googlekey": SITEKEY, "pageurl": PAGEURL, "json": 1,
    }).json()
    if submit["status"] != 1:
        raise RuntimeError(submit)
    task_id = submit["request"]

    time.sleep(20)
    for _ in range(40):
        res = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY, "action": "get", "id": task_id, "json": 1,
        }).json()
        if res.get("request") == "CAPCHA_NOT_READY":
            time.sleep(5)
            continue
        if res.get("status") == 1:
            return res["request"]
        raise RuntimeError(res)
    raise TimeoutError("solve timed out")

if __name__ == "__main__":
    token = solve_recaptcha_v2()
    print("token:", token[:80])

أخطاء شائعة وحلولها

الخطأ السبب الإجراء
ERROR_GOOGLEKEY sitekey فارغ أو خاطئ استخرج sitekey من الصفحة الحالية مجدداً
ERROR_PAGEURL pageurl مفقود أرسل عنوان الصفحة كاملاً
ERROR_ZERO_BALANCE لا threads متاحة اشحن أو انتظر
ERROR_CAPTCHA_UNSOLVABLE الموقع شدّد التحدّي أعِد المحاولة بعد ثوانٍ؛ راجع أخطاء حلّ reCAPTCHA v2 الشائعة
الموقع يرفض التوكن انتهت صلاحيته استخدمه خلال ~110 ثانية من استلامه

عندما لا يعمل شيء

  • التوكن جاهز لكنّ الموقع لا يزال يحجب — للنموذج معالج خاص. ابحث عن callback وناد عليه بدل ملء الحقل مباشرة.
  • يلزم الحفاظ على نفس البصمة — أرسل نفس الكوكيز و User-Agent التي كانت فعّالة أثناء طلب التوكن.
  • reCAPTCHA يعتمد على البروكسي — أضف proxy و proxytype ليستخدم الحلّال مجموعة عناوين IP الخاصة بك.

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

أدلة ذات صلة

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