المقارنات

اختبار CAPTCHA النصي مقابل اختبار CAPTCHA للصور: مقارنة المطورين

الفرق الحاسم بين النوعين ليس شكل التحدي على الشاشة، بل تكلفة التعامل معه برمجيًا: CAPTCHA النصي صورة واحدة تُقرأ بمحرك OCR، بينما CAPTCHA الصور شبكة تحتاج تصنيفًا بصريًا وقد تتكرر على عدة جولات. اختيارك يحسم ثلاثة أمور معًا — قوة الحماية، احتكاك المستخدم، وبنية التكامل في سير عملك الآلي.

  • CAPTCHA النصي — رخيص في النشر، ضعيف أمنيًا اليوم، ويُقرأ آليًا بمحرك OCR واحد.
  • CAPTCHA الصور — حماية أقوى مقابل احتكاك أعلى وتكامل JavaScript أثقل.
  • التحديات غير المرئية — reCAPTCHA v3 وCloudflare Turnstile — تلغي التفاعل من الأساس.

لمن يناسب كل نوع؟

اختر CAPTCHA النصي عندما:

  • تريد حلًا مستضافًا ذاتيًا بلا مزوّد خارجي
  • لديك التزام بإمكانية الوصول ويمكنك توفير بديل صوتي
  • حركة الروبوتات منخفضة وتحتاج حاجزًا أساسيًا ضد الإرسال الآلي المتكرر
  • تفضّل ألا تخرج بيانات زوارك إلى خدمة خارجية

اختر CAPTCHA الصور عندما:

  • تحتاج حماية أقوى على نقاط دخول حساسة
  • يتعامل تطبيقك مع تسجيل الدخول أو المدفوعات
  • تقبل احتكاكًا أعلى مقابل موثوقية أعلى
  • تريد حلًا مُدارًا بتحديثات مستمرة

وإذا كانت حركة المرور لديك قابلة للتصنيف سلوكيًا دون تدخل المستخدم، فلا تختر أيًا منهما: reCAPTCHA v3 وCloudflare Turnstile يمنحان حماية مماثلة باحتكاك شبه صفري، وهو الاتجاه الذي تتحرك نحوه معظم الواجهات اليوم.

كيف يُبنى تحدي CAPTCHA النصي

يعرض CAPTCHA النصي أحرفًا وأرقامًا مشوّهة كصورة، ويكتبها المستخدم في حقل مجاور. التشويش كله يحدث على الخادم قبل عرض الصفحة، ولهذا لا يحتاج طرفًا ثالثًا.

أساليب التشويش الشائعة

الأسلوب الغرض
تحوير شكل الحرف تعطيل محركات OCR البسيطة
ضجيج الخلفية خطوط أو نقاط أو تدرجات خلف النص
تداخل الأحرف تشابك الحروف لمنع تجزئتها
عشوائية الخط خطوط وأحجام متعددة في كل تحدٍ
اختلاف الألوان عشوائية لون الحرف والخلفية

مسار التحدي حتى التحقق

Server generates random string (e.g., "X7mK9p")
    ↓
Applies distortion: warping, noise, overlap
    ↓
Renders as PNG/JPEG image
    ↓
User reads characters, types into input field
    ↓
Server compares input against stored string (case-insensitive usually)

كيف يُبنى تحدي CAPTCHA للصور

يقدّم هذا النوع شبكة صور مع مطالبة نصية، فيختار المستخدم الصور المطابقة للفئة. التحقق يجري على خادم المزوّد مقابل بيانات مصنّفة مسبقًا.

الأنماط الأربعة التي ستقابلها

النمط نص التحدي مزوّد شائع
اختيار من شبكة "حدّد المربعات التي تحتوي إشارات مرور" reCAPTCHA v2
تصنيف الصور "انقر على كل صورة تحتوي حافلة" hCaptcha
عدّ الكائنات "كم دراجة في الصورة؟" تطبيقات مخصّصة
تدوير الصورة "أدر الصورة للاتجاه الصحيح" FunCaptcha

مسار التحدي متعدد الجولات

Server selects images from a labeled dataset
    ↓
Presents 3×3 or 4×4 grid with a text prompt
    ↓
User clicks matching images
    ↓
Server validates selections against ground truth
    ↓
If fading images: new images load in place of selected ones (multi-round)

جدول المقارنة الكامل

الأرقام التالية تستند إلى بيانات مرصودة وتقارير مستخدمين. قد تختلف النتائج بحسب بيئة التشغيل والحجم والتوقيت.

