Короткий ответ: если перед вами BLS CAPTCHA, изображения придётся вытаскивать из DOM и решать напрямую через method=bls; если это reCAPTCHA Grid — сетку решает токен, и браузер вообще не обязателен (method=userrecaptcha). Обе капчи показывают картинки под текстовую подсказку, поэтому визуально их легко перепутать. Но BLS CAPTCHA — это собственная реализация BLS International, встроенная только в визовые системы записи, а reCAPTCHA — глобальный продукт Google. Отсюда и расходятся способ решения, объём интеграции и методы API в CaptchaAI.
Ключевые различия
Три вещи определяют всю интеграцию:
- Формат. BLS отдаёт набор отдельных изображений (3–9 штук); reCAPTCHA — одну картинку, разбитую на сетку 3×3 или 4×4.
- Способ решения. BLS решается по индексам изображений, reCAPTCHA — через строку токена.
- Нужен ли браузер. BLS привязан к сессии страницы, поэтому браузер обязателен; reCAPTCHA Grid работает и по чистому HTTP.
Полная картина — ниже.
| Характеристика | 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 вы сами извлекаете, кодируете и кликаете, а reCAPTCHA возвращает токен.
| Аспект | BLS | reCAPTCHA Grid |
|---|---|---|
| Извлечение изображений | Каждое достаётся из DOM вручную | Не нужно — метод токена делает сам |
| Работа с инструкцией | Нужно снять текст подсказки | Не нужно |
| Кодирование в Base64 | Обязательно для каждого изображения | Не нужно |
| Применение решения | Клик по индексам в нужном порядке | Подстановка токена или HTTP POST |
| Автоматизация браузера | Обязательна — headless-альтернативы нет | Необязательна |
| Восстановление после ошибки | Повторно извлечь изображения | Повторно запросить токен |
| Параллельное решение | Ограниченно — привязка к сессии браузера | Легко — запросы токена без состояния |
| Строк кода (типично) | 40–60 | 15–25 |
Итог: интеграция BLS обычно втрое длиннее.
Как решить BLS CAPTCHA через CaptchaAI
Для BLS нужно достать каждое изображение со страницы, закодировать его в base64 и отправить вместе с текстом инструкции.
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
Здесь подход основан на токене — извлекать изображения не нужно.
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 —
method=blsс извлечением изображений. - Любой сайт с reCAPTCHA —
method=userrecaptchaс sitekey. - Портал BLS со встроенной reCAPTCHA — проверьте, что именно защищает действие: на сайтах BLS иногда стоят обе капчи.
- Неизвестная капча из картинок — сначала ищите фирменную вёрстку BLS; если её нет, пробуйте reCAPTCHA или OCR.
Пример: стоимость при параллельном тестировании
Представьте агентство: оно прогоняет QA по нескольким staging-копиям визовых порталов и тестирует формы с reCAPTCHA Grid. Тарификация CaptchaAI считается по потокам, а не по числу решений: тариф BASIC ($15/мес, 5 потоков) даёт пять одновременных решений, а число решений на поток внутри месяца не ограничено. Токены reCAPTCHA не имеют состояния и занимают потоки пачками, тогда как BLS держит поток дольше. Под ощутимый параллельный BLS-трафик разумнее взять STANDARD ($30/мес, 15 потоков) — отдельной платы за решение здесь нет. Цены указаны в долларах.
Диагностика частых проблем
| Проблема | Что делать с BLS | Что делать с reCAPTCHA |
|---|---|---|
| Вернулся неверный ответ | Сверьте текст инструкции с тем, что показано на странице | Проверьте, что sitekey и pageurl верны |
| Изображения не грузятся | Передайте User-Agent и cookie при загрузке URL картинок |
Неприменимо — изображений для загрузки нет |
| Токен отклонён | Кликайте по индексам в правильном порядке | Подставьте токен в g-recaptcha-response и выполните обратный вызов |
| Решение идёт слишком медленно | Отправляйте только видимые изображения | Возьмите прокси ближе к целевому сайту |
Часто задаваемые вопросы
Короткие ответы на частые вопросы по выбору метода.
Поддерживает ли CaptchaAI и BLS CAPTCHA, и reCAPTCHA Grid?
Да. Обе — общедоступные типы: BLS решается методом bls, а сетка reCAPTCHA — методом userrecaptcha. Методы и параметры разные, но оба доступны по одному API-ключу.
Почему BLS требует браузер, а reCAPTCHA Grid — нет?
BLS отдаёт сами изображения, привязанные к сессии страницы: их нужно достать из DOM и кликнуть по индексам. reCAPTCHA работает через токен — вы отправляете googlekey и pageurl, получаете строку и подставляете её, так что браузер не обязателен.
Сколько потоков нужно для параллельного решения?
Один поток — это одно решение «в полёте». Токены reCAPTCHA освобождают поток быстро, поэтому пяти потоков BASIC часто хватает; BLS держит поток дольше из-за сессии браузера, так что под BLS-нагрузку берите тариф с большим числом потоков.
Как понять, какая капча стоит на странице портала BLS?
Смотрите разметку: у BLS обычно свой контейнер .captcha-image с отдельными тегами img, а у reCAPTCHA — блок g-recaptcha с data-sitekey. Порталы BLS иногда ставят капчу на входе и reCAPTCHA при отправке формы — проверяйте оба этапа.
Что делать, если решение BLS возвращает неверные индексы?
Чаще всего расходится текст инструкции: убедитесь, что сняли ровно ту подсказку, которую видит пользователь, и что порядок изображений в DOM совпадает с порядком отправки. Отправляйте только видимые изображения и кликайте строго по возвращённым индексам.
Связанные материалы
- Как решить BLS CAPTCHA шаг за шагом — полный разбор интеграции BLS
- Как решить reCAPTCHA v2 через API — подробное руководство по reCAPTCHA v2
- Как устроена сетка reCAPTCHA — принцип работы grid-задач
- Ошибки BLS CAPTCHA и их устранение — разбор типичных ошибок BLS