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

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

Как обойти Amazon CAPTCHA

Как распознать, решить и обойти Amazon капчу с помощью API

Введение

Это руководство поможет разработчикам автоматизировать взаимодействие с сайтами, защищенными Amazon CAPTCHA (AWS WAF CAPTCHA). Мы разберем два метода решения, извлечение необходимых параметров и практическую интеграцию с 2Captcha.

Что понадобится:

  • Аккаунт на 2Captcha
  • API-ключ из личного кабинета
  • Python 3.8 или выше
  • Библиотека requests или официальный SDK
  • Прокси (рекомендуется для стабильности)

1. Общие сведения об Amazon CAPTCHA

1.1. Описание технологии

Amazon CAPTCHA (AWS WAF) — это система защиты, которая предлагает пользователю выполнить одну из трех задач:

  1. Выбор изображений. Нужно отметить все картинки с определенным объектом.
  2. Определение траектории. Пользователь указывает, где окажется объект в конце пути.
  3. Аудиозадача. Требуется распознать и ввести текст из аудио с фоновым шумом.

1.2. Два метода решения

2Captcha поддерживает два подхода к решению Amazon CAPTCHA:

Параметр challenge_script версия jsapiScript версия
Скрипт капчи challengeScript + captchaScript jsapiScript
Дополнительные параметры iv, context Не требуются
Сложность настройки Выше Ниже
Рекомендация Для обратной совместимости Предпочтительный метод

1.3. Типы задач

  • AmazonTaskProxyless. 2Captcha использует собственный пул прокси. Подходит, если у вас нет своих прокси.
  • AmazonTask. Вы передаете свои прокси-серверы. Дает больше контроля и гибкости.

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


2. Подготовка окружения

2.1. Установка зависимостей

bash Copy
pip3 install requests
# Или официальный SDK
pip3 install 2captcha-python

2.2. Получение API-ключа

  1. Зарегистрируйтесь на 2Captcha
  2. Откройте личной кабинет
  3. Скопируйте API-ключ

Для безопасности храните ключ в переменной окружения:

bash Copy
export APIKEY="ваш_ключ_здесь"

3. Анализ страницы и извлечение параметров

3.1. Поиск параметров капчи

Цель: найти websiteKey, iv, context или jsapiScript в коде страницы.

Откройте инструменты разработчика (F12) и перейдите на вкладку Elements. Найдите блок капчи или выполните поиск по ключевым словам: aws-waf-captcha, challenge.js, jsapi.js.

Пример найденных параметров CAPTCHA

3.2. Определение версии капчи

Проверьте, какие скрипты подключены на странице:

  • Если видите challenge.js и captchaScript — используйте challenge_script метод
  • Если видите jsapi.js — используйте jsapiScript метод

3.3. Важные особенности

  1. Параметры обновляются. Значения iv и context действуют ограниченное время (около 30 секунд). Получайте их заново для каждого запроса.
  2. websiteKey может быть постоянным для одного домена, но лучше проверять его актуальность.
  3. jsapiScript упрощает интеграцию. Не нужно извлекать iv и context, достаточно передать URL скрипта.

3.4. Формирование JSON

Пример для challenge_script версии:

json Copy
{
    "clientKey": "YOUR_API_KEY",
    "task": {
        "type": "AmazonTaskProxyless",
        "websiteURL": "https://example.com",
        "challengeScript": "https://.../challenge.js",
        "captchaScript": "https://.../captcha.js",
        "websiteKey": "AQIDA...==",
        "context": "qoJYg...Y=",
        "iv": "CgAAXFFFFSAAABVk"
    }
}

Пример для jsapiScript версии:

json Copy
{
    "clientKey": "YOUR_API_KEY",
    "task": {
        "type": "AmazonTaskProxyless",
        "websiteURL": "https://example.com",
        "jsapiScript": "https://.../jsapi.js",
        "websiteKey": "AQIDA...=="
    }
}

4. Реализация решения на Python

4.1. Полный пример кода (jsapiScript версия)

