عمليًا، لا يفرّق بين BLS CAPTCHA وreCAPTCHA Grid شكلُ التحدي — فكلاهما يعرض صورًا تختارها وفق تعليمات نصية — بل طريقةُ الحل. يُحلّ reCAPTCHA عبر توكن واحد تحقنه في الصفحة دون لمس الصور، بينما يفرض BLS استخراج كل صورة وترميزها وإرسالها ثم النقر على النتائج يدويًا. هذا الفارق وحده يحسم بنية مشروعك: متصفح حقيقي، أم مجرّد طلب HTTP.
يهمّ هذا التمييز لمن يؤتمت متابعة مواعيد التأشيرات في المنطقة العربية؛ فشركة BLS International تشغّل مراكز طلبات التأشيرة المستخدمة في مصر ودول الخليج، وتظهر BLS CAPTCHA على صفحات المواعيد هناك دون غيرها، بينما تنتشر reCAPTCHA عبر ملايين المواقع حول العالم.
- BLS CAPTCHA: صور مستقلة تُحل مباشرة عبر
method=bls، وتحتاج متصفحًا لاستخراجها من الصفحة. - reCAPTCHA Grid: توكن واحد عبر
method=userrecaptcha، ويعمل دون متصفح.
الفروق الجوهرية في جدول واحد
يلخّص الجدول الفروق التقنية بين النوعين:
| الميزة | BLS CAPTCHA | reCAPTCHA Grid |
|---|---|---|
| المزوّد | BLS International (تنفيذ مخصص) | |
| التنسيق | صور منفصلة ومستقلة (3–9 صور) | صورة واحدة مقسّمة إلى شبكة (3×3 أو 4×4) |
| البلاطات الديناميكية | لا — مجموعة صور ثابتة | نعم — تظهر بلاطات جديدة بعد كل اختيار |
| التحليل السلوكي | محدود | واسع (حركة الماوس، التوقيت، عنوان IP) |
| نظام التقييم | لا يوجد | تحليل مخاطر لكل طلب |
| طريقة الـ API | method=bls |
method=userrecaptcha |
| المعاملات المطلوبة | instructions، image_base64_1..9 |
googlekey، pageurl |
| تنسيق الاستجابة | مؤشرات الصور (مثل 1,3,5) |
سلسلة توكن |
| الحل عبر توكن | لا — تُحل الصور مباشرة | نعم — يتكفّل التوكن بالشبكة داخليًا |
| الحاجة إلى متصفح | نعم (استخراج الصور من DOM) | اختياري (يعمل دون متصفح) |
| مكان الاستخدام | مواقع مواعيد تأشيرات BLS فقط | ملايين المواقع حول العالم |
| زمن الحل المعتاد | 5–15 ثانية | 10–30 ثانية |
متى تختار كل نوع
طابِق الطريقة مع نوع التحدي الذي يحمي الإجراء الفعلي. فمثلًا، فريق في القاهرة يتابع توفّر مواعيد تأشيرة عبر مركز BLS سيواجه BLS CAPTCHA على صفحة الحجز، وربما reCAPTCHA عند إرسال النموذج. وأسرع فحص: وجود data-sitekey في عنصر g-recaptcha يعني reCAPTCHA.
- متابعة موعد تأشيرة عبر BLS: استخدم
method=blsمع استخراج الصور. - أي موقع يستخدم reCAPTCHA: استخدم
method=userrecaptchaمع مفتاح الموقع. - موقع BLS يدمج reCAPTCHA: حدّد أيّهما يحمي الإجراء؛ بعض المواقع تستخدم الاثنين معًا.
- صورة مجهولة المصدر: تحقّق أولًا إن كانت تحمل هوية BLS، وإلا فجرّب reCAPTCHA أو الـ OCR.
حل BLS CAPTCHA عبر CaptchaAI
يمرّ الحل بثلاث خطوات قبل الإرسال، ثم خطوة تطبيق على الصفحة نفسها:
- استخرج نص التعليمات من الصفحة (مثل: «اختر كل الصور التي بها دراجة نارية»).
- استخرج كل صورة وحوّلها إلى base64.
- أرسل التعليمات والصور إلى CaptchaAI عبر
method=bls، ثم انقر المؤشرات المُعادة بالترتيب.
Python:
import requests
import base64
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://example-bls-site.com/appointment")
# Step 1: Extract instruction text
instruction = driver.find_element(By.CSS_SELECTOR, ".captcha-instruction").text
# Example: "Select all images with a motorcycle"
# Step 2: Extract and encode each image
images = driver.find_elements(By.CSS_SELECTOR, ".captcha-image img")
image_data = {}
for i, img in enumerate(images, 1):
# Get image source and convert to base64
src = img.get_attribute("src")
if src.startswith("data:image"):
b64 = src.split(",")[1]
else:
img_bytes = requests.get(src).content
b64 = base64.b64encode(img_bytes).decode()
image_data[f"image_base64_{i}"] = b64
# Step 3: Submit to CaptchaAI
payload = {
"key": "YOUR_API_KEY",
"method": "bls",
"instructions": instruction,
**image_data
}
resp = requests.post("https://ocr.captchaai.com/in.php", data=payload)
task_id = resp.text.split("|")[1]
# Step 4: Poll for result
for _ in range(30):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": "YOUR_API_KEY", "action": "get", "id": task_id
})
if result.text.startswith("OK|"):
indices = result.text.split("|")[1] # e.g., "1,3,5"
break
# Step 5: Click the correct images
for idx in indices.split(","):
images[int(idx) - 1].click()
time.sleep(0.3) # Small delay between clicks
Node.js:
const axios = require("axios");
const puppeteer = require("puppeteer");
(async () => {
const browser = await puppeteer.launch({ headless: "new" });
const page = await browser.newPage();
await page.goto("https://example-bls-site.com/appointment");
// Extract instruction text
const instruction = await page.$eval(
".captcha-instruction",
(el) => el.textContent,
);
// Extract images as base64
const imageElements = await page.$$(".captcha-image img");
const imageData = {};
for (let i = 0; i < imageElements.length; i++) {
const src = await imageElements[i].evaluate((el) => el.src);
let b64;
if (src.startsWith("data:image")) {
b64 = src.split(",")[1];
} else {
const resp = await axios.get(src, { responseType: "arraybuffer" });
b64 = Buffer.from(resp.data).toString("base64");
}
imageData[`image_base64_${i + 1}`] = b64;
}
// Submit to CaptchaAI
const formData = new URLSearchParams({
key: "YOUR_API_KEY",
method: "bls",
instructions: instruction,
...imageData,
});
const submitResp = await axios.post(
"https://ocr.captchaai.com/in.php",
formData.toString(),
);
const taskId = submitResp.data.split("|")[1];
// Poll for result
let indices;
for (let i = 0; i < 30; i++) {
await new Promise((r) => setTimeout(r, 5000));
const result = await axios.get("https://ocr.captchaai.com/res.php", {
params: { key: "YOUR_API_KEY", action: "get", id: taskId },
});
if (result.data.startsWith("OK|")) {
indices = result.data.split("|")[1];
break;
}
}
// Click correct images
for (const idx of indices.split(",")) {
await imageElements[parseInt(idx) - 1].click();
await new Promise((r) => setTimeout(r, 300));
}
await browser.close();
})();
حل reCAPTCHA Grid عبر CaptchaAI
الطريقة هنا أبسط ولا تحتاج استخراج أي صورة:
- استخرج
sitekeyمن عنصرg-recaptchaفي الصفحة. - أرسله مع عنوان الصفحة إلى CaptchaAI عبر
method=userrecaptchaوانتظر التوكن. - احقن التوكن في الحقل المخفي
g-recaptcha-response، أو أرسله عبر HTTP POST دون أي نقر.
Python:
import requests
import time
# Step 1: Extract sitekey from page
# <div class="g-recaptcha" data-sitekey="6Le-wvkS..."></div>
sitekey = "6Le-wvkSAAAAAPBMRTvw..."
page_url = "https://example.com/form"
# Step 2: Submit to CaptchaAI
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": "YOUR_API_KEY",
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": page_url
})
task_id = resp.text.split("|")[1]
# Step 3: Poll for token
for _ in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": "YOUR_API_KEY", "action": "get", "id": task_id
})
if result.text.startswith("OK|"):
token = result.text.split("|")[1]
break
# Step 4: Inject token (no clicking needed)
# Option A: Hidden field injection
driver.execute_script(
f'document.getElementById("g-recaptcha-response").value = "{token}";'
)
# Option B: Pure HTTP submission
requests.post(page_url, data={"g-recaptcha-response": token, "other_field": "value"})
Node.js:
const axios = require("axios");
async function solveRecaptchaGrid(sitekey, pageUrl) {
// Submit
const submitResp = await axios.get("https://ocr.captchaai.com/in.php", {
params: {
key: "YOUR_API_KEY",
method: "userrecaptcha",
googlekey: sitekey,
pageurl: pageUrl,
},
});
const taskId = submitResp.data.split("|")[1];
// Poll for token
for (let i = 0; i < 60; i++) {
await new Promise((r) => setTimeout(r, 5000));
const result = await axios.get("https://ocr.captchaai.com/res.php", {
params: { key: "YOUR_API_KEY", action: "get", id: taskId },
});
if (result.data.startsWith("OK|")) {
return result.data.split("|")[1];
}
}
throw new Error("Solve timed out");
}
أيهما أثقل في التكامل
يوضّح الجدول لماذا يستهلك BLS جهدًا برمجيًا أكبر رغم بساطة صوره:
| الجانب | BLS | reCAPTCHA Grid |
|---|---|---|
| استخراج الصور | استخراج كل صورة من DOM يدويًا | غير مطلوب — يتكفّل التوكن داخليًا |
| التعامل مع التعليمات | استخراج نص التعليمات من الصفحة | غير مطلوب |
| ترميز base64 | مطلوب لكل صورة | غير مطلوب |
| تطبيق الحل | نقر الصور وفق المؤشرات المُعادة | حقن التوكن في حقل مخفي أو HTTP POST |
| أتمتة المتصفح | إلزامية — لا بديل يعمل بلا واجهة | اختيارية — يكفي طلب HTTP |
| التعافي من الأخطاء | إعادة استخراج الصور عند الفشل | إعادة طلب التوكن عند الفشل |
| الحل المتزامن | محدود — الصور مرتبطة بجلسة المتصفح | سهل — طلبات التوكن عديمة الحالة |
| عدد أسطر الكود (تقريبًا) | 40–60 سطرًا | 15–25 سطرًا |
حل المشكلات الشائعة
عند أي سلوك غير متوقع، ابدأ من الجدول حسب نوع التحدي:
| المشكلة | الحل في BLS | الحل في reCAPTCHA |
|---|---|---|
| إجابة خاطئة | تأكّد أن نص التعليمات يطابق ما تعرضه الصفحة | تحقّق من صحة sitekey وعنوان الصفحة |
| الصور لا تُحمَّل | أضِف User-Agent وملفات تعريف الارتباط عند جلب روابط الصور |
لا ينطبق — لا صور تُجلب |
| رفض التوكن | انقر المؤشرات بالترتيب الصحيح على الصفحة | احقن التوكن في g-recaptcha-response ونفّذ الـ callback |
| الحل بطيء جدًا | قلّل عدد الصور — أرسل المرئية منها فقط | استخدم بروكسي قريبًا من الموقع المستهدف |
الأسئلة الشائعة
هل أحتاج إلى متصفح لتشغيل حل BLS CAPTCHA؟
نعم في الغالب. صور BLS مرتبطة بجلسة الصفحة، لذا تحتاج أداة مثل Selenium أو Puppeteer لاستخراجها من DOM ثم النقر على النتائج. أما reCAPTCHA فطريقة التوكن فيه تعمل عبر طلبات HTTP بحتة دون فتح متصفح.
ما أنواع الكابتشا التي يدعمها CaptchaAI فعليًا؟
يدعم CaptchaAI حلّ BLS، وعائلة reCAPTCHA v2/v3 (بما فيها Enterprise)، وCloudflare Turnstile وChallenge، وGeeTest v3، إضافة إلى صور الشبكة والـ OCR. أما hCaptcha وFunCaptcha (Arkose Labs) فغير مدعومة حاليًا، وGeeTest v4 «قيد الإضافة» ولم يتوفّر بعد. وهناك أنواع في مرحلة beta مثل CaptchaFox وFriendly Captcha وLemin.
أيهما أوفر عند التشغيل بحجم كبير؟
عمومًا يكون حل reCAPTCHA عبر التوكن أوفر عند الأحجام الكبيرة، لأن تكامله أبسط ويسمح بطلبات متزامنة عديمة الحالة، بينما يحتاج BLS جلسة متصفح لكل عملية حل. ولأن CaptchaAI يحاسب على عدد الـ threads المتزامنة لا على كل عملية — تبدأ خطة BASIC من 15 دولارًا شهريًا مقابل 5 threads — فإن التكلفة تتحدد بمدى تزامن مشروعك لا بنوع الكابتشا.
كم يستغرق حل كل نوع تقريبًا؟
تشير القياسات المعتادة إلى 5–15 ثانية لـ BLS و10–30 ثانية لـ reCAPTCHA Grid، وتتأثر بجودة الاتصال وحمل الخدمة وقرب البروكسي. تبقى أرقامًا إرشادية؛ قِس داخل بيئتك للرقم المعتمد.
هل تعمل طريقة توكن reCAPTCHA مع BLS؟
لا. BLS ليس تطبيقًا من reCAPTCHA ولا يُصدر توكنًا، بل يعتمد على صور تُحل مباشرة. استخدم method=bls مع الصور المرمّزة بصيغة base64 ونص التعليمات؛ ولن تنجح معه معاملات مثل googlekey.