Правительственные порталы, которые обрабатывают записи на визы, заявления на получение разрешений и подачу документов, обычно используют BLS CAPTCHA. Эти CAPTCHA защищают места для встреч с высоким спросом и отправку форм. CaptchaAI решает проблемы BLS CAPTCHA со 100% вероятностью успеха, что позволяет автоматизировать взаимодействие с этими порталами.
Где появляются BLS CAPTCHA
BLS CAPTCHA можно найти на порталах государственных услуг, в частности:
| Тип портала | Размещение капчи | Цель |
|---|---|---|
| Запись на визу | Перед выбором слота | Запретить автоматический захват встреч |
| Формы загрузки документов | Перед отправкой | Проверьте человеческое взаимодействие |
| Проверка статуса записи | Перед отображением статуса | Автоматические проверки ограничения скорости |
| Формы заявок | Перед отправкой формы | Запретить автоматическую отправку |
Характеристики BLS CAPTCHA
BLS CAPTCHA обычно представлены как:
- Проблемы на основе изображений с искаженным текстом
- Проблемы с математическими выражениями
- Задачи по индивидуальному выбору изображений
- Текстовые головоломки
Для каждого задания требуется определенный код instructions, который сообщает CaptchaAI, как обрабатывать CAPTCHA.
Решение с помощью CaptchaAI
Шаг 1. Получите изображение CAPTCHA и инструкции.
import requests
from bs4 import BeautifulSoup
import base64
session = requests.Session()
# Load the portal page
page = session.get("https://portal.example.gov/appointment")
soup = BeautifulSoup(page.text, "html.parser")
# Find the CAPTCHA image
captcha_img = soup.select_one("img#captcha-image, img.captcha")
captcha_url = captcha_img["src"]
# Download the CAPTCHA image
if captcha_url.startswith("data:"):
# Base64 encoded inline image
img_data = captcha_url.split(",")[1]
else:
# URL-referenced image
img_response = session.get(captcha_url)
img_data = base64.b64encode(img_response.content).decode()
Шаг 2. Отправьте заявку на CaptchaAI.
import time
def solve_bls_captcha(image_base64, instructions=""):
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": "YOUR_API_KEY",
"method": "base64",
"body": image_base64,
"instructions": instructions,
"json": 1
})
task_id = resp.json()["request"]
for _ in range(30):
time.sleep(3)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": "YOUR_API_KEY",
"action": "get",
"id": task_id,
"json": 1
})
data = result.json()
if data["status"] == 1:
return data["request"]
raise TimeoutError("BLS solve timed out")
# Solve
captcha_answer = solve_bls_captcha(img_data)
Шаг 3: Отправьте форму
# Find form fields
form_data = {
"captcha_response": captcha_answer,
"appointment_type": "visa",
"location": "embassy-city",
# ... other form fields
}
# Submit with the same session (cookies preserved)
result = session.post(
"https://portal.example.gov/appointment/submit",
data=form_data
)
if "success" in result.text.lower():
print("Form submitted successfully")
Шаблоны правительственных порталов
Схема 1: Многоэтапные формы
Правительственные порталы часто используют многоэтапные формы, где CAPTCHA появляется на последнем этапе:
# Step 1: Select service type
session.post(url, data={"service": "passport"})
# Step 2: Fill personal details
session.post(url, data={"name": "...", "dob": "..."})
# Step 3: Select appointment slot
session.post(url, data={"slot": "2026-04-10-09:00"})
# Step 4: Solve CAPTCHA and confirm
captcha_answer = solve_bls_captcha(get_captcha_image(session))
session.post(url, data={"captcha": captcha_answer, "confirm": "true"})
Шаблон 2. Обновление CAPTCHA при ошибке
Если ответ CAPTCHA неправильный, портал генерирует новую CAPTCHA:
max_attempts = 3
for attempt in range(max_attempts):
# Get fresh CAPTCHA for each attempt
captcha_image = get_captcha_image(session)
answer = solve_bls_captcha(captcha_image)
result = session.post(submit_url, data={"captcha": answer})
if "incorrect" not in result.text.lower():
break
print(f"Attempt {attempt + 1} — CAPTCHA refreshed, retrying")
Схема 3. Сеансы, ограниченные по времени
Правительственные порталы часто завершают сеансы по истечении определенного периода:
import time
session_start = time.time()
SESSION_TIMEOUT = 600 # 10 minutes typical
def check_session_valid():
elapsed = time.time() - session_start
if elapsed > SESSION_TIMEOUT - 60: # 1 min safety margin
print("Session expiring — refresh needed")
return False
return True
# Before CAPTCHA submission
if not check_session_valid():
# Start a fresh session
session = requests.Session()
session.get(portal_url)
session_start = time.time()
Подход к автоматизации браузера (JavaScript)
Для порталов, требующих выполнения JavaScript:
const puppeteer = require('puppeteer');
async function handleBLSPortal() {
const browser = await puppeteer.launch({ headless: false });
const page = await browser.newPage();
await page.goto('https://portal.example.gov/appointment');
// Wait for CAPTCHA to load
await page.waitForSelector('img#captcha-image');
// Get CAPTCHA image as base64
const imgBase64 = await page.evaluate(() => {
const img = document.querySelector('img#captcha-image');
const canvas = document.createElement('canvas');
canvas.width = img.naturalWidth;
canvas.height = img.naturalHeight;
const ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0);
return canvas.toDataURL('image/png').split(',')[1];
});
// Solve with CaptchaAI
const answer = await solveBLSCaptcha(imgBase64);
// Type the answer
await page.type('#captcha-input', answer);
// Submit
await page.click('#submit-button');
// Wait for result
await page.waitForNavigation();
}
Советы по управлению сеансами
Правительственные порталы строги в отношении состояния сеанса:
| Требование | Выполнение |
|---|---|
| Точно поддерживать файлы cookie | Используйте requests.Session() или постоянный контекст браузера. |
| Не превышайте лимиты ставок | Добавьте задержки между загрузками страниц (2–5 секунд). |
| Обработка токенов CSRF | Извлекайте и включайте токены CSRF в каждый POST. |
| Соблюдайте таймауты сеансов | Завершите рабочие процессы в течение тайм-аута |
| Следуйте цепочкам перенаправлений | Разрешите автоматическое перенаправление в вашем HTTP-клиенте |
Поиск неисправностей
| Проблема | Причина | Исправить |
Следующие шаги
- CaptchaAI Quickstart: ваше первое решение CAPTCHA за 5 минут
- Как решить reCAPTCHA v2 через API: пошаговое руководство
- Как решить Cloudflare Turnstile через API
- Как решить GeeTest v3 с помощью API