python Copy
import requests
import time
import os

API_KEY = os.environ.get("APIKEY", "ваш_ключ_здесь")
TARGET_URL = "https://example.com"
JSAPI_SCRIPT = "https://82d925f87a91.edge.captcha-sdk.awswaf.com/82d925f87a91/jsapi.js"
WEBSITE_KEY = "AQIDAHjcYu/Gj...AMGgGCSqGSIb3DQEHATAeBglg"

def create_task():
    """Создает задачу на решение капчи"""
    url = f"https://api.2captcha.com/createTask"
    payload = {
        "clientKey": API_KEY,
        "task": {
            "type": "AmazonTaskProxyless",
            "websiteURL": TARGET_URL,
            "jsapiScript": JSAPI_SCRIPT,
            "websiteKey": WEBSITE_KEY
        }
    }
    response = requests.post(url, json=payload)
    return response.json()

def get_result(task_id):
    """Получает результат решения капчи"""
    url = f"https://api.2captcha.com/getTaskResult"
    payload = {
        "clientKey": API_KEY,
        "taskId": task_id
    }
    response = requests.post(url, json=payload)
    return response.json()

def solve_captcha():
    """Основная функция решения капчи"""
    # Создаем задачу
    create_response = create_task()
    
    if create_response.get("errorId") != 0:
        print(f"Ошибка создания задачи: {create_response}")
        return None
    
    task_id = create_response.get("taskId")
    print(f"Задача создана, taskId: {task_id}")
    
    # Ожидаем решение
    while True:
        time.sleep(5)
        result = get_result(task_id)
        status = result.get("status")
        
        if status == "ready":
            solution = result.get("solution")
            print("Капча решена успешно")
            return solution
        elif status == "processing":
            print("Капча в процессе решения...")
            continue
        elif result.get("errorCode") == "ERROR_CAPTCHA_UNSOLVABLE":
            print("Капча не может быть решена")
            return None
        else:
            print(f"Неизвестный статус: {status}")
            return None

# Запуск
if __name__ == "__main__":
    solution = solve_captcha()
    if solution:
        print(f"captcha_voucher: {solution.get('captcha_voucher')}")
        print(f"existing_token: {solution.get('existing_token')}")

4.2. Пример с использованием своих прокси (AmazonTask)

python Copy
def create_task_with_proxy():
    """Создает задачу с пользовательскими прокси"""
    url = f"https://api.2captcha.com/createTask"
    payload = {
        "clientKey": API_KEY,
        "task": {
            "type": "AmazonTask",
            "websiteURL": TARGET_URL,
            "jsapiScript": JSAPI_SCRIPT,
            "websiteKey": WEBSITE_KEY,
            "proxyType": "http",
            "proxyAddress": "1.2.3.4",
            "proxyPort": 8080,
            "proxyLogin": "user23",
            "proxyPassword": "p4$w0rd"
        }
    }
    response = requests.post(url, json=payload)
    return response.json()

4.3. Пояснения к коду

Блок конфигурации:

  • API_KEY берется из переменной окружения для безопасности
  • Параметры капчи вынесены в отдельные переменные для удобства

Функция create_task:

Функция get_result:

  • Опрос статуса задачи с интервалом 5 секунд
  • Обрабатывает три состояния: processing, ready, error

Обработка решения:

  • Ответ содержит captcha_voucher и existing_token
  • Эти значения передаются на целевой сайт для верификации

5. Альтернативные методы

5.1. Использование официального SDK

python Copy
from twocaptcha import TwoCaptcha

solver = TwoCaptcha(API_KEY)

result = solver.amazon_waf(
    sitekey=WEBSITE_KEY,
    url=TARGET_URL,
    jsapiScript=JSAPI_SCRIPT
)

print(f"Решение: {result['code']}")

5.2. Challenge_script версия (для обратной совместимости)

