Reference

قياس أزمنة حل CAPTCHA عبر الأنواع المختلفة باستخدام CaptchaAI

زمن الحل ليس رقمًا تجميليًا. فارق بضع ثوانٍ في كل مهمة قد يتحول إلى ساعات إضافية عندما تعمل على آلاف التحديات يوميًا. لهذا السبب تحتاج إلى قياس منظم يوضح المتوسط والقمم العليا ونسبة النجاح، لا الاكتفاء بانطباع عام عن السرعة.

يقدم هذا الدليل أرقامًا مرجعية تقريبية لكل نوع من أنواع CAPTCHA التي يدعمها CaptchaAI، إلى جانب نصوص اختبار يمكنك استخدامها لبناء Benchmarks خاصة ببيئتك.

تنبيه تحريري: الأرقام التالية تقريبية ومخصّصة لتصميم الاختبارات الداخلية، وليست التزامًا منشورًا بالأداء. استخدمها كنقطة بداية فقط، ثم قس بنفسك داخل البيئة المستهدفة.

أوقات الحل النموذجية

تعكس هذه المعايير نطاقات مرجعية تقريبية لعينة اختبار داخلية، ويُقاس الزمن من إرسال الطلب إلى استرجاع النتيجة:

نوع CAPTCHA الوسيط P90 P99 معدل القبول التقريبي
reCAPTCHA v2 12-18 ثانية 25 ثانية نحو 40 ثانية مرتفع
reCAPTCHA v2 Invisible 10-15 ثانية نحو 20 ثانية 35 ثانية مرتفع
reCAPTCHA v3 8-12 ثانية 18 ثانية 30 ثانية جيد إلى مرتفع
reCAPTCHA Enterprise 15-25 ثانية 35 ثانية نحو 50 ثانية جيد إلى مرتفع
Cloudflare Turnstile 5-10 ثوانٍ 15 ثانية 25 ثانية مرتفع جدًا
GeeTest v3 10-18 ثانية 25 ثانية نحو 40 ثانية جيد إلى مرتفع
Image/OCR 3-8 ثوانٍ 12 ثانية نحو 20 ثانية 85%+
BLS CAPTCHA 5-10 ثوانٍ 15 ثانية نحو 20 ثانية مرتفع جدًا

تختلف الأوقات والقبول الفعلي بحسب الوكيل، والمنطقة، والضغط، ونوع التحدي، وسياسة الموقع المستهدف.

ما الذي يؤثر فعليًا في زمن الحل؟

زمن وصول الشبكة

تضيف المسافة بينك وبين نقاط نهاية الواجهة وقتًا ذهابًا وإيابًا. فإذا كان زمن RTT مرتفعًا، فسيتضخم الفارق الإجمالي عبر الإرسال والاستطلاع المتكرر.

جودة الوكيل

عند استخدام الوكلاء، عادةً ما ينتج الوكلاء السكنيون حلولاً أسرع من وكلاء مراكز البيانات لأنهم يثيرون عددًا أقل من التحديات الثانوية.

تعقيد اختبار CAPTCHA

تختلف تحديات الصورة reCAPTCHA v2 في الصعوبة. يستغرق تحدي "تحديد إشارات المرور" مع الصور الباهتة وقتًا أطول من مجرد التحقق من مربع الاختيار.

استراتيجية الاستطلاع

يكشف الاستطلاع السريع، مثل كل ثانيتين، النتيجة باكرًا لكنه يرفع عدد استدعاءات الواجهة. أما الاستطلاع المحافظ، مثل كل 10 ثوانٍ، فيقلل التحميل لكنه يضيف زمن انتظار غير ضروري. لذلك يجب أن توازن بين عدد المهام، وسقف الاستهلاك، وحساسية الزمن في تطبيقك.

البرنامج النصي المعياري بايثون

# benchmark_captchaai.py
import os
import time
import statistics
import requests

API_KEY = os.environ.get("CAPTCHAAI_KEY", "YOUR_API_KEY")