البعد CAPTCHA النصي CAPTCHA الصور
مستوى الأمان منخفض — OCR الحديث يقرأ التحديات القياسية مرتفع — يتطلب تعرفًا على الكائنات
زمن الحل البشري 5–10 ثوانٍ 10–30 ثانية
معدل فشل المستخدمين 15–20% 8–15%
إمكانية الوصول ضعيفة لضعاف البصر أضعف — لا تعمل مع قارئات الشاشة
الاستخدام على الجوال متوسط — أحرف صغيرة جيد — اختيار بالنقر
صعوبة الأتمتة منخفضة — OCR يكفي مرتفعة — تصنيف متعدد الجولات
تكلفة التشغيل على موقعك مجاني — توليد على الخادم مجاني إلى مدفوع — API خارجي
متوسط تكلفة الحل لكل 1000 طلب 0.50–1.00 دولار 1.50–3.00 دولار
جمع البيانات لا شيء قد تُستخدم في تدريب نماذج تعلم الآلة — حالة reCAPTCHA
جهد التنفيذ الحد الأدنى متوسط — دمج JavaScript SDK

ملاحظة على صف التكلفة: الرقمان أعلاه متوسط السوق لخدمات مسعّرة لكل عملية حل. نموذج CaptchaAI مختلف: الفوترة لكل thread متزامن، وتبدأ الخطط من BASIC بسعر 15 دولارًا شهريًا مع 5 threads وعمليات حل غير محدودة خلال الشهر، ثم ADVANCE بسعر 90 دولارًا مع 50 thread. أي أن تكلفتك تتبع التزامن في الذروة لا الحجم.

تعرّف على النوع برمجيًا قبل بناء التكامل

لا تبنِ مسار التكامل على تخمين. افحص HTML أولًا: سكربت مزوّد معروف يعني تحديًا قائمًا على الصور، واقتران وسم img بحقل إدخال يحمل الكلمة captcha يعني غالبًا تحديًا نصيًا مستضافًا ذاتيًا.

فحص الصفحة بـ Python

import requests
from bs4 import BeautifulSoup
import re

def detect_captcha_type(url):
    """Detect whether page uses text or image CAPTCHA."""
    response = requests.get(url, timeout=10)
    soup = BeautifulSoup(response.text, "html.parser")
    html = response.text

    result = {"text_captcha": False, "image_captcha": False, "provider": None}

    # Check for reCAPTCHA (image-based)
    if "google.com/recaptcha" in html or "g-recaptcha" in html:
        result["image_captcha"] = True
        result["provider"] = "reCAPTCHA"
        return result

    # Check for hCaptcha (image-based)
    if "hcaptcha.com" in html or "h-captcha" in html:
        result["image_captcha"] = True
        result["provider"] = "hCaptcha"
        return result

    # Check for text CAPTCHA patterns
    captcha_images = soup.find_all("img", attrs={
        "src": re.compile(r"captcha", re.I)
    })
    captcha_inputs = soup.find_all("input", attrs={
        "name": re.compile(r"captcha", re.I)
    })

    if captcha_images and captcha_inputs:
        # Image with text input = text CAPTCHA
        result["text_captcha"] = True
        result["provider"] = "custom text CAPTCHA"
        return result

    # Check for FunCaptcha (image-based rotation)
    if "funcaptcha" in html.lower() or "arkoselabs" in html.lower():
        result["image_captcha"] = True
        result["provider"] = "FunCaptcha"
        return result

    return result

captcha = detect_captcha_type("https://example.com/login")
print(captcha)

الفحص نفسه بـ Node.js

const axios = require("axios");
const cheerio = require("cheerio");

async function detectCaptchaType(url) {
    const { data: html } = await axios.get(url, { timeout: 10000 });
    const $ = cheerio.load(html);

    const result = { textCaptcha: false, imageCaptcha: false, provider: null };

    // reCAPTCHA detection
    if (html.includes("google.com/recaptcha") || html.includes("g-recaptcha")) {
        result.imageCaptcha = true;
        result.provider = "reCAPTCHA";
        return result;
    }

    // hCaptcha detection
    if (html.includes("hcaptcha.com") || html.includes("h-captcha")) {
        result.imageCaptcha = true;
        result.provider = "hCaptcha";
        return result;
    }

    // Text CAPTCHA: image + input with "captcha" in name/class
    const captchaImgs = $("img[src*='captcha' i]").length;
    const captchaInputs = $("input[name*='captcha' i]").length;

    if (captchaImgs > 0 && captchaInputs > 0) {
        result.textCaptcha = true;
        result.provider = "custom text CAPTCHA";
        return result;
    }

    return result;
}

detectCaptchaType("https://example.com/login").then(console.log);

قراءة CAPTCHA النصي عبر Image OCR في CaptchaAI

CAPTCHA النصي في جوهره صورة PNG أو JPEG، فيمرّ عبر Image OCR في ثلاث خطوات — أرسل الصورة بترميز base64 إلى in.php، احتفظ بمعرّف المهمة، ثم استفسر عن النتيجة من res.php.