python Copy
payload = {
    "clientKey": API_KEY,
    "task": {
        "type": "AmazonTaskProxyless",
        "websiteURL": TARGET_URL,
        "challengeScript": "https://.../challenge.js",
        "captchaScript": "https://.../captcha.js",
        "websiteKey": WEBSITE_KEY,
        "context": "test_context",
        "iv": "test_iv"
    }
}

5.3. Настройка таймаутов и повторных попыток

python Copy
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

session = requests.Session()
retry = Retry(total=3, backoff_factor=0.5)
adapter = HTTPAdapter(max_retries=retry)
session.mount("https://", adapter)

# Используйте session вместо requests для устойчивости к сбоям
response = session.post(url, json=payload, timeout=30)

6. Типичные ошибки и решения

Ошибка Возможная причина Решение
ERROR_CAPTCHA_UNSOLVABLE Устаревшие iv/context Получайте свежие параметры для каждого запроса
ERROR_WRONG_USER_KEY Неверный API-ключ Проверьте ключ в личном кабинете
Задача висит в processing Высокая нагрузка или медленный прокси Увеличьте интервал опроса до 10 секунд
Токен не принимается сайтом Неправильное применение решения Проверьте, куда сайт ожидает токен: в форму, заголовок или куки
Ошибка прокси Неверные данные прокси Проверьте формат: proxyAddress, proxyPort, proxyLogin, proxyPassword

6.1. Отладка запросов

python Copy
print(f"Запрос на создание: {payload}")
print(f"Ответ API: {create_response}")
print(f"Решение: {solution}")

7. Применение токена на целевом сайте

Полученные captcha_voucher и existing_token нужно передать на сайт, где появилась капча. Способ зависит от реализации:

  1. Скрытое поле формы. Токен добавляется в <input type="hidden" name="captcha_token">
  2. HTTP-заголовок. Например, X-Amz-Captcha-Token: <значение>
  3. Cookie. Сервер может ожидать токен в куках сессии
  4. JSON-тело запроса. При отправке данных через fetch или axios

Для определения правильного способа:

  • Откройте DevTools, вкладку Network
  • Решите капчу вручную
  • Найдите запрос, который отправляется после успешного решения
  • Изучите параметры, заголовки и тело запроса

8. Как снизить появление капчи

  1. Контролируйте частоту запросов. Делайте паузы между запросами, имитируйте поведение человека.
  2. Используйте реалистичные заголовки. Устанавливайте актуальный User-Agent, Accept-Language и другие стандартные заголовки.
  3. Применяйте качественные прокси. Резидентные или мобильные IP-адреса вызывают меньше подозрений, чем дата-центры.
  4. Ротируйте прокси. При большом объеме запросов меняйте IP-адреса, чтобы избежать блокировки.
  5. Сохраняйте сессию. Используйте куки и поддерживайте состояние браузера между запросами.

9. Дополнительные ресурсы


10. Контрольный список перед запуском

  • Аккаунт на 2Captcha активен, API-ключ скопирован
  • Определена версия капчи: challenge_script или jsapiScript
  • Параметры (websiteKey, iv, context или jsapiScript) извлечены из актуальной страницы
  • Выбран тип задачи: AmazonTaskProxyless или AmazonTask
  • При использовании своих прокси проверены: proxyType, proxyAddress, proxyPort
  • Код обрабатывает статусы: processing, ready, ERROR_CAPTCHA_UNSOLVABLE
  • Реализована логика применения токена на целевом сайте
  • Протестировано в режиме отладки перед запуском в продакшен

Заключение

Решение Amazon CAPTCHA через 2Captcha упрощает автоматизацию задач на защищенных сайтах. Новый параметр jsapiScript делает интеграцию проще: не нужно извлекать iv и context, достаточно передать URL скрипта.

Выбирайте метод под вашу задачу:

  • jsapiScript — если сайт использует новую версию, меньше параметров, проще настройка
  • challenge_script — для обратной совместимости со старыми реализациями

При соблюдении рекомендаций из этого руководства вы сможете стабильно обходить капчу и масштабировать свои решения.