Эта статья была полезной?
Как обойти Capy Puzzle
Технический специалист
Введение
Capy Puzzle капча — это интерактивная система верификации, которая требует от пользователей решения визуальной головоломки, например, сборки пазла или перемещения элемента в определенную позицию. В отличие от простых текстовых капч, Capy генерирует уникальные токены и требует точного совпадения контекста, что делает ее крайне устойчивой к стандартным методам автоматизации и парсинга.
Для разработчиков, занимающихся автоматизацией, тестированием или парсингом, Capy Puzzle капча представляет собой серьезную проблему. Ее нестандартный формат взаимодействия и визуальная сложность делают невозможным обход с помощью традиционных OCR-решений.
В этом руководстве мы подробно разберем, как автоматически обходить Capy Puzzle капчу с помощью API 2Captcha. Мы рассмотрим, как извлечь необходимые параметры со страницы, настроить задачу и корректно внедрить полученное решение на целевой сайт.
Как найти параметры Capy Puzzle капчи на сайте
Для успешного решения капчи вам понадобится один критически важный параметр: websiteKey (часто также называемый sitekey).
- Откройте целевую страницу в браузере и запустите инструменты разработчика (F12).
- Перейдите на вкладку Elements или Network.
- Найдите скрипт или iframe, который загружает капчу Capy. Обычно он содержит параметр
websiteKeyилиsitekeyв своем URL или атрибутах. - Скопируйте значение этого ключа. Как правило, это длинная строка, состоящая из букв и цифр.
Параметры API
API 2Captcha поддерживает два типа задач для Capy Puzzle: с использованием наших внутренних прокси (CapyPuzzleTaskProxyless) и с использованием ваших собственных прокси (CapyPuzzleTask).
Обязательные параметры (для обоих типов)
| Параметр | Тип | Описание |
|---|---|---|
| type | string | CapyPuzzleTaskProxyless или CapyPuzzleTask |
| websiteURL | string | Полный URL целевой страницы, на которой загружена капча |
| websiteKey | string | Уникальный ключ капчи (sitekey), извлеченный со страницы |
Опциональные параметры
| Параметр | Тип | Описание |
|---|---|---|
| userAgent | string | User-Agent вашего браузера. Рекомендуется передавать для совпадения сессии |
Параметры прокси (только для CapyPuzzleTask)
Если сайт строго проверяет IP-адреса, используйте тип CapyPuzzleTask и передайте данные вашего резидентского прокси.
| Параметр | Тип | Описание |
|---|---|---|
| proxyType | string | Тип прокси: http или socks5 |
| proxyAddress | string | IP-адрес или хост прокси-сервера |
| proxyPort | integer | Порт прокси-сервера |
| proxyLogin | string | Логин для авторизации (если требуется) |
| proxyPassword | string | Пароль для авторизации (если требуется) |
Примеры JSON-запросов
Запрос на создание задачи (Proxyless)
json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "CapyPuzzleTaskProxyless",
"websiteURL": "https://example.com/login",
"websiteKey": "PUZLE_abcdef1234567890"
}
}
Запрос на создание задачи (с вашим прокси)
json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "CapyPuzzleTask",
"websiteURL": "https://example.com/login",
"websiteKey": "PUZLE_abcdef1234567890",
"proxyType": "http",
"proxyAddress": "1.2.3.4",
"proxyPort": 8080,
"proxyLogin": "user",
"proxyPassword": "password"
}
}
Успешный ответ с решением
В отличие от многих других капч, Capy Puzzle возвращает объект solution, содержащий как answer, так и challenge_key. Оба этих значения понадобятся вам для финального запроса на целевом сайте.
json
{
"errorId": 0,
"status": "ready",
"solution": {
"answer": "0xaxakx0xaxaax0xkxx3ox0x3ox3ox...gAAAAABk8bgzEFOg9i3Jm",
"challenge_key": "e0348984-92ec-23af-1488-446e3a58946c"
},
"cost": "0.00299",
"createTime": 1692863536,
"endTime": 1692863556
}
Пошаговая реализация на Python
Шаг 1: Создание задачи
python
import requests
API_KEY = "YOUR_API_KEY"
API_HOST = "api.2captcha.com"
def create_capy_task(website_url, websiteKey):
payload = {
"clientKey": API_KEY,
"task": {
"type": "CapyPuzzleTaskProxyless",
"websiteURL": website_url,
"websiteKey": websiteKey
}
}
response = requests.post(f"https://api.2captcha.com/createTask", json=payload)
return response.json()["taskId"]
Шаг 2: Получение результата
python
import time
def get_capy_result(task_id):
while True:
time.sleep(5)
payload = {
"clientKey": API_KEY,
"taskId": task_id
}
response = requests.post(f"https://api.2captcha.com/getTaskResult", json=payload)
result = response.json()
if result.get("status") == "ready":
return result["solution"]
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.capy(
site_key='PUZLE_abcdef1234567890',
url='https://example.com/login'
)
print(f"Ответ: {result['answer']}")
print(f"Challenge Key: {result['challenge_key']}")
except Exception as e:
print(f"Ошибка при решении: {e}")
Интеграция с Selenium и внедрение ответа
После получения answer и challenge_key вам нужно передать их на сайт. Capy обычно ожидает эти данные в скрытых полях формы или через 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://example.com/login")
time.sleep(3) # Ждем загрузки капчи
# Решаем капчу
solver = TwoCaptcha('YOUR_API_KEY')
result = solver.capy(
site_key='PUZLE_...',
url=driver.current_url
)
# Внедряем полученные данные в скрытые поля (адаптируйте селекторы под ваш конкретный сайт)
driver.execute_script(f"""
let answerInput = document.querySelector('input[name="capy_answer"]');
if (!answerInput) {{
answerInput = document.createElement('input');
answerInput.type = 'hidden';
answerInput.name = 'capy_answer';
document.querySelector('form').appendChild(answerInput);
}}
answerInput.value = '{result["answer"]}';
let challengeInput = document.querySelector('input[name="capy_challenge_key"]');
if (challengeInput) {{
challengeInput.value = '{result["challenge_key"]}';
}}
""")
# Отправляем форму
driver.find_element(By.CSS_SELECTOR, "button[type='submit']").click()
Лучшие практики
1. Точно извлекайте websiteKey
Ключ капчи зашит в URL скрипта или атрибутах iframe. Если вы скопируете его неправильно или обрежете лишние символы, задача не будет решена.
2. Используйте резидентские прокси для строгих сайтов
Capy анализирует сетевой трафик. Если вы решаете капчу через Proxyless, но финальный POST-запрос с ответом уходит с IP-адреса вашего дата-центра, сайт может отклонить токен. В таких случаях используйте тип задачи CapyPuzzleTask и передавайте прокси напрямую в API.
3. Передавайте оба параметра из решения
Многие разработчики по ошибке отправляют только answer. Однако Capy часто требует валидации связки answer и challenge_key. Убедитесь, что вы передаете оба значения в финальном запросе к целевому сайту.
4. Синхронизируйте User-Agent
Если вы используете Selenium или Playwright, передайте User-Agent браузера в параметре userAgent при создании задачи. Это поможет системе Capy связать сессию решения с сессией отправки формы.
Отчеты о правильности решения
Если решение капчи оказалось неверным или вы хотите подтвердить корректный ответ, используйте систему отчетов 2Captcha. Это помогает улучшить качество распознавания и обучает наших работников.
Когда отправлять отчеты
Отправьте reportIncorrect, если:
- Сайт отклонил полученные
answerиchallenge_key - Капча не загрузилась или выдала внутреннюю ошибку после внедрения токена
- Работник пропустил шаг в интерактивной головоломке
Отправьте reportCorrect, если:
- Решение прошло валидацию на сайте, и форма успешно отправилась
- Вы хотите подтвердить высокое качество работы воркера
Параметры отчетов
| Параметр | Тип | Описание |
|---|---|---|
| clientKey | string | Ваш API-ключ |
| taskId | string | ID задачи, полученный при вызове createTask |
Пример отправки отчета
python
import requests
API_KEY = "YOUR_API_KEY"
API_HOST = "api.2captcha.com"
def report_incorrect(task_id):
"""Сообщить о неверном решении Capy Puzzle капчи"""
response = requests.post(
f"https://api.2captcha.com/reportIncorrect",
json={
"clientKey": API_KEY,
"taskId": task_id
}
)
return response.json().get("errorId") == 0
def report_correct(task_id):
"""Сообщить о верном решении Capy Puzzle капчи"""
response = requests.post(
f"https://api.2captcha.com/reportCorrect",
json={
"clientKey": API_KEY,
"taskId": task_id
}
)
return response.json().get("errorId") == 0
Важные моменты для отчетов
- Сохраняйте taskId — обязательно сохраняйте ID задачи в состоянии вашего скрипта, чтобы иметь возможность отправить отчет после проверки ответа на целевом сайте.
- Отправляйте своевременно — отчеты принимаются только в течение определенного времени после решения задачи.
- Не злоупотребляйте — отправляйте
reportIncorrectтолько если вы уверены, что проблема на стороне сервиса, а не из-за вашего IP-адреса или устаревшей сессии на сайте.
Решение частых проблем
Сайт отклоняет ответ (Invalid Token)
Решения:
- Убедитесь, что вы передаете и
answer, иchallenge_key. - Проверьте, не истекло ли время жизни сессии капчи (обычно это 1-2 минуты). Внедряйте ответ сразу после получения.
- Переключитесь на CapyPuzzleTask с резидентским прокси, чтобы IP-адрес при решении совпадал с IP при отправке формы.
Ошибка ERROR_CAPTCHA_UNSOLVABLE
Решения:
- Проверьте правильность скопированного
websiteKey. - Убедитесь, что URL страницы указан полностью и корректно.
- Проверьте, не заблокирован ли домен капчи в вашей сети.
Капча не появляется на странице
Решения:
- Capy может не загружаться, если сайт определяет, что вы используете автоматизацию (Selenium/Puppeteer) без маскировки. Используйте Undetected Chromedriver или stealth-плагины.
Полезные ссылки
- Документация API Capy Puzzle: https://rucaptcha.com/api-docs/capy-puzzle-captcha
- Страница решателя Capy: https://rucaptcha.com/p/capy-puzzle-captcha
- Примеры кода на GitHub: https://github.com/2captcha
- Центр поддержки: https://rucaptcha.com/support/tickets/new
- Как отправлять отчеты: https://rucaptcha.com/h/how-to-submit-reports
Заключение
Обход Capy Puzzle капчи через 2Captcha требует внимательного отношения к извлечению параметров со страницы и правильной передаче полученного решения.
Ключевые выводы:
- Точно извлекайте
websiteKeyсо страницы. - Помните, что решение состоит из двух частей:
answerиchallenge_key. Обе нужно передать на сайт. - Для сайтов со строгой проверкой IP используйте тип задачи CapyPuzzleTask с вашими прокси.
- Внедряйте токены как можно быстрее, пока сессия не истекла.
- Используйте
reportIncorrectиreportCorrectдля поддержания высокого качества решений.
Следуя этим рекомендациям, вы сможете надежно автоматизировать взаимодействие с сайтами, защищенными системой Capy Puzzle.