Эта статья была полезной?
Как обойти Prosopo Сaptcha
Технический специалист
Введение
Prosopo Procaptcha — это современная система защиты с открытым исходным кодом, разработанная как приватная и децентрализованная альтернатива reCAPTCHA. Она использует токенизированный подход: при успешном прохождении верификации сайт получает подписанный токен, который передается вместе с формой для подтверждения того, что запрос исходит от реального пользователя.
Особенности Procaptcha, усложняющие автоматизацию:
- Привязка к домену через siteKey
- Токен действителен ограниченное время
- Возможна проверка IP-адреса при валидации
В этом руководстве мы разберём, как автоматически обходить Prosopo Procaptcha с помощью API 2Captcha: как найти нужные параметры на странице, создать задачу и правильно внедрить полученный токен.
Как найти параметры Procaptcha на сайте
Для решения капчи потребуется один ключевой параметр — siteKey.
- Откройте целевую страницу в браузере и запустите инструменты разработчика (F12).
- Перейдите на вкладку Elements и найдите тег с атрибутом data-sitekey — это и есть значение siteKey.
- Альтернативно, перейдите на вкладку Network, перезагрузите страницу и найдите запросы к домену procaptcha.io или prosopo.io. В параметрах запроса будет передан siteKey.
Пример того, как выглядит виджет Procaptcha в коде страницы:
html
<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
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "ProsopoTaskProxyless",
"websiteURL": "https://www.example.com/",
"websiteKey": "5EPQoMZEDc5LpN7gtxMMzYPTzA6UeWqL2stk1rso9gy4Ahqt"
}
}
Запрос на создание задачи (с вашим прокси)
json
{
"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
{
"errorId": 0,
"status": "ready",
"solution": {
"token": "0x00016c68747470733a2f2f70726f6e6f6465332e70726f736f706f2e696fc0354550516f4d5a454463354c704e376774784d4d7a5950547a4136..."
},
"cost": "0.00299",
"ip": "1.2.3.4",
"createTime": 1692863536,
"endTime": 1692863556,
"solveCount": 1
}
Пошаговая реализация на Python
Шаг 1: Создание задачи
python
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
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
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
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
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
Важные моменты для отчётов
- Сохраняйте taskId — обязательно сохраняйте ID задачи, чтобы отправить отчёт после проверки токена на целевом сайте.
- Отправляйте своевременно — отчёты принимаются только в течение определённого времени после получения решения.
- Не злоупотребляйте — отправляйте 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).
Полезные ссылки
- Документация API Prosopo Procaptcha: https://rucaptcha.com/api-docs/prosopo-procaptcha
- Страница решателя Procaptcha: https://rucaptcha.com/p/procaptcha-solver
- Примеры кода на GitHub: https://github.com/2captcha
- Центр поддержки: https://rucaptcha.com/support/tickets/new
- Как отправлять отчёты: https://rucaptcha.com/h/how-to-submit-reports
Заключение
Обход Prosopo Procaptcha через 2Captcha реализуется по классической токенизированной схеме: найти siteKey, отправить задачу в API, получить токен и внедрить его в форму.
Ключевые выводы:
- Единственный обязательный параметр — websiteKey (siteKey). Копируйте его точно из атрибута data-sitekey виджета на странице.
- Внедряйте токен сразу после получения — он имеет ограниченное время жизни.
- Если сайт проверяет IP при валидации, используйте ProsopoTask с резидентскими прокси.
- Сохраняйте taskId для отправки отчётов о качестве решений.
- При работе с Selenium или Playwright используйте стелс-режим, чтобы виджет Procaptcha корректно отображался на странице.
Следуя этим рекомендациям, вы сможете надёжно автоматизировать взаимодействие с сайтами, защищёнными системой Prosopo Procaptcha.