Эта статья была полезной?
Как обойти Amazon CAPTCHA

Введение
Это руководство поможет разработчикам автоматизировать взаимодействие с сайтами, защищенными Amazon CAPTCHA (AWS WAF CAPTCHA). Мы разберем два метода решения, извлечение необходимых параметров и практическую интеграцию с 2Captcha.
Что понадобится:
- Аккаунт на 2Captcha
- API-ключ из личного кабинета
- Python 3.8 или выше
- Библиотека
requestsили официальный SDK - Прокси (рекомендуется для стабильности)
1. Общие сведения об Amazon CAPTCHA
1.1. Описание технологии
Amazon CAPTCHA (AWS WAF) — это система защиты, которая предлагает пользователю выполнить одну из трех задач:
- Выбор изображений. Нужно отметить все картинки с определенным объектом.
- Определение траектории. Пользователь указывает, где окажется объект в конце пути.
- Аудиозадача. Требуется распознать и ввести текст из аудио с фоновым шумом.

1.2. Два метода решения
2Captcha поддерживает два подхода к решению Amazon CAPTCHA:
| Параметр | challenge_script версия | jsapiScript версия |
|---|---|---|
| Скрипт капчи | challengeScript + captchaScript |
jsapiScript |
| Дополнительные параметры | iv, context |
Не требуются |
| Сложность настройки | Выше | Ниже |
| Рекомендация | Для обратной совместимости | Предпочтительный метод |
1.3. Типы задач
- AmazonTaskProxyless. 2Captcha использует собственный пул прокси. Подходит, если у вас нет своих прокси.
- AmazonTask. Вы передаете свои прокси-серверы. Дает больше контроля и гибкости.
Аудиозадачи можно решать через метод распознавания аудио, но мы рекомендуем использовать специализированный метод Amazon. Он быстрее и надежнее.
2. Подготовка окружения
2.1. Установка зависимостей
bash
pip3 install requests
# Или официальный SDK
pip3 install 2captcha-python
2.2. Получение API-ключа
- Зарегистрируйтесь на 2Captcha
- Откройте личной кабинет
- Скопируйте API-ключ
Для безопасности храните ключ в переменной окружения:
bash
export APIKEY="ваш_ключ_здесь"
3. Анализ страницы и извлечение параметров
3.1. Поиск параметров капчи
Цель: найти websiteKey, iv, context или jsapiScript в коде страницы.
Откройте инструменты разработчика (F12) и перейдите на вкладку Elements. Найдите блок капчи или выполните поиск по ключевым словам: aws-waf-captcha, challenge.js, jsapi.js.

3.2. Определение версии капчи
Проверьте, какие скрипты подключены на странице:
- Если видите
challenge.jsиcaptchaScript— используйте challenge_script метод - Если видите
jsapi.js— используйте jsapiScript метод
3.3. Важные особенности
- Параметры обновляются. Значения
ivиcontextдействуют ограниченное время (около 30 секунд). Получайте их заново для каждого запроса. - websiteKey может быть постоянным для одного домена, но лучше проверять его актуальность.
- jsapiScript упрощает интеграцию. Не нужно извлекать
ivиcontext, достаточно передать URL скрипта.
3.4. Формирование JSON
Пример для challenge_script версии:
json
{
"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
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "AmazonTaskProxyless",
"websiteURL": "https://example.com",
"jsapiScript": "https://.../jsapi.js",
"websiteKey": "AQIDA...=="
}
}
4. Реализация решения на Python
4.1. Полный пример кода (jsapiScript версия)
python
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
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:
- Отправляет POST-запрос на api.2captcha.com/createTask
- Возвращает JSON с taskId или ошибкой
Функция get_result:
- Опрос статуса задачи с интервалом 5 секунд
- Обрабатывает три состояния: processing, ready, error
Обработка решения:
- Ответ содержит
captcha_voucherиexisting_token - Эти значения передаются на целевой сайт для верификации
5. Альтернативные методы
5.1. Использование официального SDK
python
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
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
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
print(f"Запрос на создание: {payload}")
print(f"Ответ API: {create_response}")
print(f"Решение: {solution}")
7. Применение токена на целевом сайте
Полученные captcha_voucher и existing_token нужно передать на сайт, где появилась капча. Способ зависит от реализации:
- Скрытое поле формы. Токен добавляется в
<input type="hidden" name="captcha_token"> - HTTP-заголовок. Например,
X-Amz-Captcha-Token: <значение> - Cookie. Сервер может ожидать токен в куках сессии
- JSON-тело запроса. При отправке данных через fetch или axios
Для определения правильного способа:
- Откройте DevTools, вкладку Network
- Решите капчу вручную
- Найдите запрос, который отправляется после успешного решения
- Изучите параметры, заголовки и тело запроса
8. Как снизить появление капчи
- Контролируйте частоту запросов. Делайте паузы между запросами, имитируйте поведение человека.
- Используйте реалистичные заголовки. Устанавливайте актуальный User-Agent, Accept-Language и другие стандартные заголовки.
- Применяйте качественные прокси. Резидентные или мобильные IP-адреса вызывают меньше подозрений, чем дата-центры.
- Ротируйте прокси. При большом объеме запросов меняйте IP-адреса, чтобы избежать блокировки.
- Сохраняйте сессию. Используйте куки и поддерживайте состояние браузера между запросами.
9. Дополнительные ресурсы
- Документация API: документация
- Песочница для тестов: включить режим
- Примеры кода на GitHub:
- Поддержка: создать тикет
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 — для обратной совместимости со старыми реализациями
При соблюдении рекомендаций из этого руководства вы сможете стабильно обходить капчу и масштабировать свои решения.