ما زال 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 الخاصة بك.
الخطوات التالية
- البدء السريع مع CaptchaAI: حلّ أول كابتشا في 5 دقائق
- كيفية تحديد إصدار reCAPTCHA
- كيفية حل Cloudflare Turnstile باستخدام واجهة API
- الأخطاء الشائعة عند حل reCAPTCHA v2 وإصلاحها