إذا توقّف سكربت الأتمتة عند حقلٍ يطلب حاصل جمع 7 + 3، أو يسأل «ما لون العشب؟»، فأنت أمام كابتشا رياضية أو منطقية — وهي أبسط أنواع اختبارات CAPTCHA وأقدمها. طريقة التعامل معها تتفرّع إلى مسارين لا ثالث لهما: إن كانت المعادلة نصاً في صفحة HTML، فتقرأها مباشرة بتعبير regex دون أي خدمة خارجية؛ وإن كانت مضمّنة داخل صورة، فتحتاج إلى OCR لاستخراجها ثم حسابها. لا تزال هذه التحديات منتشرة على مواقع WordPress ونماذج التواصل والأنظمة القديمة، ولهذا يصادفها كل من يبني روبوتات لجمع البيانات أو يختبر النماذج آلياً.
لماذا لا تزال كابتشا الرياضيات شائعة؟
رغم ضعفها الأمني، تبقى كابتشا الرياضيات خياراً حاضراً بقوة، خصوصاً في المواقع العربية الصغيرة والمتوسطة التي تعتمد على WordPress. والأسباب واضحة:
- البساطة — لا تحتاج إلى واجهة برمجة خارجية ولا إلى أدوات JavaScript؛ تُولَّد المعادلة وتُخزَّن إجابتها على الخادم فقط.
- إضافات WordPress — إضافات مثل «Math CAPTCHA» و«Really Simple CAPTCHA» مثبّتة على نطاق واسع في مدوّنات المنطقة ومتاجرها.
- احتكاك منخفض — يحسب المستخدم «6 + 2» أسرع من تدقيق شبكة صور، وهو ما يناسب نماذج التواصل وطلبات التسعير.
- إمكانية الوصول — النسخة النصية تعمل مع برامج قراءة الشاشة، بخلاف كابتشا الصور المعتمدة على الرؤية.
- الأنظمة القديمة — تطبيقات وُلدت قبل خدمات CAPTCHA الحديثة، ولا يُراد المساس بشيفرتها.
تخيّل بوابة حجوزات حكومية أو متجراً إلكترونياً صغيراً في الخليج يعمل على قالب WordPress قديم: غالباً ستجد حقل «اكتب ناتج 14 + 5» أسفل نموذج التسجيل، لأنه أرخص وأسهل من دمج reCAPTCHA — وهذا بالضبط ما يصطدم به فريق اختبار الجودة عند أتمتة النماذج.
أنواع كابتشا الرياضيات والمنطق
تندرج هذه التحديات تحت خمسة أنماط رئيسية، وتختلف تقنية حلّها الآلي من نمط لآخر. يلخّص الجدول التالي التقنية المناسبة لكل نوع، ثم نفصّل كلاً منها بأمثلته:
| النوع | تقنية الحل الآلي |
|---|---|
| الكابتشا الحسابية الأساسية | regex للنص، أو OCR للصورة |
| الكابتشا الرياضية كصورة | OCR لاستخراج المعادلة ثم حسابها |
| الكابتشا المكتوبة بالحروف | معالجة لغة طبيعية (NLP) |
| الأسئلة المنطقية | بنك أسئلة ثابت أو نموذج لغوي |
| كابتشا التسلسل والأنماط | منطق التعرّف على الأنماط |
1. الكابتشا الحسابية الأساسية
تعرض عملية جمع أو طرح أو ضرب مباشرة. من أمثلتها الشائعة:
- «كم يساوي 3 + 5؟»
- «12 − 4 = ؟»
- «6 × 7 = ؟»
2. الكابتشا الرياضية المعروضة كصورة
تُحوَّل المعادلة إلى صورة تمنع تحليل النص المباشر. من أمثلتها:
- صورة تُظهر «14 + 23 = ؟» بخطّ مشوّه
- صورة بأرقام ملوّنة وخلفية مليئة بالضوضاء
3. الكابتشا الرياضية المكتوبة بالحروف
تُكتب الأرقام كلماتٍ بدلاً من الرموز. من أمثلتها:
- «ما ناتج سبعة زائد ثلاثة؟»
- «اكتب نتيجة اثني عشر ناقص خمسة»
4. الأسئلة المنطقية
أسئلة غير حسابية تعتمد على معرفة عامة. من أمثلتها:
- «ما لون العشب؟»
- «كم رِجلاً للكلب؟»
- «هل النار ساخنة أم باردة؟»
5. كابتشا التسلسل والأنماط
تعرض متتالية رقمية وتطلب القيمة التالية. من أمثلتها:
- «ما التالي: 2، 4، 6، 8، ؟»
- «أكمل النمط: 1، 1، 2، 3، 5، ؟»
كيف تعمل كابتشا الرياضيات تقنياً
لفهم نقطة الضعف، تابع كيف يتحقّق الخادم من الإجابة. هذا مسار النسخة النصية:
Server generates random equation (e.g., "7 + 3")
↓
Stores answer (10) in server-side session
↓
Renders equation as HTML text or image
↓
User submits answer via form field
↓
Server compares submitted answer to stored answer
↓
Match → Form submitted Mismatch → Error shown
أمّا حين تُقدَّم المعادلة كصورة، فيتغيّر المسار إلى:
Server generates random equation
↓
Renders equation into a distorted image (noise, lines, color shifts)
↓
Image served to client via <img> tag
↓
User reads image, computes answer, types in form field
↓
Server validates submitted answer
الفكرة الجوهرية: الإجابة تُخزَّن في جلسة الخادم، فأي روبوت يقرأ المعادلة — نصاً أو عبر OCR — يستطيع إعادة إرسالها بنجاح؛ ولهذا تبقى مقاومتها للروبوتات ضعيفة.
اكتشاف كابتشا الرياضيات في سكربتات الأتمتة
قبل الحل، يحتاج السكربت إلى تمييز نوع الكابتشا. الدالة التالية تفحص الصفحة بحثاً عن أنماط المعادلات النصية، وصور الكابتشا، والأسئلة المنطقية، في Python:
import requests
from bs4 import BeautifulSoup
import re
def detect_math_captcha(url):
"""Detect common math CAPTCHA patterns on a page."""
response = requests.get(url, timeout=10)
soup = BeautifulSoup(response.text, "html.parser")
html = response.text.lower()
indicators = {
"text_math": False,
"image_math": False,
"logic_question": False,
}
# Check for text-based math questions
math_patterns = [
r"what is \d+\s*[\+\-\×\*]\s*\d+",
r"\d+\s*[\+\-\×\*]\s*\d+\s*=\s*\?",
r"solve:\s*\d+",
r"type the (result|answer|sum)",
]
for pattern in math_patterns:
if re.search(pattern, html):
indicators["text_math"] = True
break
# Check for CAPTCHA images near math-related labels
captcha_images = soup.find_all("img", attrs={
"alt": re.compile(r"captcha|math|verify", re.I)
})
if captcha_images:
indicators["image_math"] = True
# Check for logic questions
logic_patterns = [
r"what color is",
r"how many legs",
r"what comes next",
r"is .+ hot or cold",
]
for pattern in logic_patterns:
if re.search(pattern, html):
indicators["logic_question"] = True
break
return indicators
result = detect_math_captcha("https://example.com/contact")
print(result)
ونفس المنطق في Node.js باستخدام axios وcheerio:
const axios = require("axios");
const cheerio = require("cheerio");
async function detectMathCaptcha(url) {
const { data: html } = await axios.get(url, { timeout: 10000 });
const $ = cheerio.load(html);
const lower = html.toLowerCase();
const indicators = {
textMath: false,
imageMath: false,
logicQuestion: false,
};
// Text-based math patterns
const mathPatterns = [
/what is \d+\s*[+\-×*]\s*\d+/,
/\d+\s*[+\-×*]\s*\d+\s*=\s*\?/,
/solve:\s*\d+/,
/type the (result|answer|sum)/,
];
for (const pattern of mathPatterns) {
if (pattern.test(lower)) {
indicators.textMath = true;
break;
}
}
// Check for CAPTCHA images
$("img").each((_, el) => {
const alt = ($(el).attr("alt") || "").toLowerCase();
if (/captcha|math|verify/.test(alt)) {
indicators.imageMath = true;
}
});
return indicators;
}
detectMathCaptcha("https://example.com/contact").then(console.log);
حل الكابتشا الصورية عبر OCR مع CaptchaAI
حين تكون المعادلة صورة، لا يكفي تعبير regex؛ تحتاج إلى OCR لاستخراج النص ثم محلّل بسيط لحساب الناتج. هنا يأتي دور خدمة مثل CaptchaAI: تُرسل الصورة إلى in.php، وتستطلع النتيجة عبر res.php، ثم تحسب الإجابة محلياً:
import requests
import time
import re
API_KEY = "YOUR_API_KEY"
CAPTCHA_IMAGE_URL = "https://example.com/captcha.png"
# Download the CAPTCHA image
image_data = requests.get(CAPTCHA_IMAGE_URL).content
# Submit to CaptchaAI OCR
import base64
b64_image = base64.b64encode(image_data).decode()
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "base64",
"body": b64_image,
"json": 1,
})
task_id = submit.json().get("request")
# Poll for result
for _ in range(30):
time.sleep(3)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY,
"action": "get",
"id": task_id,
"json": 1,
})
data = result.json()
if data.get("status") == 1:
ocr_text = data["request"] # e.g., "7 + 3"
print(f"OCR result: {ocr_text}")
# Parse and compute the answer
match = re.match(r"(\d+)\s*([+\-*/×])\s*(\d+)", ocr_text)
if match:
a, op, b = int(match.group(1)), match.group(2), int(match.group(3))
ops = {"+": a + b, "-": a - b, "*": a * b, "×": a * b, "/": a // b}
answer = ops.get(op)
print(f"Answer: {answer}")
break
elif "CAPCHA_NOT_READY" in str(data):
continue
يتكامل هذا المسار مع خطط CaptchaAI المعتمدة على الـ Threads، التي تبدأ من خطة BASIC بسعر 15 دولاراً شهرياً (5 خيوط، وحلول غير محدودة لكل خيط) — ما يجعل التكلفة ثابتة ومتوقّعة عند معالجة النماذج المتكرّرة.
كابتشا الرياضيات مقابل أنواع الكابتشا الأخرى
يوضّح الجدول التالي موقع كابتشا الرياضيات بين أنواع التحقق الشائعة:
| الميزة | كابتشا الرياضيات | reCAPTCHA v2 | hCaptcha | كابتشا السحب (Slider) |
|---|---|---|---|---|
| احتكاك المستخدم | منخفض (حساب ذهني سريع) | متوسط (اختيار صور) | متوسط (اختيار صور) | منخفض (سحبة واحدة) |
| مقاومة الروبوتات | ضعيفة جداً | عالية | عالية | متوسطة |
| إمكانية الوصول | جيدة (النسخة النصية) | ضعيفة (تعتمد على الرؤية) | ضعيفة (تعتمد على الرؤية) | ضعيفة (تعتمد على الحركة) |
| التكلفة | مجانية (استضافة ذاتية) | خطة مجانية متاحة | خطة مجانية متاحة | تختلف |
| الاستخدام الشائع | WordPress، نماذج التواصل | تسجيل الدخول والاشتراك | تسجيل الدخول والاشتراك | التجارة الإلكترونية، آسيا |
أسئلة شائعة
هل تكفي كابتشا الرياضيات لحماية نموذج تسجيل الدخول؟
لا في الغالب. النسخة النصية يقرأها أي روبوت يحلّل HTML، والنسخة الصورية يقرأها OCR ويحسبها بسهولة، فهي فعّالة فقط ضد الروبوتات البدائية جداً. لحماية صفحات تسجيل الدخول والاشتراك من الروبوتات المتقدّمة، انتقل إلى نظام سلوكي مثل reCAPTCHA أو Cloudflare Turnstile.
كيف أعرف تلقائياً إن كانت الكابتشا نصية أم صورية؟
افحص مصدر الصفحة: إن ظهرت المعادلة ضمن نص HTML قابل للتحديد فهي نصية وتُحلّ بتعبير regex؛ وإن كانت داخل وسم <img> فهي صورية وتحتاج OCR. دالة الاكتشاف أعلاه تقوم بذلك عبر فحص الأنماط النصية ووسوم الصور ذات السمات المرتبطة بالكابتشا.
هل يُسمح بحل كابتشا الرياضيات ضمن اختبارات الأتمتة والجودة؟
نعم، ما دمت تختبر نظامك أو نظاماً تملك صلاحية اختباره. حل الكابتشا لأغراض اختبار الجودة (QA) والتكامل وأتمتة سير العمل استخدام مشروع؛ الممنوع هو توظيفه في أنشطة غير مصرّح بها. التزم دائماً بشروط استخدام الموقع المستهدف.
لماذا يرفض الخادم إجابتي الحسابية الصحيحة أحياناً؟
لأن الخادم يقارن إجابتك بقيمة مخزّنة في الجلسة؛ فإذا انتهت مهلة الجلسة، أو أعاد الخادم توليد معادلة جديدة قبل الإرسال، سيرفض حتى الإجابة الصحيحة رياضياً. الحل: اقرأ المعادلة وأرسل إجابتها ضمن الجلسة نفسها ودون تأخير طويل، ولا تعِد استخدام رمز جلسة قديم.
ما البديل الأنسب لمواقع WordPress العربية؟
إن كان همّك الأول تقليل الاحتكاك مع كشف قوي، فإن Cloudflare Turnstile يعمل بصمت دون تدخّل المستخدم، وهو بديل عملي لإضافات كابتشا الرياضيات. ولمن يريد تقييماً قائماً على درجة المخاطرة، يوفّر reCAPTCHA v3 طبقة أقوى دون تعطيل تجربة الزائر.
خلاصة
كابتشا الرياضيات والمنطق أبسط أنواع التحقق وأكثرها انتشاراً في نماذج WordPress والأنظمة القديمة. النسخة النصية تُقرأ مباشرة من HTML بتعبير regex، بينما تتطلّب النسخة الصورية OCR لاستخراج المعادلة، ثم عملية حسابية بسيطة. لحل الكابتشا الصورية آلياً، استعن بـ واجهة OCR للصور من CaptchaAI لاستخراج المعادلة وحسابها. ورغم سهولة حلّها، تبقى هذه الكابتشا حاضرة بفضل بساطتها ومزايا إمكانية الوصول فيها — لكنها ليست خط الدفاع الأمثل أمام الروبوتات الجادّة.
مقالات ذات صلة
- الفرق بين GeeTest وCloudflare Turnstile
- معالجة خطأ 403 في Cloudflare Turnstile بعد تصحيح الرمز
- شرح أوضاع أداة Cloudflare Turnstile