يحتوي حل اختبار CAPTCHA على أربعة مكونات لزمن الاستجابة: إرسال الطلب، وانتظار قائمة الانتظار، وتنفيذ الحل، واسترداد الاستقصاء. لا يمكنك التحكم في وقت تنفيذ الحل، ولكن يمكنك تحسين كل شيء آخر.
زمن الاستجابة الأساسي حسب نوع اختبار CAPTCHA
| نوع التحقق | وقت الحل النموذجي | أفضل ما يمكن تحقيقه |
|---|---|---|
| Image/OCR | 2-5ث | 1-3ث |
| reCAPTCHA v2 | 15-30 ثانية | 10-20 ثانية |
| reCAPTCHA v3 | 10-20 ثانية | 8-15 ثانية |
| Cloudflare Turnstile | 10-25 ثانية | 8-15 ثانية |
| GeeTest v3 | 15-30 ثانية | 10-20 ثانية |
يعكس عمود "أفضل ما يمكن تحقيقه" ما تحصل عليه بعد تطبيق التحسينات أدناه.
1. تحسين فترات الاستطلاع
يؤدي الفاصل الزمني للاستقصاء الافتراضي البالغ 5 ثوانٍ إلى إضاعة الوقت عند اكتمال الحل بين الاستقصاءات. استخدم الاقتراع التكيفي - ابدأ بسرعة، ثم تراجع:
بايثون
import time
import requests
API_KEY = "YOUR_API_KEY"
RESULT_URL = "https://ocr.captchaai.com/res.php"
def adaptive_poll(task_id, timeout=120):
"""Start polling at 3s, increase to 5s after 4 polls."""
start = time.time()
interval = 3 # start aggressive
polls = 0
while time.time() - start < timeout:
time.sleep(interval)
polls += 1
resp = requests.get(RESULT_URL, params={
"key": API_KEY, "action": "get",
"id": task_id, "json": "1"
}).json()
if resp["status"] == 1:
elapsed = time.time() - start
print(f"Solved in {elapsed:.1f}s ({polls} polls)")
return resp["request"]
if resp["request"] != "CAPCHA_NOT_READY":
raise Exception(resp["request"])
# Back off after initial fast polls
if polls >= 4:
interval = 5
raise TimeoutError(f"Task {task_id} timed out")
JavaScript
async function adaptivePoll(taskId, apiKey, timeout = 120000) {
const start = Date.now();
let interval = 3000;
let polls = 0;
while (Date.now() - start < timeout) {
await new Promise(r => setTimeout(r, interval));
polls++;
const resp = await fetch(
`https://ocr.captchaai.com/res.php?key=${apiKey}&action=get&id=${taskId}&json=1`
);
const data = await resp.json();
if (data.status === 1) {
console.log(`Solved in ${((Date.now() - start) / 1000).toFixed(1)}s (${polls} polls)`);
return data.request;
}
if (data.request !== 'CAPCHA_NOT_READY') {
throw new Error(data.request);
}
if (polls >= 4) interval = 5000;
}
throw new Error(`Task ${taskId} timed out`);
}
يوفر من 1 إلى 4 ثوانٍ في المتوسط مقارنةً بفاصل زمني ثابت مدته 5 ثوانٍ.
2. تجمع الاتصال
أعد استخدام اتصالات HTTP بدلاً من فتح اتصالات جديدة لكل استطلاع:
بايثون
session = requests.Session()
# Use session.get() and session.post() instead of requests.get/post
# The session reuses TCP connections automatically
JavaScript (Node.js)
const { Agent } = require('http');
const axios = require('axios');
const client = axios.create({
httpAgent: new Agent({ keepAlive: true, maxSockets: 10 }),
timeout: 10000,
});
// Use client.get() and client.post() for all API calls
يوفر ~50-100 مللي ثانية لكل طلب عن طريق تخطي مصافحة TCP/TLS.
3. الجلب المسبق لاختبارات CAPTCHA
أرسل مهام CAPTCHA قبل أن تحتاج إلى الرموز المميزة. بينما تقوم أداة الكشط الخاصة بك بمعالجة الصفحة N، أرسل اختبار CAPTCHA للصفحة N+1:
from concurrent.futures import ThreadPoolExecutor
SUBMIT_URL = "https://ocr.captchaai.com/in.php"
def prefetch_submit(sitekey, page_url):
resp = session.post(SUBMIT_URL, data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": page_url,
"json": "1",
})
data = resp.json()
if data["status"] == 1:
return data["request"]
raise Exception(data["request"])
# Submit next page's CAPTCHA while processing current page
with ThreadPoolExecutor(max_workers=2) as pool:
# Submit CAPTCHA for page 2 while processing page 1
future_task = pool.submit(prefetch_submit, "6Le-SITEKEY", "https://example.com/page/2")
# Process page 1...
process_page(current_data)
# Now get the pre-submitted task ID and poll
task_id = future_task.result()
token = adaptive_poll(task_id)
يلغي وقت الانتظار الكامل عن طريق تداخل الحل مع المعالجة.
4. استخدم طريقة CAPTCHA الصحيحة
يدعم CaptchaAI أحيانًا أساليب أسرع لسيناريوهات محددة:
| السيناريو | طريقة بطيئة | بديل أسرع |
|---|---|---|
| reCAPTCHA v2 مع رد الاتصال المعروف | userrecaptcha + استطلاع |
userrecaptcha مع pingback (عنوان URL لرد الاتصال) |
| صورة نص CAPTCHA | base64 بدقة عالية |
base64 مع numeric=1 إذا كانت الأرقام فقط |
5. تخطي البروكسي عند عدم الحاجة إليه
يضيف توجيه الوكيل زمن الوصول. قم بإرسال معلمات الوكيل فقط عندما يتطلب الموقع المستهدف طلبات من عناوين IP محددة:
# Without proxy — faster for most use cases
data = {
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": page_url,
"json": "1",
}
# With proxy — only when required
data["proxy"] = "user:pass@1.2.3.4:8080"
data["proxytype"] = "HTTP"
6. استخدم عناوين URL لرد الاتصال بدلاً من الاستقصاء
قم بإزالة الاستقصاء بالكامل باستخدام المعلمة pingback:
resp = session.post(SUBMIT_URL, data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": page_url,
"json": "1",
"pingback": "https://your-server.com/captcha-callback",
})
يرسل CaptchaAI النتيجة إلى عنوان URL الخاص بك عند اكتمال الحل. ليست هناك حاجة إلى حلقة الاقتراع. هذه هي أسرع طريقة استرجاع.
7. قم بقياس التحسينات الخاصة بك
import statistics
def benchmark(solve_func, iterations=20):
times = []
for i in range(iterations):
start = time.time()
try:
solve_func()
times.append(time.time() - start)
except Exception:
pass
if times:
print(f"Samples: {len(times)}/{iterations}")
print(f"Mean: {statistics.mean(times):.1f}s")
print(f"Median: {statistics.median(times):.1f}s")
print(f"P95: {sorted(times)[int(len(times)*0.95)]:.1f}s")
print(f"Min: {min(times):.1f}s")
print(f"Max: {max(times):.1f}s")
استكشاف الأخطاء وإصلاحها
| مشكلة | السبب | إصلاح |
|---|---|---|
| زمن الاستجابة للاستطلاع لم يتغير | لا تزال تستخدم requests.get() بدون جلسة |
قم بالتبديل إلى session.get() |
| تنتهي صلاحية رموز الجلب المسبق قبل الاستخدام | تستغرق المعالجة وقتًا طويلاً | تقليل نافذة الجلب المسبق أو إرسالها إلى وقت قريب من الاستخدام |
| عنوان URL لرد الاتصال لا يتلقى أي بيانات مطلقًا | لا يمكن الوصول إلى الخادم من CaptchaAI | تأكد من عنوان URL العام، وقواعد جدار الحماية الصحيحة |
| يؤدي الاقتراع الأسرع إلى حدود المعدل | الاقتراع بقوة شديدة (< 2 ثانية) | حافظ على الحد الأدنى للفاصل الزمني عند 3 ثوانٍ |
الأسئلة الشائعة
ما هو أكبر تحسين واحد؟
الجلب المسبق. فهو يتداخل مع وقت الحل ووقت المعالجة، مما يقلل بشكل فعال من زمن الوصول المتصور إلى ما يقرب من الصفر لسير العمل المتسلسل.
هل يساعد الاستطلاع التكيفي في اختبارات CAPTCHA للصور؟
أقل من ذلك. يتم حل اختبارات CAPTCHA للصور خلال 2-5 ثوانٍ، لذلك غالبًا ما يلتقطها الاستطلاع الأول بعد 3 ثوانٍ. يكون التحسن أكثر وضوحًا بالنسبة لـ reCAPTCHA (15-30 ثانية).
احصل على أسرع حل لـ CAPTCHA مع CaptchaAI
احصل على مفتاح API الخاص بك علىcaptchaai.com.
أدلة ذات صلة
- دوران مفتاح CaptchaAI API: إدارة المفاتيح المتعددة
- تعيين نقطة نهاية API: CaptchaAI مقابل المنافسين