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

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

Как обойти Capy Puzzle

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

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

Введение

Capy Puzzle капча — это интерактивная система верификации, которая требует от пользователей решения визуальной головоломки, например, сборки пазла или перемещения элемента в определенную позицию. В отличие от простых текстовых капч, Capy генерирует уникальные токены и требует точного совпадения контекста, что делает ее крайне устойчивой к стандартным методам автоматизации и парсинга.

Для разработчиков, занимающихся автоматизацией, тестированием или парсингом, Capy Puzzle капча представляет собой серьезную проблему. Ее нестандартный формат взаимодействия и визуальная сложность делают невозможным обход с помощью традиционных OCR-решений.

В этом руководстве мы подробно разберем, как автоматически обходить Capy Puzzle капчу с помощью API 2Captcha. Мы рассмотрим, как извлечь необходимые параметры со страницы, настроить задачу и корректно внедрить полученное решение на целевой сайт.

Как найти параметры Capy Puzzle капчи на сайте

Для успешного решения капчи вам понадобится один критически важный параметр: websiteKey (часто также называемый sitekey).

  1. Откройте целевую страницу в браузере и запустите инструменты разработчика (F12).
  2. Перейдите на вкладку Elements или Network.
  3. Найдите скрипт или iframe, который загружает капчу Capy. Обычно он содержит параметр websiteKey или sitekey в своем URL или атрибутах.
  4. Скопируйте значение этого ключа. Как правило, это длинная строка, состоящая из букв и цифр.

Параметры 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 Copy
{
    "clientKey": "YOUR_API_KEY",
    "task": {
        "type": "CapyPuzzleTaskProxyless",
        "websiteURL": "https://example.com/login",
        "websiteKey": "PUZLE_abcdef1234567890"
    }
}

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

json Copy
{
    "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 Copy
{
    "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 Copy
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 Copy
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 Copy
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 Copy
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 Copy
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

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

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

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

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

Решения:

  • Убедитесь, что вы передаете и answer, и challenge_key.
  • Проверьте, не истекло ли время жизни сессии капчи (обычно это 1-2 минуты). Внедряйте ответ сразу после получения.
  • Переключитесь на CapyPuzzleTask с резидентским прокси, чтобы IP-адрес при решении совпадал с IP при отправке формы.

Ошибка ERROR_CAPTCHA_UNSOLVABLE

Решения:

  • Проверьте правильность скопированного websiteKey.
  • Убедитесь, что URL страницы указан полностью и корректно.
  • Проверьте, не заблокирован ли домен капчи в вашей сети.

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

Решения:

  • Capy может не загружаться, если сайт определяет, что вы используете автоматизацию (Selenium/Puppeteer) без маскировки. Используйте Undetected Chromedriver или stealth-плагины.

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

Заключение

Обход Capy Puzzle капчи через 2Captcha требует внимательного отношения к извлечению параметров со страницы и правильной передаче полученного решения.

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

  1. Точно извлекайте websiteKey со страницы.
  2. Помните, что решение состоит из двух частей: answer и challenge_key. Обе нужно передать на сайт.
  3. Для сайтов со строгой проверкой IP используйте тип задачи CapyPuzzleTask с вашими прокси.
  4. Внедряйте токены как можно быстрее, пока сессия не истекла.
  5. Используйте reportIncorrect и reportCorrect для поддержания высокого качества решений.

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