يقدم كلاهما صورًا يجب على المستخدمين تحديدها بناءً على مطالبة نصية. لكن BLS CAPTCHA هو تنفيذ مخصص يُستخدم حصريًا في أنظمة تأشيرات BLS International، في حين أن reCAPTCHA هو حل Google المنتشر عالميًا. تختلف أساليب الحل ومتطلبات التكامل وطرق CaptchaAI API بشكل كبير.
المقارنة جنبا إلى جنب
| ميزة | BLS CAPTCHA | شبكة ريكابتشا |
|---|---|---|
| مزود | بي ال اس انترناشيونال (مخصص) | جوجل |
| التنسيق | صور منفصلة ومتميزة (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 CAPTCHA مع CaptchaAI
يتطلب BLS استخراج كل صورة من الصفحة، وترميزها كـ base64، وإرسالها مع نص التعليمات.
بايثون:
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 باستخدام CaptchaAI
يستخدم reCAPTCHA أسلوبًا يعتمد على الرمز المميز، ولا حاجة لاستخراج الصور.
بايثون:
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");
}
مقارنة تعقيد التكامل
| الجانب | مكتب إحصاءات العمل | شبكة ريكابتشا |
|---|---|---|
| استخراج الصورة | يجب استخراج كل صورة من DOM يدويًا | ليست هناك حاجة - يتم التعامل مع طريقة الرمز المميز داخليًا |
| التعامل مع التعليمات | يجب استخراج التعليمات النصية من الصفحة | ليست هناك حاجة |
| ترميز Base64 | مطلوب لكل صورة | ليست هناك حاجة |
| تطبيق الحل | انقر فوق الصور الفردية حسب المؤشرات التي تم إرجاعها | أدخل الرمز المميز في الحقل المخفي أو HTTP POST |
| أتمتة المتصفح | مطلوب - لا يوجد بديل مقطوع الرأس | اختياري — يمكن استخدام طلبات HTTP النقية |
| استرداد الخطأ | إعادة استخراج الصور عند الفشل | إعادة طلب الرمز المميز عند الفشل |
| الحل المتزامن | محدودة – صور مرتبطة بجلسة المتصفح | سهل - طلبات الرمز المميز عديمة الجنسية |
| أسطر التعليمات البرمجية (نموذجية) | 40-60 سطرًا | 15-25 سطرًا |
متى تستخدم أي حلال
| السيناريو | النهج الموصى به |
|---|---|
| حجز موعد تأشيرة BLS | استخدم method=bls مع استخراج الصور |
| أي موقع به reCAPTCHA | استخدم method=userrecaptcha مع مفتاح الموقع |
| موقع BLS مع reCAPTCHA المضمن | تحقق من أي واحد يحمي الإجراء — تستخدم مواقع BLS أحيانًا كليهما |
| صورة غير معروفة | تحقق مما إذا كانت تحمل علامة BLS التجارية أولاً؛ إذا لم يكن الأمر كذلك، فجرّب أساليب reCAPTCHA أو OCR |
استكشاف الأخطاء وإصلاحها
| مشكلة | إصلاح BLS | إصلاح اختبار التحقق |
|---|---|---|
| تم إرجاع الإجابة الخاطئة | تحقق من تطابق نص التعليمات مع ما تعرضه الصفحة | تحقق من صحة مفتاح الموقع وعنوان الصفحة |
| لا يتم تحميل الصور | أضف User-Agent وملفات تعريف الارتباط عند جلب عناوين URL للصور |
غير قابل للتطبيق — لا توجد صور لجلبها |
| تم رفض الرمز المميز | انقر فوق المؤشرات بالترتيب الصحيح على الصفحة | أدخل في g-recaptcha-response وقم بتنفيذ رد الاتصال |
| حل بطيء جدا | تقليل عدد الصور - إرسال الصور المرئية فقط | استخدم الوكيل بالقرب من الموقع المستهدف |
الأسئلة الشائعة
أيهما أصعب في الحل؟
يتطلب BLS مزيدًا من أعمال التكامل (استخراج الصور، وتحليل التعليمات، والنقر المستند إلى الفهرس) ولكن الصور عادة ما تكون أكثر وضوحًا وبساطة. من الأسهل دمج reCAPTCHA (طريقة الرمز المميز) ولكن تحديات Google يمكن أن تكون أكثر تعقيدًا مع المربعات الديناميكية.
هل يمكنني استخدام طريقة رمز reCAPTCHA المميز لـ BLS؟
لا، BLS ليس تطبيق reCAPTCHA. يجب عليك استخدام method=bls مع الصور الفردية المشفرة بـ base64 ونص التعليمات.
هل يستخدم كلاهما تقنية Google؟
رقم BLS CAPTCHA هو تطبيق مخصص ومملوك تم تصميمه لخدمات تأشيرات BLS International. reCAPTCHA هو منتج Google المستخدم عالميًا عبر ملايين مواقع الويب.
ما هو الحل الأكثر فعالية من حيث التكلفة على نطاق واسع؟
تعد حلول رمز reCAPTCHA أكثر فعالية من حيث التكلفة بشكل عام بالنسبة للعمليات ذات الحجم الكبير نظرًا لأن التكامل أبسط (لا توجد تكاليف إضافية لاستخراج الصور) ويمكنك تشغيل الطلبات المتزامنة عديمة الحالة. يتطلب حل BLS جلسة متصفح لكل حل.
هل يمكنني حل كلا النوعين في نفس الصفحة؟
نعم. تستخدم بعض مواقع BLS اختبار CAPTCHA المخصص للتحقق الأولي وreCAPTCHA لإرسال النموذج. اكتشف كل نوع على حدة واستخدم طريقة CaptchaAI المناسبة لكل نوع.
أدلة ذات صلة
- كيفية حل BLS CAPTCHA خطوة بخطوة- إرشادات كاملة لتكامل BLS
- كيفية حل reCAPTCHA v2 باستخدام API- أكمل البرنامج التعليمي reCAPTCHA v2
- شرح تحدي الشبكة reCAPTCHA- كيف تعمل تحديات الشبكة
- أخطاء BLS Captcha واستكشاف الأخطاء وإصلاحها- إصلاحات الأخطاء الخاصة بـ BLS
النقاشات (0)
شارك في النقاش
سجّل الدخول لمشاركة رأيك.
تسجيل الدخوللا توجد تعليقات بعد.