انخفاض معدل حل CAPTCHA فجأة لا يعني أن الخدمة قد تعطّلت؛ في الغالب يعود السبب إلى طبقة واحدة — الكود، أو الوكيل، أو الموقع المستهدف، أو الخدمة — تعزلها بقراءة رموز الأخطاء أولًا. يقدّم هذا الدليل مسارًا تشخيصيًا مرتّبًا وسكربتًا يجمع الإحصاءات قبل فتح تذكرة دعم.
شجرة قرار سريعة لتحديد السبب
Solve rate dropped
├── Is the API returning errors? → Check error codes
│ ├── ERROR_WRONG_USER_KEY → API key issue
│ ├── ERROR_ZERO_BALANCE → Balance depleted
│ ├── ERROR_NO_SLOT_AVAILABLE → Rate limiting
│ └── ERROR_CAPTCHA_UNSOLVABLE → CAPTCHA changed
├── Are tokens returned but rejected by the target site?
│ ├── Token expired before submission → Speed up injection
│ ├── Sitekey changed → Re-extract from page
│ └── Domain mismatch → Check pageurl parameter
├── Are proxies failing?
│ ├── Proxy banned by target → Rotate proxies
│ └── Proxy timeout → Check proxy health
└── Did the target site change?
├── New CAPTCHA type → Update method parameter
├── JavaScript changes → Re-analyze page
└── Rate limiting by site → Reduce frequency
سيناريو من الواقع: لاحظ فريق أتمتة بمتجر تجزئة خليجي انخفاض المعدل من 96% إلى 70% في ساعات الذروة المسائية فقط. لم يكن السبب الخدمة، بل تجاوزَ التزامنُ عددَ الـ threads في خطتهم فظهر
ERROR_NO_SLOT_AVAILABLE؛ وحلّتها ترقيةٌ إلى ADVANCE ($90 شهريًا، 50 thread) دون لمس الكود.
جدول مرجعي سريع لاستكشاف الأعطال
| السيناريو | السبب الأرجح | الإجراء الأول |
|---|---|---|
فشل كامل بأخطاء ERROR_WRONG_USER_KEY |
مفتاح API غير صالح | أعد فحص المفتاح |
| تراجع تدريجي عبر أيام | تدهور جودة الوكيل | دوّر الوكلاء |
| هبوط مفاجئ إلى 0% | تغيّر المفتاح أو الصفحة | أعد استخراج المعلمات |
| يُحَل لكن يُرفض التوكن | انتهاء الصلاحية أو عدم تطابق النطاق | راجع التوقيت وpageurl |
| ينجح بالاختبار ويفشل بالهدف | قيود خاصة بالموقع | قارن معلمات الموقعين |
الخطوة 1: افحص رموز أخطاء CaptchaAI
شغّل سكربتًا تشخيصيًا يتحقّق من الرصيد ويجمع توزيع الأخطاء عبر عدة محاولات:
# diagnose_solve_rate.py
import os
import requests
from collections import Counter
API_KEY = os.environ.get("CAPTCHAAI_KEY", "YOUR_API_KEY")
def check_balance():
"""Verify API key and balance."""
resp = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "getbalance", "json": "1",
})
result = resp.json()
print(f"Balance: {result}")
return result
def test_solve(sitekey, pageurl, runs=5):
"""Run test solves and collect error statistics."""
errors = Counter()
successes = 0
for i in range(runs):
# Submit
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": pageurl,
"json": "1",
})
result = resp.json()
if result.get("status") != 1:
errors[result.get("request", "UNKNOWN")] += 1
print(f" Run {i+1}: Submit error: {result.get('request')}")
continue
task_id = result["request"]
import time
time.sleep(15)
# Poll
for _ in range(25):
poll = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get",
"id": task_id, "json": "1",
})
poll_result = poll.json()
if poll_result.get("status") == 1:
successes += 1
print(f" Run {i+1}: Solved")
break
if poll_result.get("request") != "CAPCHA_NOT_READY":
errors[poll_result.get("request", "UNKNOWN")] += 1
print(f" Run {i+1}: Error: {poll_result.get('request')}")
break
time.sleep(5)
else:
errors["TIMEOUT"] += 1
print(f" Run {i+1}: Timeout")
print(f"\nResults: {successes}/{runs} solved")
if errors:
print(f"Errors: {dict(errors)}")
# Run diagnostics
print("=== Balance Check ===")
check_balance()
print("\n=== Test Solves ===")
test_solve("YOUR_SITEKEY", "https://your-target-site.com", runs=5)
غلبةُ ERROR_WRONG_USER_KEY أو ERROR_ZERO_BALANCE تعني مشكلة في بيانات الاعتماد أو الرصيد لا في الحل.
الخطوة 2: تأكّد من معلمات الموقع المستهدف
السبب الأكثر شيوعًا للانحدار هو تغيّر مفتاح الموقع أو بنية الصفحة.
هل تغيّر مفتاح الموقع (sitekey)؟
افتح الصفحة المستهدفة في DevTools (F12) وابحث عن:
- reCAPTCHA: السمة
data-sitekeyأو استدعاءgrecaptcha.render - Cloudflare Turnstile: السمة
data-sitekeyداخل أداة Turnstile - GeeTest: المعلمة
gtفي التهيئة
حرف واحد مختلف عن المفتاح في كودك يكفي لفشل كل الطلبات؛ انسخه كاملًا.
هل تغيّر نوع CAPTCHA؟
تنتقل بعض المواقع بين مزوّدي CAPTCHA فجأة، فيتوقف الحل حتى تحدّث method:
- reCAPTCHA v2 → reCAPTCHA v3 (غير مرئي)
- reCAPTCHA → Cloudflare Turnstile
- صورة CAPTCHA → reCAPTCHA Enterprise
الخطوة 3: قيّم صحة الوكيل (البروكسي)
تؤثّر جودة الوكيل مباشرةً في معدل الحل، خصوصًا في الأنواع المبنية على التوكن حيث تستخدم CaptchaAI وكيلك. جرّب أولًا بلا وكيل (إن كان النوع يدعم ذلك) لتعزل ما إذا كان الوكيل هو المشكلة.
| مشكلة الوكيل | العَرَض | الإصلاح |
|---|---|---|
| محظور من الهدف | حُل التوكن لكن رُفض | دوّر إلى وكلاء سكنيين |
| يُرجع أخطاء | ERROR_PROXY_NOT_FOUND |
تأكّد أنه نشط ومتاح |
| وكيل مركز بيانات مكشوف | انخفاض المعدل | بدّل إلى وكلاء سكنيين |
| عدم تطابق جغرافي | نتائج غير متّسقة | طابِق دولة الوكيل بالهدف |
الخطوة 4: راجع توقيت صلاحية التوكن
لكل توكن CAPTCHA عمر محدود؛ إذا طال مسارك بين استلامه وإدخاله تنتهي صلاحيته ويرفضه الموقع رغم نجاح الحل. الإصلاح: قِس الزمن بين getTaskResult وإرسال النموذج، وحسّنه إذا تجاوز 60 ثانية.
| نوع التحقق | عمر التوكن |
|---|---|
| reCAPTCHA v2 | ~120 ثانية |
| reCAPTCHA v3 | ~120 ثانية |
| Cloudflare Turnstile | ~300 ثانية |
| GeeTest v3 | ~60 ثانية |
الخطوة 5: حلّل توزيع الأخطاء
رتّب أخطاءك حسب التكرار للوصول إلى السبب الجذري:
| الخطأ | المعنى | الإجراء |
|---|---|---|
ERROR_CAPTCHA_UNSOLVABLE |
تحقق معقّد أو تغيّر | أبلِغ CaptchaAI وتأكّد من المفتاح |
ERROR_WRONG_CAPTCHA_ID |
معرّف مهمة خاطئ | أصلِح تتبّع المعرّف في الكود |
ERROR_ZERO_BALANCE |
نفاد الرصيد | اشحن الرصيد |
ERROR_NO_SLOT_AVAILABLE |
تجاوز التزامن | قلّل التزامن أو أضف تأخيرًا |
CAPCHA_NOT_READY (مهلة) |
حل بطيء | زِد مهلة الاستطلاع |
الخطوة 6: قارن بخط الأساس
إذا جمعت مقاييس أداء سابقًا، فقارن الحالية بخط الأساس:
| المقياس | خط الأساس | الحالي | الفرق | يستدعي التحقيق؟ |
|---|---|---|---|---|
| معدل الحل | 95% | ؟ | انخفاض > 5% | |
| متوسط وقت الحل | 15 ثانية | ؟ | زيادة > 50% | |
| معدل الأخطاء | 2% | ؟ | تجاوز > 5% | |
| قبول التوكن | 98% | ؟ | انخفاض > 3% |
الأسئلة الشائعة
كيف أفرّق بين مشكلة الموقع ومشكلة الخدمة؟
إذا عادت التوكنات محلولة لكن رفضها الموقع — قبول التوكن منخفض ومعدل الحل مرتفع — فالمشكلة في جانب الموقع. وارتفاع ERROR_CAPTCHA_UNSOLVABLE عبر عدة مفاتيح معًا يشير إلى الخدمة، ويفصل بينهما اختبارُ مفتاح معروف النجاح.
هل يعني ERROR_NO_SLOT_AVAILABLE أنني بحاجة إلى خطة أعلى؟
ليس دائمًا؛ يعني أن التزامن تجاوز عدد الـ threads، فابدأ بخفضه. وإن احتاج حجمك تزامنًا أكبر، فالانتقال من STANDARD ($30 شهريًا، 15 thread) إلى ADVANCE ($90 شهريًا، 50 thread) يرفع السقف؛ فالفوترة لكل thread متزامن مع حلول غير محدودة.
انتقل الموقع إلى hCaptcha وتوقّف الحل — ما الحل؟
الهبوط المفاجئ إلى 0% غالبًا يعني تغيّر مزوّد CAPTCHA. لاحظ أن CaptchaAI لا تحل حاليًا hCaptcha ولا FunCaptcha (Arkose Labs)، وأن دعم GeeTest v4 قادم قريبًا وليس متاحًا بعد. وإن انتقل إلى نوع مدعوم مثل Turnstile فحدّث method وأعد الاستخراج.
هل ينخفض المعدل رغم نجاح الحل في الـ API؟
نعم؛ السبب المعتاد انتهاء صلاحية التوكن. إذا بطؤ المسار بين استلامه وإرسال النموذج تنتهي صلاحيته (reCAPTCHA نحو 120 ثانية، وTurnstile نحو 300 ثانية) فيُرفض الحل الصحيح.
متى تتواصل مع الدعم
تواصل مع الدعم إذا اجتزت كل الخطوات وبقي المعدل منخفضًا، أو تجاوز ERROR_CAPTCHA_UNSOLVABLE نسبة 20% على مفاتيح كانت تعمل، أو ظهر الرصيد صحيحًا بينما تفشل الحلول، أو استمرّت المشكلة أكثر من ساعتين. وضمّن في تقريرك: نوع CAPTCHA والمفتاح، وعنوان URL، وتوزيع الأخطاء، ووقت البدء، وتعديلات الكود.