def benchmark_solve(method, params, runs=10):
    """Benchmark a CAPTCHA type over multiple runs."""
    times = []
    successes = 0

    for i in range(runs):
        start = time.time()

        # Submit
        submit_params = {"key": API_KEY, "json": "1", **params}
        resp = requests.get("https://ocr.captchaai.com/in.php",
                            params=submit_params)
        result = resp.json()

        if result.get("status") != 1:
            print(f"  Run {i+1}: Submit failed - {result.get('request')}")
            continue

        task_id = result["request"]

        # Poll
        time.sleep(10)
        solved = False
        for _ in range(30):
            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:
                elapsed = time.time() - start
                times.append(elapsed)
                successes += 1
                solved = True
                print(f"  Run {i+1}: {elapsed:.1f}s")
                break
            if poll_result.get("request") != "CAPCHA_NOT_READY":
                print(f"  Run {i+1}: Error - {poll_result.get('request')}")
                break

            time.sleep(5)

        if not solved and poll_result.get("request") == "CAPCHA_NOT_READY":
            print(f"  Run {i+1}: Timeout")

    if times:
        return {
            "runs": runs,
            "successes": successes,
            "success_rate": f"{successes/runs*100:.0f}%",
            "median": f"{statistics.median(times):.1f}s",
            "p90": f"{sorted(times)[int(len(times)*0.9)]:.1f}s" if len(times) >= 10 else "N/A",
            "min": f"{min(times):.1f}s",
            "max": f"{max(times):.1f}s",
        }
    return {"error": "No successful solves"}

# Benchmark reCAPTCHA v2
print("=== reCAPTCHA v2 ===")
recaptcha_v2 = benchmark_solve("userrecaptcha", {
    "method": "userrecaptcha",
    "googlekey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
    "pageurl": "https://www.google.com/recaptcha/api2/demo",
})
print(recaptcha_v2)

# Benchmark Image/OCR
print("\n=== Image CAPTCHA ===")
# Submit a base64-encoded test image
import base64
# Use a test image for benchmarking
image_result = benchmark_solve("post", {
    "method": "base64",
    "body": "BASE64_ENCODED_CAPTCHA_IMAGE",
})
print(image_result)

JavaScript البرنامج النصي المعياري

// benchmark_captchaai.js
const axios = require('axios');

const API_KEY = process.env.CAPTCHAAI_KEY || 'YOUR_API_KEY';

async function benchmarkSolve(params, runs = 10) {
  const times = [];
  let successes = 0;

  for (let i = 0; i < runs; i++) {
    const start = Date.now();

    // Submit
    const submit = await axios.get('https://ocr.captchaai.com/in.php', {
      params: { key: API_KEY, json: '1', ...params },
    });

    if (submit.data.status !== 1) {
      console.log(`  Run ${i + 1}: Submit failed - ${submit.data.request}`);
      continue;
    }

    // Poll
    await new Promise(r => setTimeout(r, 10000));
    let solved = false;

    for (let j = 0; j < 30; j++) {
      const poll = await axios.get('https://ocr.captchaai.com/res.php', {
        params: { key: API_KEY, action: 'get', id: submit.data.request, json: '1' },
      });

      if (poll.data.status === 1) {
        const elapsed = (Date.now() - start) / 1000;
        times.push(elapsed);
        successes++;
        solved = true;
        console.log(`  Run ${i + 1}: ${elapsed.toFixed(1)}s`);
        break;
      }
      if (poll.data.request !== 'CAPCHA_NOT_READY') {
        console.log(`  Run ${i + 1}: Error - ${poll.data.request}`);
        break;
      }
      await new Promise(r => setTimeout(r, 5000));
    }

    if (!solved) console.log(`  Run ${i + 1}: Timeout`);
  }

  if (times.length === 0) return { error: 'No successful solves' };

  times.sort((a, b) => a - b);
  return {
    runs, successes,
    successRate: `${((successes / runs) * 100).toFixed(0)}%`,
    median: `${times[Math.floor(times.length / 2)].toFixed(1)}s`,
    min: `${times[0].toFixed(1)}s`,
    max: `${times[times.length - 1].toFixed(1)}s`,
  };
}

