Логотип «2Captcha»Перейти на главную страницу
Туториалы по обходу капчи

Эта статья была полезной?

Как обойти Prosopo Сaptcha

Грегори Фишер
Грегори Фишер

Технический специалист

Введение

Prosopo Procaptcha — это современная система защиты с открытым исходным кодом, разработанная как приватная и децентрализованная альтернатива reCAPTCHA. Она использует токенизированный подход: при успешном прохождении верификации сайт получает подписанный токен, который передается вместе с формой для подтверждения того, что запрос исходит от реального пользователя.

Особенности Procaptcha, усложняющие автоматизацию:

  • Привязка к домену через siteKey
  • Токен действителен ограниченное время
  • Возможна проверка IP-адреса при валидации

В этом руководстве мы разберём, как автоматически обходить Prosopo Procaptcha с помощью API 2Captcha: как найти нужные параметры на странице, создать задачу и правильно внедрить полученный токен.

Как найти параметры Procaptcha на сайте

Для решения капчи потребуется один ключевой параметр — siteKey.

  1. Откройте целевую страницу в браузере и запустите инструменты разработчика (F12).
  2. Перейдите на вкладку Elements и найдите тег
    с атрибутом data-sitekey — это и есть значение siteKey.
  3. Альтернативно, перейдите на вкладку Network, перезагрузите страницу и найдите запросы к домену procaptcha.io или prosopo.io. В параметрах запроса будет передан siteKey.

Пример того, как выглядит виджет Procaptcha в коде страницы:

html Copy
<div
  class="procaptcha"
  data-sitekey="5EPQoMZEDc5LpN7gtxMMzYPTzA6UeWqL2stk1rso9gy4Ahqt"
></div>

Параметры API

API 2Captcha поддерживает два типа задач для Prosopo Procaptcha:

  • ProsopoTaskProxyless — сервис использует собственный пул прокси
  • ProsopoTask — сервис использует ваши прокси

Обязательные параметры (для обоих типов)

Параметр Тип Описание
type string ProsopoTaskProxyless или ProsopoTask
websiteURL string Полный URL целевой страницы, где загружена капча
websiteKey string Значение siteKey, извлечённое со страницы (атрибут data-sitekey виджета Procaptcha)

Параметры прокси (только для ProsopoTask)

Используйте ProsopoTask, если сайт строго проверяет IP-адрес при валидации токена.

Параметр Тип Обязательный Описание
proxyType string Да Тип прокси: http, socks4 или socks5
proxyAddress string Да IP-адрес или хост прокси-сервера
proxyPort integer Да Порт прокси-сервера
proxyLogin string Нет Логин для аутентификации на прокси (если требуется)
proxyPassword string Нет Пароль для аутентификации на прокси (если требуется)

Примеры JSON-запросов

Запрос на создание задачи (Proxyless)

json Copy
{
    "clientKey": "YOUR_API_KEY",
    "task": {
        "type": "ProsopoTaskProxyless",
        "websiteURL": "https://www.example.com/",
        "websiteKey": "5EPQoMZEDc5LpN7gtxMMzYPTzA6UeWqL2stk1rso9gy4Ahqt"
    }
}

Запрос на создание задачи (с вашим прокси)

json Copy
{
    "clientKey": "YOUR_API_KEY",
    "task": {
        "type": "ProsopoTask",
        "websiteURL": "https://www.example.com/",
        "websiteKey": "5EPQoMZEDc5LpN7gtxMMzYPTzA6UeWqL2stk1rso9gy4Ahqt",
        "proxyType": "http",
        "proxyAddress": "1.2.3.4",
        "proxyPort": 8080,
        "proxyLogin": "user23",
        "proxyPassword": "p4$w0rd"
    }
}

Успешный ответ с решением

В ответе на запрос getTaskResult вы получите токен в поле solution.token. Именно этот токен нужно передать на целевой сайт.

json Copy
{
    "errorId": 0,
    "status": "ready",
    "solution": {
        "token": "0x00016c68747470733a2f2f70726f6e6f6465332e70726f736f706f2e696fc0354550516f4d5a454463354c704e376774784d4d7a5950547a4136..."
    },
    "cost": "0.00299",
    "ip": "1.2.3.4",
    "createTime": 1692863536,
    "endTime": 1692863556,
    "solveCount": 1
}

