Эта статья была полезной?
Как обойти atbCAPTCHA
Технический специалист
Введение
atbCAPTCHA — это современная система поведенческой защиты, которая начинает набирать популярность среди разработчиков, ищущих альтернативу более известным решениям. Она может выглядеть как интерактивный слайдер, задание на выбор изображений или работать в невидимом режиме. Для автоматизации это означает, что нам нужно получить специальный токен от сервиса решения и корректно внедрить его на целевую страницу.
В этом руководстве мы разберем, как автоматизировать обход atbCAPTCHA с помощью API 2Captcha. Мы найдем необходимые параметры, отправим задачу и интегрируем полученный токен в ваш скрипт согласно официальной документации самой капчи.
Как найти параметры для решения
Чтобы отправить задачу на решение, вам нужно извлечь из страницы или исходного кода критически важные параметры.
Вам понадобятся следующие значения:
- appId — уникальный идентификатор вашей капчи, который передается при инициализации виджета на странице.
- websiteURL — полный адрес страницы, на которой загружена капча. Убедитесь, что вы указываете именно тот URL, который виден в адресной строке браузера.
- apiServer — домен API-сервера atbCAPTCHA, если сайт использует кастомный или нестандартный домен для загрузки скриптов и обращений.
Как их найти на практике:
- Откройте Инструменты разработчика (F12) и перейдите на вкладку Elements или Sources.
- Найдите скрипт инициализации atbCAPTCHA. Обычно это вызов функции инициализации, где передается параметр appId (например, initATBCaptcha('YOUR_APP_ID')).
- Скопируйте значение appId. Если в конфигурации виджета указан кастомный домен для API, скопируйте его в параметр apiServer.
- Убедитесь, что URL страницы (websiteURL) совпадает с тем, что в адресной строке браузера.
Параметры API
API 2Captcha поддерживает два типа задач для atbCAPTCHA: с использованием наших прокси (AtbCaptchaTaskProxyless) и с использованием ваших прокси (AtbCaptchaTask).
Обязательные параметры:
- type — AtbCaptchaTaskProxyless или AtbCaptchaTask
- websiteURL — полный URL целевой страницы
- appId — уникальный идентификатор капчи, полученный со страницы
Опциональные параметры:
- apiServer — полный URL или домен API-сервера atbCAPTCHA, если сайт использует кастомный домен
Параметры прокси (только для AtbCaptchaTask):
- proxyType — тип прокси (http, socks4, socks5)
- proxyAddress — IP-адрес или хост прокси-сервера
- proxyPort — порт прокси-сервера
- proxyLogin — логин для аутентификации (опционально)
- proxyPassword — пароль для аутентификации (опционально)
Примеры JSON запросов
Запрос на создание задачи (Proxyless) выглядит следующим образом:
json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "AtbCaptchaTaskProxyless",
"websiteURL": "https://example.com/page-with-atbcaptcha",
"appId": "YOUR_APP_ID"
}
}
Запрос с использованием кастомного API-сервера:
json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "AtbCaptchaTaskProxyless",
"websiteURL": "https://example.com/page-with-atbcaptcha",
"appId": "YOUR_APP_ID",
"apiServer": "https://custom-api.atbcaptcha.com"
}
}
Запрос с использованием ваших прокси:
json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "AtbCaptchaTask",
"websiteURL": "https://example.com/page-with-atbcaptcha",
"appId": "YOUR_APP_ID",
"proxyType": "http",
"proxyAddress": "1.2.3.4",
"proxyPort": 8080,
"proxyLogin": "user23",
"proxyPassword": "p4$w0rd"
}
}
Запрос на получение результата стандартный:
json
{
"clientKey": "YOUR_API_KEY",
"taskId": "TASK_ID_FROM_CREATE_TASK"
}
Успешный ответ от API будет содержать токен для внедрения:
json
{
"errorId": 0,
"status": "ready",
"solution": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
},
"cost": "0.00299",
"createTime": 1692863536,
"endTime": 1692863556
}
Пошаговая реализация на Python
Создание задачи и получение результата
Сначала напишем базовые функции для отправки капчи и ожидания ответа.
python
import requests
import time
API_KEY = "YOUR_API_KEY"
API_HOST = "api.2captcha.com"
def create_atb_task(url, app_id, api_server=None):
task_data = {
"type": "AtbCaptchaTaskProxyless",
"websiteURL": url,
"appId": app_id
}
if api_server:
task_data["apiServer"] = api_server
payload = {
"clientKey": API_KEY,
"task": task_data
}
response = requests.post(f"https://api.2captcha.com/createTask", json=payload)
return response.json()["taskId"]
def get_atb_result(task_id):
while True:
time.sleep(3)
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"]["token"]
elif result.get("errorId") != 0:
raise Exception(f"Ошибка API: {result.get('errorDescription')}")
Использование через официальный SDK
Если вы не хотите писать циклы опроса вручную, можно использовать официальную библиотеку. Это сильно сокращает код.
python
from twocaptcha import TwoCaptcha
solver = TwoCaptcha('YOUR_API_KEY')
try:
result = solver.atb_captcha(
app_id='YOUR_APP_ID',
url='https://example.com/page-with-atbcaptcha',
api_server='https://custom-api.atbcaptcha.com' # если требуется
)
print(f"Токен получен: {result['token']}")
except Exception as e:
print(f"Ошибка при решении: {e}")
Внедрение решения на страницу
Согласно документации atbCAPTCHA, после получения токена его нужно корректно передать на сайт. Способ внедрения зависит от того, как именно виджет был интегрирован на целевой странице. Обычно используется один из двух подходов.
Вариант 1: Через скрытое поле (hidden input)
Чаще всего atbCAPTCHA создает скрытое поле в DOM-дереве, в которое нужно записать полученный токен. Обычно это поле имеет имя atb-captcha-response или аналогичное.
python
# Находим скрытое поле и вставляем токен
driver.execute_script(f"""
let tokenInput = document.querySelector('input[name="atb-captcha-response"]');
if (tokenInput) {{
tokenInput.value = '{result["token"]}';
}}
""")
Вариант 2: Через callback-функцию
Если при инициализации виджета на сайте была задана функция обратного вызова (например, в параметрах initATBCaptcha указано имя функции), токен нужно передать непосредственно в неё. Имя этой функции нужно искать в исходном коде страницы.
python
# Вызываем callback-функцию, указанную в документации сайта, и передаем туда токен
# Имя функции (например, window.atbCaptchaCallback) нужно заменить на реальное имя с сайта
driver.execute_script(f"window.atbCaptchaCallback('{result["token"]}');")
После внедрения токена любым из этих способов можно отправлять форму или совершать целевое действие на сайте.
Важные нюансы и лучшие практики
atbCAPTCHA может быть чувствительна к сетевым отпечаткам и поведению. Если вы решите капчу с одного IP-адреса, а форму отправите с другого, защита это может заметить.
Всегда используйте качественные резидентские прокси, если целевой сайт строго проверяет IP-адреса. Для этого используйте тип задачи AtbCaptchaTask и передавайте параметры прокси напрямую в API.
Синхронизируйте User-Agent, если это требуется документацией конкретной реализации atbCAPTCHA на сайте. Не затягивайте с отправкой формы. Токены имеют ограниченное время жизни. Как только вы получили токен, сразу же внедряйте его и отправляйте форму.
Отчеты о правильности решения
Если сайт отклонил полученный токен, обязательно сообщите об этом. Это помогает сервису улучшать алгоритмы и возвращает вам средства за неудачную попытку.
Отправить отчет прямо из интерфейса браузера нельзя, но есть два простых способа сделать это:
Первый способ — через личный кабинет. Зайдите в раздел статистики загрузок по адресу https://rucaptcha/statistics/uploads. Найдите в списке нужную задачу и нажмите кнопку Report incorrect.
Второй способ — через API. Если вы пишете автоматизированный скрипт, используйте эндпоинты reportIncorrect и reportCorrect, передавая ваш API ключ и taskId задачи.
Решение частых проблем
Если API возвращает ошибку ERROR_CAPTCHA_UNSOLVABLE, скорее всего, вы неверно скопировали appId или указали неправильный URL страницы. Проверьте исходный код еще раз.
Если сайт принимает токен, но затем все равно блокирует вас или просит пройти капчу заново, проблема почти наверняка в IP-адресе или отпечатках браузера. Проверьте настройки прокси и убедитесь, что вы не используете автоматизацию без маскировки.
Если вы работаете с кастомной реализацией и получаете ошибки, убедитесь, что вы передаете правильный параметр apiServer, если он используется на сайте, и что токен внедряется именно в тот callback или input, который ожидает конкретный сайт.
Полезные ссылки
- Документация API atbCAPTCHA: https://rucaptcha/api-docs/atb-captcha
- Статистика и отправка репортов: https://rucaptcha/statistics/uploads
- Центр поддержки: https://rucaptcha/support/tickets/new
- Примеры кода на GitHub: https://github.com/2captcha
Заключение
Обход atbCAPTCHA через 2Captcha сводится к извлечению appId и URL со страницы, отправке этих данных в API и внедрению полученного токена в форму или callback-функцию согласно документации виджета. Главное помнить про важность использования хороших прокси и быстрой отправки формы, так как токены имеют ограниченное время жизни.