CAPTCHA с изображением сетки представляет собой большое изображение, разделенное на сетку (обычно 3 × 3 или 4 × 4) и просит пользователей выбрать ячейки, соответствующие описанию. Хотя reCAPTCHA использует этот формат, многие сайты используют пользовательские задачи, которые не являются частью системы Google.
В этом руководстве рассматривается решение проблем с изображением сетки, не связанных с reCAPTCHA, с использованием конечной точки method=grid CaptchaAI.
Требования
| Элемент | Ценить |
|---|---|
| CaptchaAI API-ключ | Отcaptchaai.com |
| Изображение сетки | Скриншот или base64 полной сетки |
| Язык | Python 3.7+ или Node.js 14+ |
Шаг 1. Сделайте снимок сетки.
Способ А: сделайте снимок экрана элемента капчи.
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://example.com/protected-form")
# Screenshot just the captcha container
captcha_element = driver.find_element(By.CSS_SELECTOR, "#captcha-container")
captcha_element.screenshot("captcha_grid.png")
Метод Б: извлечь изображение из атрибута src
import base64
import requests
captcha_img = driver.find_element(By.CSS_SELECTOR, ".grid-captcha img")
src = captcha_img.get_attribute("src")
if src.startswith("data:image"):
image_b64 = src.split(",")[1]
else:
image_data = requests.get(src).content
image_b64 = base64.b64encode(image_data).decode()
Шаг 2. Отправьте изображение на CaptchaAI.
Использование загрузки файла (Python)
import requests
import time
API_KEY = "YOUR_API_KEY"
with open("captcha_grid.png", "rb") as f:
response = requests.post("https://ocr.captchaai.com/in.php",
data={
"key": API_KEY,
"method": "post",
"recaptcha": 1,
"json": 1
},
files={"file": f}
)
data = response.json()
task_id = data["request"]
print(f"Task: {task_id}")
Использование base64 (Python)
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "post",
"body": image_b64,
"recaptcha": 1,
"json": 1
})
task_id = response.json()["request"]
Node.js
const axios = require('axios');
const fs = require('fs');
async function submitGridCaptcha(imagePath) {
const imageB64 = fs.readFileSync(imagePath).toString('base64');
const { data } = await axios.post('https://ocr.captchaai.com/in.php', null, {
params: {
key: 'YOUR_API_KEY',
method: 'post',
body: imageB64,
recaptcha: 1,
json: 1
}
});
return data.request;
}
Шаг 3. Опрос для поиска решения
def get_grid_solution(task_id):
for _ in range(30):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY,
"action": "get",
"id": task_id,
"json": 1
}).json()
if result.get("status") == 1:
return result["request"]
if result.get("request") != "CAPCHA_NOT_READY":
raise Exception(f"Error: {result['request']}")
raise Exception("Timeout")
solution = get_grid_solution(task_id)
print(f"Solution: {solution}")
# Returns click coordinates or cell indices
Шаг 4. Примените решение
Щелкните по индексу ячейки
# If solution returns cell indices (e.g., "2,5,6")
selected = [int(i) for i in solution.split(",")]
cells = driver.find_elements(By.CSS_SELECTOR, ".grid-cell")
for idx in selected:
cells[idx - 1].click()
time.sleep(0.2)
driver.find_element(By.CSS_SELECTOR, ".verify-button").click()
Нажмите по координатам
from selenium.webdriver.common.action_chains import ActionChains
# If solution returns coordinates (e.g., "x=120,y=80;x=250,y=200")
captcha_element = driver.find_element(By.CSS_SELECTOR, "#captcha-container")
actions = ActionChains(driver)
for coord in solution.split(";"):
parts = dict(p.split("=") for p in coord.split(","))
x, y = int(parts["x"]), int(parts["y"])
actions.move_to_element_with_offset(captcha_element, x, y).click()
actions.perform()
Поиск неисправностей
| Ошибка | Причина | Исправить |
|---|---|---|
ERROR_WRONG_FILE_EXTENSION |
Неверный формат изображения | Используйте PNG или JPEG; убедитесь, что base64 действителен |
ERROR_CAPTCHA_UNSOLVABLE |
Изображение слишком маленькое или размытое | Снимайте в полном разрешении |
| Выбраны неправильные ячейки | Несоответствие формата решения | Проверьте, является ли решение индексами и координатами |
ERROR_TOO_BIG_CAPTCHA_FILESIZE |
Изображение превышает ограничение по размеру | Изменить размер до менее 600 КБ |
Полный работоспособный пример
Нужен полноценный рабочий проект с настройкой среды, опросом, повторными попытками и обработкой ошибок?
Полный работоспособный пример см. на GitHub →.
Часто задаваемые вопросы
Когда мне следует использовать решение по сетке, а не по токену?
Используйте решение токенов (method=userrecaptcha) для стандартных задач reCAPTCHA — это проще и надежнее. Используйте решение по сетке (method=post с recaptcha=1) для задач по сетке, не связанных с reCAPTCHA, или для отдельных сеток изображений.
Какие размеры сетки поддерживаются?
CaptchaAI поддерживает сетки 3×3, 4×4 и нестандартные макеты. Изображение анализируется в целом, независимо от структуры сетки.
Насколько точно решение сетки?
Точность зависит от качества изображения. Четкие изображения высокого разрешения позволяют достичь наилучших результатов. Среднее время решения 15–30 секунд.
Могу ли я решить динамические сетки, в которых плитки меняются?
Для динамических сеток reCAPTCHA (где заменяются нажатые плитки) используйте метод токена (method=userrecaptcha). Метод сетки решает одно статическое изображение.
Связанные руководства
- Как работают испытания Grid Image CAPTCHA
- Распространенные ошибки и исправления Grid Image CAPTCHA
- Объяснение проблемы сетки reCAPTCHA