import requests
import base64
import time

API_KEY = "YOUR_API_KEY"

# Get the CAPTCHA image
captcha_url = "https://example.com/captcha.png"
image_data = requests.get(captcha_url).content
b64 = base64.b64encode(image_data).decode()

# Submit to CaptchaAI
submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "base64",
    "body": b64,
    "json": 1,
})
task_id = submit.json()["request"]

# Poll for result
for _ in range(30):
    time.sleep(3)
    resp = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY,
        "action": "get",
        "id": task_id,
        "json": 1,
    }).json()

    if resp.get("status") == 1:
        print(f"CAPTCHA text: {resp['request']}")
        break
  • عبر Image OCR — النص المشوّه والمعادلات الرياضية وتحديات التعرف على الأحرف.
  • مسارات الصور — reCAPTCHA v2 وv3 وEnterprise، وGrid Image، وGeeTest v3، وCloudflare Turnstile وChallenge، وBLS.
  • في مرحلة beta — CaptchaFox وFriendly Captcha وLemin.
  • خارج التغطية — hCaptcha وFunCaptcha غير مدعومَين، وGeeTest v4 معلن كقادم قريبًا لا كمتاح.

سيناريو عربي: بوابة حجز بنموذج نصي

تخيل فريقًا في الرياض أو القاهرة يشغّل اختبارات انحدار ليلية على بوابة حجز محلية تعتمد CAPTCHA نصيًا مولّدًا على الخادم، وأحيانًا بأرقام هندية (٠١٢٣) أو أحرف عربية بدل اللاتينية. ثلاثة دروس عملية:

  1. تحقّق من مجموعة المحارف أولًا — محرك OCR مضبوط على اللاتينية سيتعثر مع الأرقام الهندية، فاجمع 30–50 صورة حقيقية وقِس النتيجة عليها.
  2. اضبط التزامن على الذروة لا على المتوسط — 40 جلسة متوازية تحتاج هامشًا بـ 50 thread، بينما تحوّل 5 threads الاختبار إلى قائمة انتظار.
  3. سجّل نص التحدي والاستجابة معًا — الفرق بين خطأ قراءة وخطأ إرسال لا يتضح إلا من السجل المزدوج.

الأسئلة الشائعة

كيف أعرف نوع CAPTCHA في موقع دون فتح المتصفح؟

اطلب صفحة النموذج بـ requests أو axios وافحص HTML مباشرة. وجود google.com/recaptcha أو hcaptcha.com يعني تحديًا قائمًا على الصور، أما اقتران وسم صورة بحقل إدخال يحمل الكلمة captcha فيشير إلى تحدٍ نصي مستضاف ذاتيًا.

هل ما زال CAPTCHA النصي خيارًا مناسبًا لموقعي؟

نادرًا. محركات OCR الحديثة تقرأ التحديات القياسية بدقة تفوق 95%، والتشويش الشديد يخفضها إلى 80–85% لكنه يخفض معها قابلية القراءة البشرية بالقدر نفسه. النتيجة أن CAPTCHA النصي يعطّل مستخدمين شرعيين أكثر من الروبوتات.

كم عدد الـ threads التي أحتاجها لتشغيل نموذج نصي بحجم كبير؟

احسبها بالتزامن لا بالحجم. الـ thread الواحدة تعالج تحديًا واحدًا وتتحرر فور انتهائه. مع 10 جلسات متوازية كحد أقصى تكفي STANDARD بسعر 30 دولارًا شهريًا مع 15 thread؛ ومع 100 جلسة تنتقل إلى PREMIUM بسعر 170 دولارًا مع 100 thread. عمليات الحل غير محدودة داخل الشهر في كل الخطط.

هل يؤثر نوع CAPTCHA على تجربة المستخدم العربي تحديدًا؟

نعم، بشكل ملموس. التحديات النصية اللاتينية على واجهة عربية RTL تُربك المستخدم لأن اتجاه الكتابة يتبدّل داخل حقل الإدخال، كما أن المطالبات المصوّرة غير المترجمة ترفع معدل التخلي. شبكات الصور أسهل لغويًا لكنها أبطأ على شبكات الجوال.

لماذا يعيد الموقع التحدي نفسه رغم أن النص المُرسل صحيح؟

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

الخلاصة

CAPTCHA النصي بسيط ورخيص لكنه ضعيف أمام القراءة الآلية، وCAPTCHA الصور أصعب في الأتمتة ويمنح حماية أقوى مقابل احتكاك أعلى. عمليًا، النص يحتاج محرك OCR فقط — وهو ما تغطيه واجهة Image OCR من CaptchaAI — بينما تحتاج الصور مسارات متخصّصة مثل reCAPTCHA وGrid Image.

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

أدلة ذات صلة

التعليقات غير مفعّلة لهذا المقال.