Пошаговая реализация на Python

Шаг 1: Создание задачи

python Copy
import requests

API_KEY = "YOUR_API_KEY"

def create_prosopo_task(website_url, website_key):
    payload = {
        "clientKey": API_KEY,
        "task": {
            "type": "ProsopoTaskProxyless",
            "websiteURL": website_url,
            "websiteKey": website_key
        }
    }

    response = requests.post("https://api.rucaptcha.com/createTask", json=payload)
    result = response.json()

    if result.get("errorId") != 0:
        raise Exception(f"Ошибка создания задачи: {result.get('errorDescription')}")

    return result["taskId"]

Шаг 2: Получение результата

python Copy
import time

def get_prosopo_result(task_id):
    while True:
        time.sleep(5)

        payload = {
            "clientKey": API_KEY,
            "taskId": task_id
        }

        response = requests.post("https://api.rucaptcha.com/getTaskResult", json=payload)
        result = response.json()

        if result.get("status") == "ready":
            return result["solution"]["token"]
        elif result.get("errorId") != 0:
            raise Exception(f"Ошибка API: {result.get('errorDescription')}")

Полные примеры кода

Python (через официальный SDK)

Использование официального SDK значительно упрощает интеграцию: библиотека самостоятельно опрашивает статус задачи и возвращает готовый результат.

python Copy
from twocaptcha import TwoCaptcha

solver = TwoCaptcha('YOUR_API_KEY')

try:
    result = solver.prosopo(
        sitekey='5EPQoMZEDc5LpN7gtxMMzYPTzA6UeWqL2stk1rso9gy4Ahqt',
        url='https://www.example.com/'
    )

    token = result['code']
    print(f"Токен получен: {token[:60]}...")

except Exception as e:
    print(f"Ошибка при решении: {e}")

Интеграция с Selenium и внедрение токена

После получения токена его необходимо передать на целевой сайт. Procaptcha, как правило, ожидает токен в скрытом поле формы с именем procaptcha-response или через JavaScript-коллбэк.

python Copy
from selenium import webdriver
from selenium.webdriver.common.by import By
from twocaptcha import TwoCaptcha
import time

driver = webdriver.Chrome()
driver.get("https://www.example.com/")
time.sleep(3)  # Ожидаем полной загрузки страницы и виджета капчи

# Извлекаем siteKey прямо из атрибута виджета
site_key = driver.find_element(
    By.CSS_SELECTOR, ".procaptcha[data-sitekey]"
).get_attribute("data-sitekey")

# Решаем капчу через 2Captcha
solver = TwoCaptcha('YOUR_API_KEY')
result = solver.prosopo(sitekey=site_key, url=driver.current_url)
token = result['code']

# Внедряем токен в скрытое поле формы
driver.execute_script(f"""
    let input = document.querySelector('input[name="procaptcha-response"]');
    if (!input) {{
        input = document.createElement('input');
        input.type = 'hidden';
        input.name = 'procaptcha-response';
        document.querySelector('form').appendChild(input);
    }}
    input.value = '{token}';
""")

# Отправляем форму
driver.find_element(By.CSS_SELECTOR, "button[type='submit']").click()

Лучшие практики

1. Точно копируйте websiteKey

Значение siteKey чувствительно к регистру и должно быть скопировано без изменений из атрибута data-sitekey или из сетевых запросов. Даже один лишний символ приведёт к ошибке.

2. Внедряйте токен как можно быстрее

Токен Procaptcha имеет ограниченное время жизни (обычно 1–2 минуты). После получения ответа от API немедленно передавайте токен на сайт и отправляйте форму — не сохраняйте токен "про запас".

3. Используйте ProsopoTask с резидентскими прокси для строгих сайтов

Если сайт проверяет IP-адрес при валидации токена (то есть IP при решении капчи должен совпадать с IP при отправке формы), используйте тип ProsopoTask и передайте данные резидентского прокси. Прокси из дата-центров могут быть заблокированы.

4. Используйте правильный URL страницы

