Captcha Solver API
2Captcha-совместимый REST для Yandex silhouette (клик по иконкам). Отправляешь картинку сцены + полоску с иконками — получаешь координаты кликов по порядку.
Аутентификация: заголовок
База:
X-Api-Key: КЛЮЧ (или поле key в теле / ?key=).База:
https://server.ollo.pw/api/captcha/v1
Эндпоинты
POST /v1/task/create/ | Создать задачу (решает синхронно; async:1 — вернёт task_id для опроса). |
GET /v1/task/<id>/ | Статус и решение задачи. |
POST /v1/task/<id>/report/ | Отчёт: {"yandex_accepted": true|false} — обучает систему. |
Параметры create (2Captcha-совместимые алиасы)
coordinatescaptcha | 1 — тип «клик по координатам». |
body / captcha_image | base64 картинки капчи (сцена). Или body_url. |
imginstructions / task_image | base64 полоски с иконками. Или imginstructions_url. |
Ответ
{
"task_id": "…",
"status": "ready",
"solution": { "clicks": [ {"x": 120, "y": 84}, {"x": 250, "y": 90}, … ] },
"confidence": 0.77,
"cost": 0.001,
"solve_ms": 240
}
Пример на Python (как у 2Captcha)
import base64, requests
API = "https://server.ollo.pw/api/captcha/v1"
KEY = "ВАШ_КЛЮЧ"
def b64(path):
with open(path, "rb") as f:
return base64.b64encode(f.read()).decode()
# 1. отправить капчу -> получить координаты кликов
r = requests.post(f"{API}/task/create/",
headers={"X-Api-Key": KEY},
json={
"coordinatescaptcha": 1,
"body": b64("captcha.png"), # сцена
"imginstructions": b64("strip.png"), # полоска с иконками
}).json()
clicks = r["solution"]["clicks"] # [{"x":..,"y":..}, ...] по порядку
print(clicks)
# 2. (опц.) отчёт после отправки на сайте — обучает систему
requests.post(f"{API}/task/{r['task_id']}/report/",
headers={"X-Api-Key": KEY},
json={"yandex_accepted": True}) # или False, если Яндекс отклонил
Асинхронно (очередь)
import time, requests
r = requests.post(f"{API}/task/create/?async=1", headers={"X-Api-Key": KEY},
json={"coordinatescaptcha":1, "body": b64("captcha.png"), "imginstructions": b64("strip.png")}).json()
tid = r["task_id"]
while True:
s = requests.get(f"{API}/task/{tid}/", headers={"X-Api-Key": KEY}).json()
if s["status"] in ("ready", "error"): break
time.sleep(2)
print(s.get("solution"))
Текущий single-shot solve-rate ~41%. Для прод-использования — опрашивай report и повторяй на отклонённых (Яндекс отдаёт новую капчу).