CAPTCHA / GEETEST_ICON
GeeTest / Icon
Капча с тремя иконками-подсказками: нужно найти эти объекты на большой картинке и нажать на них в указанном порядке.
Входные данные
Подготовьте canvas.jpg — основную картинку, и hint-1.png, hint-2.png, hint-3.png — три исходные подсказки в порядке задания. Сохраняйте alpha-канал PNG-подсказок. Передавайте файлы одного и того же раунда.
Параметры
| Параметр | Тип | Обязателен | По умолчанию | Назначение |
|---|---|---|---|---|
| image | string | Да | — | Исходное изображение в base64. |
| ques | string[3] | Да | — | Массив ровно из трёх base64-картинок подсказок. Первый элемент — первый объект для клика, второй — второй, третий — третий. |
| method | string | Нет | auto | auto: использовать известный чистый фон, иначе сопоставлять контуры. background: требовать чистый фон; при его отсутствии задача завершается ошибкой. match: искать по контурам без использования чистого фона. |
| bg_id | string | Нет | Пустая строка | Идентификатор чистого фона, если он вам известен. Имеет приоритет над imgs. |
| imgs | string | Нет | Пустая строка | Исходный путь основной картинки из данных провайдера, например /icon/<hex-id>/…. Из него извлекается bg_id. |
Ответ
| Данные распознавания | Тип | Назначение |
|---|---|---|
| extra.points | integer[][3] | Точки [номер, x, y]. Номер начинается с 1 и соответствует порядку ques. x и y — пиксели исходной основной картинки. |
| extra.scores | number[] | Оценки сопоставления точек в том же порядке. |
| extra.method | string | Фактически использованный способ: background или match. |
| extra.bg_id | string | Идентификатор фона, если известен. |
| extra.background_built | boolean | Был ли собран фон из накопленных сервером образцов в этом запросе. |
| extra.fallback_reason | string, optional | Причина перехода с фонового метода на match, если переход был. |
| extra.debug | object | Диагностика конкретного метода. |
Применение
Читайте result["extra"]["points"]. Нажмите на каждую точку в порядке массива. При масштабировании картинки сначала пересчитайте x и y. Проверку у провайдера выполняет плагин или ваш код.
Частые ошибки
- ques должен содержать ровно три изображения, а не текст задания или пути к локальным файлам.
- Подсказки и canvas должны относиться к одному раунду.
- Не начинайте с method=background без известного серверу фона; для первого запроса используйте auto.
Пример запроса
import base64
from pathlib import Path
import os
import uuid
import requests
def image64(filename):
return base64.b64encode(Path(filename).read_bytes()).decode("ascii")
payload = {
"image": image64("canvas.jpg"),
"ques": [image64("hint-1.png"), image64("hint-2.png"), image64("hint-3.png")],
"method": "auto",
}
# Создайте один ID на задачу; сохраняйте его для сетевых повторов.
request_id = str(uuid.uuid4())
response = requests.post(
"https://capi.z3n.pro/v1/solve/geetest_icon",
headers={
"Authorization": f"Bearer {os.environ['CAPI_API_KEY']}",
"Content-Type": "application/json",
"Idempotency-Key": request_id,
},
json=payload,
timeout=90,
)
response.raise_for_status()
result = response.json()
for order, x, y in result["extra"]["points"]:
print(order, x, y)
capi.