Текстовые CAPTCHA просят пользователей вводить искаженные буквы и цифры. Image CAPTCHA просит пользователей выбрать конкретные объекты на фотографиях (светофоры, пешеходные переходы, автобусы). Оба нацелены на блокировку ботов, но они различаются по уровню безопасности, пользовательскому опыту, доступности и сложности автоматизации. Такое сравнение помогает разработчикам понять, с каким типом они сталкиваются и как каждый из них интегрируется в их рабочий процесс.
Как работают текстовые CAPTCHA
Текстовые CAPTCHA отображают искаженные символы в виде изображений. Пользователь читает символы и вводит их в текстовое поле.
Общие методы текстовой CAPTCHA
| Техника | Цель |
|---|---|
| Деформация персонажа | Сгибает буквы, чтобы предотвратить простое распознавание символов |
| Фоновый шум | Добавляет линии, точки или цветовые градиенты за текстом. |
| Перекрытие символов | Перекрывает соседние буквы, чтобы предотвратить сегментацию. |
| Рандомизация шрифтов | Использует несколько шрифтов и размеров для каждого задания. |
| Цветовая вариация | Рандомизирует цвета символов и фона |
Текстовый поток CAPTCHA
Server generates random string (e.g., "X7mK9p")
↓
Applies distortion: warping, noise, overlap
↓
Renders as PNG/JPEG image
↓
User reads characters, types into input field
↓
Server compares input against stored string (case-insensitive usually)
Как работают CAPTCHA для изображений
Image CAPTCHA представляет собой сетку фотографий и просит пользователя выбрать изображения, соответствующие категории.
Распространенные типы CAPTCHA для изображений
| Тип | Испытание | Поставщик |
|---|---|---|
| Выбор сетки | «Выделить все квадраты со светофорами» | reCAPTCHA v2 |
| Маркировка изображения | «Нажмите на все изображения, содержащие автобус» | hCaptcha |
| Подсчет объектов | «Сколько велосипедов на этом изображении?» | Обычай |
| Вращение | «Повернуть изображение в правильную ориентацию» | FunCaptcha |
Схема CAPTCHA для изображений
Server selects images from a labeled dataset
↓
Presents 3×3 or 4×4 grid with a text prompt
↓
User clicks matching images
↓
Server validates selections against ground truth
↓
If fading images: new images load in place of selected ones (multi-round)
Прямое сравнение
| Измерение | Текстовая капча | Капча изображения |
|---|---|---|
| Уровень безопасности | Низкий — современное оптическое распознавание текста решает более 95 % | Высокий — требует распознавания объектов |
| Время решения пользователя | 5-10 секунд | 10-30 секунд |
| Процент отказов (люди) | 15-20% | 8-15% |
| Доступность | Плохо для слабовидящих | Очень плохо для слабовидящих |
| Удобство для мобильных устройств | Умеренный (мелкие символы) | Хорошо (выбор на основе касания) |
| Сложность автоматизации | Легко (OCR) | Жесткий (классификация изображений) |
| Стоимость развертывания | Бесплатно (самостоятельно размещено) | Бесплатное или платное (сторонний API) |
| Стоимость контролируемая проверка бота | 0,50–1,00 доллара США за 1000 | 1,50–3,00 доллара США за 1000 |
| Сбор данных | Никто | Может обучать модели ML (reCAPTCHA) |
| Усилия по реализации | Минимальный (генерация образа на стороне сервера) | Умеренный (интеграция JavaScript SDK) |
Обнаружение текстовых и графических CAPTCHA
Обнаружение Python
import requests
from bs4 import BeautifulSoup
import re
def detect_captcha_type(url):
"""Detect whether page uses text or image CAPTCHA."""
response = requests.get(url, timeout=10)
soup = BeautifulSoup(response.text, "html.parser")
html = response.text
result = {"text_captcha": False, "image_captcha": False, "provider": None}
# Check for reCAPTCHA (image-based)
if "google.com/recaptcha" in html or "g-recaptcha" in html:
result["image_captcha"] = True
result["provider"] = "reCAPTCHA"
return result
# Check for hCaptcha (image-based)
if "hcaptcha.com" in html or "h-captcha" in html:
result["image_captcha"] = True
result["provider"] = "hCaptcha"
return result
# Check for text CAPTCHA patterns
captcha_images = soup.find_all("img", attrs={
"src": re.compile(r"captcha", re.I)
})
captcha_inputs = soup.find_all("input", attrs={
"name": re.compile(r"captcha", re.I)
})
if captcha_images and captcha_inputs:
# Image with text input = text CAPTCHA
result["text_captcha"] = True
result["provider"] = "custom text CAPTCHA"
return result
# Check for FunCaptcha (image-based rotation)
if "funcaptcha" in html.lower() or "arkoselabs" in html.lower():
result["image_captcha"] = True
result["provider"] = "FunCaptcha"
return result
return result
captcha = detect_captcha_type("https://https://staging.example.com/qa-login")
print(captcha)
Обнаружение Node.js
const axios = require("axios");
const cheerio = require("cheerio");
async function detectCaptchaType(url) {
const { data: html } = await axios.get(url, { timeout: 10000 });
const $ = cheerio.load(html);
const result = { textCaptcha: false, imageCaptcha: false, provider: null };
// reCAPTCHA detection
if (html.includes("google.com/recaptcha") || html.includes("g-recaptcha")) {
result.imageCaptcha = true;
result.provider = "reCAPTCHA";
return result;
}
// hCaptcha detection
if (html.includes("hcaptcha.com") || html.includes("h-captcha")) {
result.imageCaptcha = true;
result.provider = "hCaptcha";
return result;
}
// Text CAPTCHA: image + input with "captcha" in name/class
const captchaImgs = $("img[src*='captcha' i]").length;
const captchaInputs = $("input[name*='captcha' i]").length;
if (captchaImgs > 0 && captchaInputs > 0) {
result.textCaptcha = true;
result.provider = "custom text CAPTCHA";
return result;
}
return result;
}
detectCaptchaType("https://https://staging.example.com/qa-login").then(console.log);
Решение текстовых CAPTCHA с помощью CaptchaAI
Текстовые CAPTCHA по своей сути основаны на изображениях — искаженный текст отображается в формате PNG или JPEG. API OCR изображений CaptchaAI обрабатывает их напрямую.
import requests
import base64
import time
API_KEY = "YOUR_API_KEY"
# Get the CAPTCHA image
captcha_url = "https://example.com/captcha.png"
image_data = requests.get(captcha_url).content
b64 = base64.b64encode(image_data).decode()
# Submit to CaptchaAI
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "base64",
"body": b64,
"json": 1,
})
task_id = submit.json()["request"]
# Poll for result
for _ in range(30):
time.sleep(3)
resp = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY,
"action": "get",
"id": task_id,
"json": 1,
}).json()
if resp.get("status") == 1:
print(f"CAPTCHA text: {resp['request']}")
break
CaptchaAI поддерживает более 27 500 типов CAPTCHA для изображений, включая искаженный текст, математические уравнения и задачи распознавания символов.
Когда использовать какой тип CAPTCHA
Выбирайте текстовые CAPTCHA, когда:
- Вам нужно автономное решение с нулевой зависимостью.
- У вашей пользовательской базы есть требования к доступности (текстовые CAPTCHA могут иметь аудио-альтернативы)
- Трафик ботов низкий, и вам нужна базовая защита от спама.
- Вы хотите избежать сбора данных третьими лицами
Выбирайте CAPTCHA для изображений, когда:
- Вам нужна надежная защита от ботов
- Ваше приложение обрабатывает конфиденциальные данные (логин, платежи)
- Вы можете принять более высокое сопротивление пользователей
- Вам нужно управляемое решение с непрерывными обновлениями
Не выбирайте ни того, ни другого, когда:
- Невидимые CAPTCHA (reCAPTCHA v3, Cloudflare Turnstile) могут обрабатывать ваш трафик без какого-либо взаимодействия с пользователем.
Часто задаваемые вопросы
Какой тип CAPTCHA более доступен?
Ни один из типов не является по-настоящему доступным. Текстовые CAPTCHA сложны для пользователей с нарушениями зрения, если не предоставлена альтернатива аудио. Изображение CAPTCHA хуже — задачи выбора сетки непригодны для программ чтения с экрана. Невидимые CAPTCHA (reCAPTCHA v3, Cloudflare Turnstile) являются наиболее доступным вариантом, поскольку они не требуют взаимодействия с пользователем.
Будут ли текстовые CAPTCHA эффективны в 2025 году?
Нет. Современные системы оптического распознавания символов решают стандартные текстовые CAPTCHA с точностью более 95%. Сильно искаженный текст CAPTCHA может снизить это значение до 80-85%, но за счет удобочитаемости для человека. Текстовые CAPTCHA теперь блокируют больше законных пользователей, чем ботов.
Какой тип проблемы дешевле решить с помощью API?
Текстовые CAPTCHA контролируемая проверка дешевле. Решение на основе оптического распознавания символов стоит примерно 0,50–1,00 доллара США за 1000 решений. Изображения CAPTCHA (reCAPTCHA, hCaptcha) стоят 1,50–3,00 доллара за 1000 решений, поскольку требуют более сложной обработки.
Может ли CaptchaAI решать как текстовые, так и графические CAPTCHA?
Да. CaptchaAI решает текстовые CAPTCHA с помощью API OCR изображений (поддерживается более 27 500 типов) и CAPTCHA изображений с помощью reCAPTCHA, hCaptcha и решателей изображений в виде сетки.
Краткое содержание
Текстовые CAPTCHA просты, дешевы в развертывании и их легко обойти с помощью OCR. Image CAPTCHA сложнее автоматизировать, и они обеспечивают более надежную защиту от ботов за счет повышенного трения со стороны пользователей. Для разработчиков, создающих рабочие процессы автоматизации, текстовые CAPTCHA требуют только OCR (легко обрабатываетсяOCR изображения пользователя CaptchaAI), в то время как CAPTCHA для изображений требуют специализированных решателей, таких как reCAPTCHA CaptchaAI или API hCaptcha. В 2025 году будет наблюдаться тенденция к использованию невидимых CAPTCHA, которые полностью устранят неудобства для пользователей.