تنقسم معظم حالات فشل reCAPTCHA v2 إلى ثلاث مجموعات: أخطاء مرحلة الطلب (تم إرسال المعلمات الخاطئة إلى واجهة برمجة التطبيقات)، ومشكلات مرحلة النتيجة (مشكلات الاقتراع أو المهام غير القابلة للحل)، ورفض الصفحة المستهدفة (ترجع واجهة برمجة التطبيقات رمزًا مميزًا صالحًا ولكن الصفحة تتجاهله). أكبر المذنبين هم دائمًا نفس الشيء: خطأ googlekey، أو pageurl غير صحيح، أو تنفيذ رد الاتصال المفقود، أو الرموز المميزة منتهية الصلاحية.
يستعرض هذا الدليل كل نمط فشل شائع مع الإصلاح الدقيق لكل نمط. إذا كنت جديدًا في حل reCAPTCHA v2، فاقرأكيفية حل reCAPTCHA v2 باستخدام APIأولاً.
أكبر أربع نقاط فشل في reCAPTCHA v2
قبل البحث في رموز الأخطاء الفردية، تحقق منها أولاً، فهي تغطي 80% من حالات الفشل.
1. خطأ أو مفقود googlekey
يأتي googlekey (مفتاح الموقع) من سمة data-sitekey في عنصر واجهة المستخدم reCAPTCHA أو المعلمة k في عنوان URL للارتساء. إذا كانت هذه القيمة خاطئة أو فارغة أو منسوخة من صفحة مختلفة، فإن واجهة برمجة التطبيقات (API) ترفض المهمة على الفور باستخدام ERROR_GOOGLEKEY أو ERROR_WRONG_GOOGLEKEY.
كيفية العثور على مفتاح الموقع الصحيح:
# Look for data-sitekey in the page HTML
# <div class="g-recaptcha" data-sitekey="6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-"></div>
# Or find it in the anchor URL
# https://www.google.com/recaptcha/api2/anchor?k=6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-
2. خطأ pageurl
يجب أن يكون pageurl هو عنوان URL الدقيق حيث يتم تحميل أداة reCAPTCHA. إذا كانت الأداة موجودة داخل إطار iframe مستضاف على نطاق مختلف، فستحتاج إلى عنوان URL لـ iframe - وليس عنوان URL للصفحة الرئيسية. يؤدي إرسال عنوان URL الخاطئ إلى ظهور ERROR_PAGEURL أو ERROR_BAD_TOKEN_OR_PAGEURL.
3. لم يتم تنفيذ رد الاتصال
تستخدم بعض الصفحات وظيفة رد اتصال JavaScript بدلاً من حقل g-recaptcha-response المخفي. إذا قمت بإدخال الرمز المميز في الحقل المخفي ولكن الصفحة تتوقع رد اتصال، فلن يتم إرسال النموذج أبدًا. تحقق من وجود data-callback على عنصر واجهة المستخدم أو خاصية callback في grecaptcha.render().
4. انتهت صلاحية الرمز المميز أو أعيد استخدامه
رموز reCAPTCHA صالحة لاستخدام واحد فقط وتنتهي صلاحيتها بعد دقيقتين تقريبًا. إذا استغرقت عملية الأتمتة وقتًا طويلاً بين استلام الرمز المميز وإرسال النموذج، أو إذا أعادت استخدام الرمز المميز، فإن الصفحة المستهدفة ترفضه بصمت.
أخطاء مرحلة الطلب (in.php)
تحدث هذه الأخطاء عند إرسال مهمة CAPTCHA إلى https://ocr.captchaai.com/in.php.
| رمز الخطأ | السبب | إصلاح |
|---|---|---|
ERROR_WRONG_USER_KEY |
تنسيق مفتاح API غير صالح (ليس 32 حرفًا) | تحقق من مفتاح API الخاص بك علىcaptchaai.com/api.php |
ERROR_KEY_DOES_NOT_EXIST |
مفتاح API غير موجود في النظام | تأكد من نسخ المفتاح بالكامل دون مسافات إضافية |
ERROR_ZERO_BALANCE |
رصيد الحساب صفر | قم بتعبئة حسابك أو تحقق من عدد مسارات التنفيذ النشطة |
ERROR_PAGEURL |
المعلمة pageurl مفقودة |
أضف عنوان URL الكامل حيث تظهر أداة reCAPTCHA |
ERROR_GOOGLEKEY |
googlekey مشوه أو فارغ |
قم باستخراج مفتاح الموقع الصحيح من الصفحة |
ERROR_WRONG_GOOGLEKEY |
المعلمة googlekey مفقودة تمامًا |
أضف googlekey إلى طلب API الخاص بك |
ERROR_BAD_TOKEN_OR_PAGEURL |
زوج googlekey + pageurl غير صالح |
تحقق مما إذا كانت الأداة موجودة في إطار iframe؛ استخدم عنوان URL الخاص بـ iframe |
ERROR_BAD_PARAMETERS |
المعلمات المطلوبة مفقودة أو مشوهة | قم بمراجعةمستندات APIللحقول المطلوبة |
مثال: الطلب الصحيح مع معالجة الأخطاء
import requests
def submit_recaptcha_v2(api_key, sitekey, page_url):
response = requests.get("https://ocr.captchaai.com/in.php", params={
"key": api_key,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": page_url,
"json": 1
})
data = response.json()
if data.get("status") == 1:
return data["request"] # task ID
error = data.get("request", "UNKNOWN_ERROR")
if error == "ERROR_WRONG_USER_KEY":
raise ValueError("API key format is invalid. Must be 32 characters.")
elif error == "ERROR_ZERO_BALANCE":
raise RuntimeError("Account balance is zero. Top up at captchaai.com")
elif error == "ERROR_PAGEURL":
raise ValueError("pageurl parameter is missing from request")
elif error in ("ERROR_GOOGLEKEY", "ERROR_WRONG_GOOGLEKEY"):
raise ValueError(f"Invalid sitekey. Verify the data-sitekey value on the page.")
elif error == "ERROR_BAD_TOKEN_OR_PAGEURL":
raise ValueError("Sitekey/pageurl mismatch. Check if widget is in an iframe.")
else:
raise RuntimeError(f"API error: {error}")
# Usage
task_id = submit_recaptcha_v2("YOUR_API_KEY", "6Le-wvkSAAAAAN...", "https://example.com/login")
print(f"Task submitted: {task_id}")
async function submitRecaptchaV2(apiKey, sitekey, pageUrl) {
const params = new URLSearchParams({
key: apiKey,
method: "userrecaptcha",
googlekey: sitekey,
pageurl: pageUrl,
json: 1,
});
const res = await fetch(`https://ocr.captchaai.com/in.php?${params}`);
const data = await res.json();
if (data.status === 1) return data.request;
const error = data.request || "UNKNOWN_ERROR";
const fixes = {
ERROR_WRONG_USER_KEY: "API key format is invalid. Must be 32 characters.",
ERROR_ZERO_BALANCE: "Account balance is zero. Top up at captchaai.com",
ERROR_PAGEURL: "pageurl parameter is missing from request",
ERROR_GOOGLEKEY: "Invalid sitekey. Check the data-sitekey attribute.",
ERROR_BAD_TOKEN_OR_PAGEURL: "Sitekey/pageurl mismatch. Check iframe context.",
};
throw new Error(fixes[error] || `API error: ${error}`);
}
// Usage
const taskId = await submitRecaptchaV2("YOUR_API_KEY", "6Le-wvkSAAAAAN...", "https://example.com/login");
console.log(`Task submitted: ${taskId}`);
أخطاء مرحلة النتيجة (res.php)
تحدث هذه الأخطاء عند استقصاء https://ocr.captchaai.com/res.php للنتيجة.
| رمز الخطأ | السبب | إصلاح |
|---|---|---|
CAPCHA_NOT_READY |
الحل لا يزال قيد التقدم | انتظر 5 ثوان وقم بالاستطلاع مرة أخرى. هذا أمر طبيعي. |
ERROR_CAPTCHA_UNSOLVABLE |
لا يمكن حل اختبار CAPTCHA | أرسل مهمة جديدة بمعلمات جديدة |
ERROR_WRONG_ID_FORMAT |
تنسيق معرف المهمة غير صالح | تحقق من المعرف الذي تم إرجاعه من in.php |
ERROR_WRONG_CAPTCHA_ID |
معرف المهمة غير موجود | تأكد من حفظ معرف المهمة الصحيح |
ERROR_EMPTY_ACTION |
المعلمة action=get مفقودة |
أضف action=get إلى طلب الاقتراع الخاص بك |
مثال: الاقتراع مع معالجة الأخطاء بشكل صحيح
import time
import requests
def poll_result(api_key, task_id, timeout=120):
start = time.time()
while time.time() - start < timeout:
time.sleep(5)
response = requests.get("https://ocr.captchaai.com/res.php", params={
"key": api_key,
"action": "get",
"id": task_id,
"json": 1
})
data = response.json()
if data.get("status") == 1:
return data["request"] # solved token
error = data.get("request", "")
if error == "CAPCHA_NOT_READY":
continue # normal — keep waiting
elif error == "ERROR_CAPTCHA_UNSOLVABLE":
raise RuntimeError("CAPTCHA unsolvable. Submit a new task with fresh params.")
elif error in ("ERROR_WRONG_ID_FORMAT", "ERROR_WRONG_CAPTCHA_ID"):
raise ValueError(f"Invalid task ID: {task_id}")
else:
raise RuntimeError(f"Polling error: {error}")
raise TimeoutError(f"Solve timed out after {timeout}s")
# Usage
token = poll_result("YOUR_API_KEY", task_id)
print(f"Token: {token[:50]}...")
async function pollResult(apiKey, taskId, timeout = 120000) {
const start = Date.now();
while (Date.now() - start < timeout) {
await new Promise((r) => setTimeout(r, 5000));
const params = new URLSearchParams({
key: apiKey,
action: "get",
id: taskId,
json: 1,
});
const res = await fetch(`https://ocr.captchaai.com/res.php?${params}`);
const data = await res.json();
if (data.status === 1) return data.request;
if (data.request === "CAPCHA_NOT_READY") continue;
if (data.request === "ERROR_CAPTCHA_UNSOLVABLE")
throw new Error("Unsolvable. Submit a new task.");
throw new Error(`Polling error: ${data.request}`);
}
throw new Error(`Solve timed out after ${timeout / 1000}s`);
}
رفض الصفحة المستهدفة
أعادت واجهة برمجة التطبيقات (API) رمزًا مميزًا صالحًا ولكن الموقع المستهدف لا يزال يرفضه. هذه هي أصعب حالات الفشل في تصحيح الأخطاء لأن واجهة برمجة التطبيقات (API) تعتقد أن كل شيء يعمل.
تم إدخال الرمز المميز في الحقل الخطأ
تبحث بعض الصفحات عن الرمز المميز في منطقة النص g-recaptcha-response. يستخدم الآخرون grecaptcha.getResponse(). ويتوقع آخرون رد الاتصال. إذا اخترت طريقة الحقن الخاطئة، فسيفشل إرسال النموذج بصمت.
الإصلاح: فحص الصفحة لتحديد المسار المتوقع:
# Method 1: Hidden field injection
driver.execute_script(
'document.getElementById("g-recaptcha-response").innerHTML = arguments[0];',
token
)
# Method 2: Callback execution (check data-callback attribute)
driver.execute_script(f'onCaptchaSuccess("{token}");')
# Method 3: Direct form field + submit
driver.execute_script(
'document.querySelector("[name=g-recaptcha-response]").value = arguments[0];',
token
)
driver.find_element("css selector", "form").submit()
لم يتم تشغيل رد الاتصال
إذا كان عنصر واجهة المستخدم يحتوي على data-callback="onSuccess" أو يستخدم grecaptcha.render() مع خاصية callback، فإن ملء الحقل المخفي وحده لا يؤدي إلى أي شيء. يجب عليك استدعاء وظيفة رد الاتصال مباشرة.
الإصلاح: البحث عن رد الاتصال والاتصال به:
// In browser console or Puppeteer/Playwright
// Check for data-callback
const widget = document.querySelector('.g-recaptcha');
const callbackName = widget?.getAttribute('data-callback');
if (callbackName && window[callbackName]) {
window[callbackName](token);
}
انتهت صلاحية الرمز المميز
إذا مر أكثر من دقيقتين تقريبًا بين استلام الرمز المميز وإرسال النموذج، فإن Google ترفضه. وهذا أمر شائع في خطوط أنابيب الأتمتة البطيئة.
الإصلاح: أرسل النموذج فورًا بعد استلام الرمز المميز. إذا كان المسار الخاص بك بطيئًا، فاطلب الحل بالقرب من خطوة الإرسال بدلاً من البداية.
القطعة موجودة في إطار iframe
إذا تم تحميل reCAPTCHA داخل iframe من نطاق مختلف، فيجب عليك استخدام عنوان URL لمصدر iframe كـ pageurl، وليس عنوان URL للصفحة الأصلية. عادةً ما يشير الخطأ ERROR_BAD_TOKEN_OR_PAGEURL إلى هذه المشكلة.
الإصلاح: افحص الصفحة، وابحث عن إطار iframe الذي يحتوي على reCAPTCHA، واستخدم عنوان URL src الخاص بـ iframe باعتباره pageurl.
قائمة مرجعية للتشخيص السريع
| أعراض | أول شيء للتحقق |
|---|---|
ERROR_GOOGLEKEY أو ERROR_WRONG_GOOGLEKEY |
هل تم نسخ مفتاح الموقع بشكل صحيح من data-sitekey؟ |
ERROR_PAGEURL |
هل قمت بتضمين عنوان URL الكامل للصفحة؟ |
ERROR_BAD_TOKEN_OR_PAGEURL |
هل القطعة داخل إطار iframe؟ استخدم عنوان URL لإطار iframe. |
CAPCHA_NOT_READY لأكثر من 3 دقائق |
عادي للتحديات الصعبة. زيادة المهلة إلى 180 ثانية. |
ERROR_CAPTCHA_UNSOLVABLE |
إرسال مهمة جديدة. في حالة التكرار، تحقق من مفتاح الموقع + عنوان URL للصفحة. |
| يعمل الرمز المميز ولكن الصفحة لا تفعل شيئًا | تحقق من وجود data-callback. استدعاء وظيفة رد الاتصال. |
| يعود الرمز ولكن النموذج لا يزال فاشلاً | قد تكون صلاحية الرمز المميز (> 2 دقيقة). إرسال أسرع. |
| أعطال متقطعة | أضف منطق إعادة المحاولة بمعرفات المهام الجديدة. |
الأسئلة الشائعة
لماذا يفشل reCAPTCHA v2 حتى عندما يبدو الطلب صحيحًا؟
الأسباب الثلاثة الأكثر شيوعًا هي: (1) عدم تطابق pageurl مع سياق الأداة الفعلي - خاصة عندما تكون الأداة داخل iframe، (2) تتوقع الصفحة وظيفة رد اتصال ولكنك ملأت الحقل المخفي فقط، أو (3) انتهت صلاحية الرمز المميز قبل إرسال النموذج.
ما هو الخطأ الأكثر شيوعًا في حل reCAPTCHA v2؟
استخدام googlekey الخاطئ أو pageurl الخاطئ. يعد هذا أمرًا شائعًا بشكل خاص عند تحميل أداة reCAPTCHA في إطار iframe على نطاق أو نطاق فرعي مختلف - يجب أن يتطابق مفتاح الموقع وعنوان URL مع سياق iframe، وليس الصفحة الأصلية.
ماذا يعني CAPCHA_NOT_READY؟
وهذا يعني أن اختبار CAPTCHA لا يزال قيد الحل. هذا ليس خطأ. انتظر 5 ثوان وقم باستطلاع res.php مرة أخرى. تتراوح أوقات حل reCAPTCHA v2 النموذجية بين 15 و60 ثانية.
ماذا علي أن أفعل إذا قامت واجهة برمجة التطبيقات (API) بإرجاع رمز مميز ولكن الصفحة لا تزال ترفضه؟
تحقق من ثلاثة أشياء بالترتيب: (1) هل تستخدم الصفحة رد اتصال؟ ابحث عن data-callback على القطعة. (2) هل pageurl صحيح - خاصة إذا كانت الأداة موجودة في إطار iframe؟ (3) هل مر أكثر من دقيقتين بين استلام الرمز واستخدامه؟
كيف أتعامل مع ERROR_CAPTCHA_UNSOLVABLE؟
أرسل مهمة جديدة بمعلمات جديدة. لا تقم بإعادة المحاولة باستخدام نفس معرف المهمة. إذا حدث هذا الخطأ بشكل متكرر، فتأكد من تطابق مفتاح الموقع وعنوان URL للصفحة الفعلية وأن نوع CAPTCHA هو reCAPTCHA v2 القياسي (وليس Enterprise - والذي يتطلب معلمات مختلفة).
أصلح سير عمل reCAPTCHA v2
- التحقق من مدخلاتك — استخرج
googlekeyمنdata-sitekeyواستخدم عنوان URL الدقيق للصفحة (تحقق من إطارات iframe) - تحقق من طريقة الإدخال — حدد ما إذا كانت الصفحة تتوقع حقلاً مخفيًا أو رد اتصال أو كليهما
- أرسل فورًا — استخدم الرمز خلال دقيقتين من استلامه
- إضافة معالجة للأخطاء — استخدم أمثلة التعليمات البرمجية أعلاه للتعرف على كل أنواع الأخطاء ومعالجتها
ابدأ في حل reCAPTCHA v2 باستخدامCaptchaAI . احصل على مفتاح API الخاص بك منcaptchaai.com/api.php.