AdresSayta

← Пайплайн

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-совместимые алиасы)
coordinatescaptcha1 — тип «клик по координатам».
body / captcha_imagebase64 картинки капчи (сцена). Или body_url.
imginstructions / task_imagebase64 полоски с иконками. Или 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 и повторяй на отклонённых (Яндекс отдаёт новую капчу).