Los CAPTCHA de imágenes de cuadrícula (desafíos de imágenes reCAPTCHA v2) devuelven índices de celda como solución. Cuando las celdas devueltas son incorrectas (al hacer clic en los mosaicos incorrectos o al obtener ERROR_CAPTCHA_UNSOLVABLE), el problema suele estar en cómo envía la imagen, el parámetro de tamaño de la cuadrícula o el texto de instrucciones.
Cómo funciona la resolución de imágenes de cuadrícula
CaptchaAI recibe su imagen de cuadrícula, analiza cada celda y devuelve una serie de índices que coinciden con la instrucción. Las celdas están numeradas de izquierda a derecha y de arriba a abajo:
3×3 Grid: 4×4 Grid:
1 2 3 1 2 3 4
4 5 6 5 6 7 8
7 8 9 9 10 11 12
13 14 15 16
La respuesta es similar a: [1, 3, 6, 9], lo que significa que las celdas 1, 3, 6 y 9 contienen los objetos de destino.
Errores y correcciones comunes
Tamaño de cuadrícula incorrecto
El error de coordenadas más común. Si el CAPTCHA es una cuadrícula de 4×4 pero envía grid_size=3x3, la numeración de celdas es incorrecta y se seleccionan los mosaicos incorrectos.
# WRONG — 4×4 grid sent as 3×3
data = {
"key": "YOUR_API_KEY",
"method": "post",
"grid_size": "3x3", # Wrong!
"img_type": "recaptcha",
"instructions": "traffic lights",
"json": 1
}
# CORRECT — match the actual grid
data = {
"key": "YOUR_API_KEY",
"method": "post",
"grid_size": "4x4", # Correct
"img_type": "recaptcha",
"instructions": "traffic lights",
"json": 1
}
Cómo detectar el tamaño de la cuadrícula mediante programación:
from PIL import Image
img = Image.open("grid_captcha.png")
width, height = img.size
# reCAPTCHA grids are square. 3×3 tiles are ~100px each, 4×4 tiles are ~75px each
tile_width = width // 3
if width % 4 == 0 and (width // 4) < 100:
grid_size = "4x4"
else:
grid_size = "3x3"
print(f"Detected grid size: {grid_size}")
Si ya conoce el tamaño esperado desde el flujo del sitio, convierta esa detección en una validación explícita antes de enviar la tarea:
def validate_grid_size(width: int, expected: str) -> str:
detected = "4x4" if width % 4 == 0 and (width // 4) < 100 else "3x3"
if detected != expected:
raise ValueError(f"Grid mismatch: expected {expected}, detected {detected}")
return detected
Imagen recortada o modificada
Al enviar una imagen recortada, redimensionada o envuelta en una captura de pantalla, se cambia la alineación de la cuadrícula. CaptchaAI necesita la imagen CAPTCHA original exactamente como se renderizó.
Solución: Capture la imagen directamente desde el iframe reCAPTCHA, no una captura de pantalla de página completa.
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://example.com")
# Switch to reCAPTCHA iframe
iframe = driver.find_element(By.CSS_SELECTOR, 'iframe[title*="recaptcha"]')
driver.switch_to.frame(iframe)
# Get the grid image element
grid_img = driver.find_element(By.CSS_SELECTOR, "img.rc-image-tile-wrapper img")
grid_img.screenshot("grid_captcha.png") # Captures just the grid, not the whole page
Instrucciones incorrectas o vagas
El texto de las instrucciones debe coincidir con lo que pide el CAPTCHA. Las instrucciones vagas conducen a selecciones de celdas incorrectas.
# WRONG — too vague
data["instructions"] = "select images"
# CORRECT — specific instruction from the CAPTCHA
data["instructions"] = "crosswalks"
Valores de instrucción comunes: crosswalks, traffic lights, cars, buses, motorcycles, bicycles, fire hydrants, stairs, bridges, parking meters.
Compensación del índice de celda (basado en 0 frente a basado en 1)
CaptchaAI devuelve índices de celda basados en 1. Si su código de automatización utiliza indexación basada en 0, debe restar 1.
import json
# CaptchaAI returns 1-based indices
solution = json.loads(result["request"]) # e.g., [1, 3, 6, 9]
# Convert to 0-based for Selenium click automation
zero_based = [cell - 1 for cell in solution]
# Click grid cells using 0-based index
tiles = driver.find_elements(By.CSS_SELECTOR, ".rc-image-tile-wrapper img")
for idx in zero_based:
tiles[idx].click()
Problemas con el formato de imagen
CaptchaAI admite JPG, JPEG, PNG y GIF. Otros formatos devuelven ERROR_WRONG_FILE_EXTENSION.
# WRONG — WebP or BMP
files = {"file": open("grid.webp", "rb")} # Not supported
# CORRECT — convert to PNG first
from PIL import Image
img = Image.open("grid.webp")
img.save("grid.png", "PNG")
files = {"file": open("grid.png", "rb")}
Árbol de decisión
Grid cells are wrong
↓
Is grid_size correct (3x3 or 4x4)? → No → Fix grid_size parameter
↓ Yes
Is the image the original CAPTCHA (not cropped)? → No → Capture directly from iframe
↓ Yes
Is instruction text specific? → No → Use exact CAPTCHA instruction text
↓ Yes
Using 1-based indexing for clicks? → No → Convert solution to 0-based
↓ Yes
Image in supported format (JPG/PNG)? → No → Convert image format
↓ Yes
Report tiles to CaptchaAI via reportbad
Informar soluciones incorrectas
Si las coordenadas son consistentemente incorrectas a pesar de los parámetros correctos, informe la solución:
requests.get("https://ocr.captchaai.com/res.php", params={
"key": "YOUR_API_KEY",
"action": "reportbad",
"id": task_id,
"json": 1
})
Esto ayuda a CaptchaAI a mejorar la precisión y puede reembolsar el costo de la resolución.
Preguntas frecuentes
¿Qué tamaños de cuadrícula admite CaptchaAI?
Cuadrículas de 3×3 y 4×4. Estos son los formatos estándar de desafío de imágenes reCAPTCHA.
¿Por qué obtengo ERROR_CAPTCHA_UNSOLVABLE para imágenes de cuadrícula?
La calidad de la imagen es demasiado baja, el texto de las instrucciones es incorrecto o la imagen no es un CAPTCHA de cuadrícula reconocible. Verifique que esté enviando la imagen original sin recortar con las instrucciones correctas.
Mis celdas están compensadas por uno. ¿Lo que está mal?
CaptchaAI devuelve índices basados en 1. Si su código espera estar basado en 0, reste 1 de cada índice.
Resolver CAPTCHA de imágenes de cuadrícula con CaptchaAI
Obtenga soluciones precisas de imágenes de cuadrícula encaptchaai.com.
Guías relacionadas
- Cómo resolver Grid Image CAPTCHA usando API
- Referencia de códigos de error CaptchaAI
- Imagen CAPTCHA Respuesta incorrecta Optimización de la calidad
- ERROR_BAD_PARAMETERS Solicitud de validación