Параметр websiteURL должен точно совпадать с адресом страницы, на которой отображается капча. Ошибка в URL может привести к тому, что токен не пройдет проверку на стороне сайта.

Отчёты о правильности решения

Если полученный токен был отклонён сайтом, вы можете сообщить об этом через систему отчётов 2Captcha. Это помогает улучшить качество решений.

Когда отправлять отчёты

Отправьте reportIncorrect, если:

  • Сайт отклонил токен после его внедрения
  • Форма не была принята после отправки с токеном
  • Капча вернула ошибку валидации на стороне сервера

Отправьте reportCorrect, если:

  • Токен успешно прошёл валидацию, и форма была принята
  • Вы хотите подтвердить высокое качество полученного решения

Параметры отчётов

Параметр Тип Описание
clientKey string Ваш API-ключ
taskId string ID задачи, полученный при вызове createTask

Пример отправки отчёта

python Copy
import requests

API_KEY = "YOUR_API_KEY"

def report_incorrect(task_id):
    """Сообщить о неверном решении Procaptcha"""
    response = requests.post(
        "https://api.rucaptcha.com/reportIncorrect",
        json={
            "clientKey": API_KEY,
            "taskId": task_id
        }
    )
    return response.json().get("errorId") == 0

def report_correct(task_id):
    """Подтвердить верное решение Procaptcha"""
    response = requests.post(
        "https://api.rucaptcha.com/reportCorrect",
        json={
            "clientKey": API_KEY,
            "taskId": task_id
        }
    )
    return response.json().get("errorId") == 0

Важные моменты для отчётов

  1. Сохраняйте taskId — обязательно сохраняйте ID задачи, чтобы отправить отчёт после проверки токена на целевом сайте.
  2. Отправляйте своевременно — отчёты принимаются только в течение определённого времени после получения решения.
  3. Не злоупотребляйте — отправляйте reportIncorrect только если уверены, что проблема на стороне сервиса, а не вызвана истёкшей сессией или неверным внедрением токена.

Решение частых проблем

Сайт отклоняет токен (Invalid Token)

Возможные причины и решения:

  • Убедитесь, что websiteKey скопирован точно — без пробелов и лишних символов.
  • Проверьте, не истёк ли токен: внедряйте его сразу после получения.
  • Переключитесь на ProsopoTask с резидентским прокси, если сайт проверяет соответствие IP при решении и при отправке формы.
  • Убедитесь, что токен передаётся в правильное поле формы (procaptcha-response или иное, специфичное для сайта).

Ошибка ERROR_CAPTCHA_UNSOLVABLE

Возможные причины и решения:

  • Проверьте правильность websiteKey и websiteURL.
  • Убедитесь, что капча действительно отображается на странице по указанному URL (сайт доступен, страница не требует авторизации для отображения виджета).
  • Попробуйте передать актуальный User-Agent браузера, если API это поддерживает.

Капча не появляется на странице при автоматизации

Возможные причины и решения:

  • Procaptcha может не загружаться, если сайт обнаруживает признаки автоматизации (Selenium, Playwright без стелс-режима). Используйте undetected-chromedriver или stealth-плагины (playwright-stealth).
  • Дождитесь полной загрузки страницы и виджета перед сбором параметров — добавьте явные ожидания (WebDriverWait).

Полезные ссылки

Заключение

Обход Prosopo Procaptcha через 2Captcha реализуется по классической токенизированной схеме: найти siteKey, отправить задачу в API, получить токен и внедрить его в форму.

Ключевые выводы:

  1. Единственный обязательный параметр — websiteKey (siteKey). Копируйте его точно из атрибута data-sitekey виджета на странице.
  2. Внедряйте токен сразу после получения — он имеет ограниченное время жизни.
  3. Если сайт проверяет IP при валидации, используйте ProsopoTask с резидентскими прокси.
  4. Сохраняйте taskId для отправки отчётов о качестве решений.
  5. При работе с Selenium или Playwright используйте стелс-режим, чтобы виджет Procaptcha корректно отображался на странице.

Следуя этим рекомендациям, вы сможете надёжно автоматизировать взаимодействие с сайтами, защищёнными системой Prosopo Procaptcha.