Los CAPTCHA de texto piden a los usuarios que escriban letras y números distorsionados. Los CAPTCHA de imágenes piden a los usuarios que seleccionen objetos específicos de las fotos (semáforos, cruces de peatones, autobuses). Ambos tienen como objetivo bloquear los bots, pero difieren en la seguridad, la experiencia del usuario, la accesibilidad y la complejidad de la automatización. Esta comparación ayuda a los desarrolladores a comprender a qué tipo se enfrentan y cómo se integra cada uno en su flujo de trabajo.
Cómo funcionan los CAPTCHA de texto
Los CAPTCHA de texto representan caracteres distorsionados como una imagen. El usuario lee los caracteres y los escribe en un campo de texto.
Técnicas comunes de CAPTCHA de texto
| Técnica | Propósito |
|---|---|
| Deformación de personajes | Dobla letras para evitar el OCR simple |
| Ruido de fondo | Agrega líneas, puntos o degradados de color detrás del texto |
| Superposición de personajes | Superpone letras adyacentes para evitar la segmentación |
| Aleatorización de fuentes | Utiliza múltiples fuentes y tamaños por desafío. |
| variación de color | Aleatoriza los colores de los personajes y del fondo. |
Flujo de CAPTCHA de texto
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)
Cómo funcionan los CAPTCHA de imágenes
Los CAPTCHA de imágenes presentan una cuadrícula de fotografías y piden al usuario que seleccione imágenes que coincidan con una categoría.
Tipos comunes de CAPTCHA de imágenes
| Tipo | Desafío | Proveedor |
|---|---|---|
| Selección de cuadrícula | "Selecciona todas las plazas con semáforos" | reCAPTCHA v2 |
| Etiquetado de imagen | "Haga clic en todas las imágenes que contengan un autobús" | hCaptcha |
| Conteo de objetos | "¿Cuántas bicicletas hay en esta imagen?" | personalizado |
| Rotación | "Gira la imagen a la orientación correcta" | divertidocaptcha |
Imagen flujo 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)
Comparación cara a cara
| Dimensión | CAPTCHA de texto | CAPTCHA de imagen |
|---|---|---|
| Nivel de seguridad | Bajo: el OCR moderno resuelve más del 95 % | Alto: requiere reconocimiento de objetos |
| Tiempo de resolución del usuario | 5-10 segundos | 10-30 segundos |
| Tasa de fracaso (humanos) | 15-20% | 8-15% |
| Accesibilidad | Pobres para personas con discapacidad visual | Muy pobre para personas con discapacidad visual. |
| Compatibilidad con dispositivos móviles | Moderado (caracteres pequeños) | Bueno (selección basada en toques) |
| Dificultad de automatización | Fácil (OCR) | Difícil (clasificación de imágenes) |
| Costo de implementación | Gratis (autohospedado) | Gratis a pago (API de terceros) |
| Costo de omisión de bot | $0,50-$1,00 por 1000 | $1.50-$3.00 por 1,000 |
| Recopilación de datos | Ninguno | Puede entrenar modelos de ML (reCAPTCHA) |
| Esfuerzo de implementación | Mínimo (generación de imágenes del lado del servidor) | Moderado (integración del SDK de JavaScript) |
Detección de CAPTCHA de texto versus imagen
Detección de pitón
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://staging.example.com/qa-login")
print(captcha)
Detección de 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://staging.example.com/qa-login").then(console.log);
Resolver CAPTCHA de texto con CaptchaAI
Los CAPTCHA de texto se basan esencialmente en imágenes: el texto distorsionado se representa como PNG o JPEG. La API Image OCR de CaptchaAI los maneja directamente.
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 admite más de 27 500 tipos de CAPTCHA de imágenes, incluidos texto distorsionado, ecuaciones matemáticas y desafíos de reconocimiento de caracteres.
Cuándo usar qué tipo de CAPTCHA
Elija CAPTCHA de texto cuando:
- Necesita una solución autohospedada y sin dependencia
- Su base de usuarios tiene requisitos de accesibilidad (los CAPTCHA de texto pueden tener alternativas de audio)
- El tráfico de bots es bajo y necesitas una prevención básica de spam
- Quiere evitar la recopilación de datos de terceros
Elija CAPTCHA de imagen cuando:
- Necesitas una fuerte protección contra bots
- Su aplicación maneja datos confidenciales (inicio de sesión, pagos)
- Puedes aceptar una mayor fricción del usuario
- Quiere una solución administrada con actualizaciones continuas
No elija ninguno cuando:
- Los CAPTCHA invisibles (reCAPTCHA v3, Cloudflare Turnstile) pueden manejar su tráfico sin la interacción del usuario.
Preguntas frecuentes
¿Qué tipo de CAPTCHA es más accesible?
Ninguno de los dos tipos es realmente accesible. Los CAPTCHA de texto son difíciles para los usuarios con discapacidad visual a menos que se proporcione una alternativa de audio. Los CAPTCHA de imágenes son peores: las tareas de selección de cuadrículas no se pueden utilizar con lectores de pantalla. Los CAPTCHA invisibles (reCAPTCHA v3, Cloudflare Turnstile) son la opción más accesible porque no requieren interacción del usuario.
¿Los CAPTCHA de texto seguirán siendo efectivos en 2025?
No. Los motores de OCR modernos resuelven CAPTCHA de texto estándar con más del 95% de precisión. Los CAPTCHA de texto muy distorsionados pueden reducir esto al 80-85%, pero a costa de la legibilidad humana. Los CAPTCHA de texto ahora bloquean a más usuarios legítimos que los bots.
¿Qué tipo es más barato de resolver con una API?
Los CAPTCHA de texto son más baratos. La resolución basada en OCR cuesta aproximadamente entre 0,50 y 1 dólar por cada 1.000 soluciones. Los CAPTCHA de imagen (reCAPTCHA, hCaptcha) cuestan entre 1,50 y 3 dólares por cada 1.000 soluciones porque requieren un procesamiento más complejo.
¿Puede CaptchaAI resolver CAPTCHA de texto e imagen?
Sí. CaptchaAI resuelve CAPTCHA de texto a través de su API Image OCR (más de 27,500 tipos compatibles) y CAPTCHA de imágenes a través de sus solucionadores de imágenes reCAPTCHA, hCaptcha y cuadrícula.
Resumen
Los CAPTCHA de texto son simples, económicos de implementar y fáciles de omitir con OCR. Los CAPTCHA de imagen son más difíciles de automatizar y brindan una mayor protección contra bots a costa de una mayor fricción para el usuario. Para los desarrolladores que crean flujos de trabajo de automatización, los CAPTCHA de texto solo requieren OCR (fácilmente manejado porOCR de imagen de CaptchaAI), mientras que los CAPTCHA de imágenes requieren solucionadores especializados como las API reCAPTCHA o hCaptcha de CaptchaAI. En 2025, la tendencia es hacia CAPTCHA invisibles que eliminen por completo la fricción del usuario.
Artículos relacionados
- Comparación de la nube Captchaai Vs Capmonster
- Comparación de Geetest y Cloudflare Turnstile
- Cloudflare Turnstile 403 Después de la corrección del token