(async () => {
  console.log('=== reCAPTCHA v2 ===');
  const v2 = await benchmarkSolve({
    method: 'userrecaptcha',
    googlekey: '6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-',
    pageurl: 'https://www.google.com/recaptcha/api2/demo',
  });
  console.log(v2);

  console.log('\n=== Cloudflare Turnstile ===');
  const turnstile = await benchmarkSolve({
    method: 'turnstile',
    sitekey: 'YOUR_TURNSTILE_SITEKEY',
    pageurl: 'https://example.com',
  });
  console.log(turnstile);
})();

تفسير النتائج

متوسط مقابل P90

  • الوسيط — التجربة النموذجية. استخدم هذا لتخطيط القدرات.
  • P90 — "أسوأ حالة" لـ 9 من أصل 10 حلول. استخدم هذا لإعدادات المهلة.
  • P99 — حالة الحافة الحقيقية. قم بتعيين الحد الأقصى للمهلة أعلى من هذا.

فترات الاقتراع الأمثل

استنادًا إلى المعايير المذكورة أعلاه، قم بتكوين الاستقصاء لكل نوع اختبار CAPTCHA:

نوع التحقق الانتظار الأولي الفاصل الزمني للاستطلاع الحد الأقصى للمحاولات
Image/OCR 5 ثوانٍ 3 ثوانٍ 15
Cloudflare Turnstile 5 ثوانٍ 3 ثوانٍ 15
BLS CAPTCHA 5 ثوانٍ 3 ثوانٍ 15
reCAPTCHA v2 15 ثانية 5 ثوانٍ 20
reCAPTCHA v3 10 ثوانٍ 5 ثوانٍ 20
GeeTest v3 12 ثانية 5 ثوانٍ 20
reCAPTCHA Enterprise 15 ثانية 5 ثوانٍ 25

استكشاف الأخطاء وإصلاحها

الحالة السبب المحتمل ما الذي تراجعه
الأرقام أبطأ من المتوقع المنطقة بعيدة أو الضغط مرتفع قارن التوقيت من منطقة أخرى وكرّر الاختبار في وقت مختلف
تفاوت كبير بين تشغيل وآخر تذبذب في نوع التحدي أو في الوكلاء ثبّت العينة، وافصل الاختبارات حسب النوع والوكيل
ارتفاع P90 وP99 فقط حالات طرفية قليلة لكنها مكلفة اضبط المهلة بناءً على P90/P99 لا على الوسيط فقط
معدل القبول أقل من الجدول السياق الفعلي يختلف عن المختبر اختبر على الصفحات الفعلية نفسها بدل الاكتفاء بالعينة المرجعية

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

النقاشات (0)

لا توجد تعليقات بعد.

مقالات ذات صلة

DevOps & Scaling التوسع التلقائي لعمّال حل CAPTCHA
دليل تشغيلي لـ التوسع التلقائي لعمّال حل CAPTCHA يغطّي قرارات البنية، والاعتمادية، والمراقبة، وأنماط الأتمتة المناسبة لتشغيل Captcha AI في بيئات الإنتاج.

دليل تشغيلي لـ التوسع التلقائي لعمّال حل CAPTCHA يغطّي قرارات البنية، والاعتمادية، والمراقبة، وأنماط الأتمتة ا...

Apr 19, 2026
DevOps & Scaling نشر عمّال CaptchaAI باستخدام Ansible
دليل تشغيلي لـ نشر عمّال Captcha AI باستخدام Ansible يغطّي قرارات البنية، والاعتمادية، والمراقبة، وأنماط الأتمتة المناسبة لتشغيل Captcha AI في بيئات الإنتاج.

دليل تشغيلي لـ نشر عمّال Captcha AI باستخدام Ansible يغطّي قرارات البنية، والاعتمادية، والمراقبة، وأنماط الأتم...

Apr 17, 2026
DevOps & Scaling النشر باللونين الأزرق والأخضر للبنية الأساسية لحل اختبار CAPTCHA
دليل تشغيلي لـ النشر باللونين الأزرق والأخضر للبنية الأساسية لحل اختبار CAPTCHA يغطّي قرارات البنية، والاعتمادية، والمراقبة، وأنماط الأتمتة المناسبة لتشغيل Capt...

دليل تشغيلي لـ النشر باللونين الأزرق والأخضر للبنية الأساسية لحل اختبار CAPTCHA يغطّي قرارات البنية، والاعتماد...

Apr 25, 2026