Эта статья была полезной?
Как обойти капчу Basilisk
Технический специалист
Введение
Basilisk — это token-based система защиты от ботов, которая использует криптографические проверки для верификации пользователей. В отличие от классических капч с выбором изображений, Basilisk работает в фоновом режиме и возвращает токен, который нужно передать на целевой сайт. При автоматизации важно не только получить токен, но и корректно синхронизировать окружение (в частности, User-Agent) с тем, которое использовалось при генерации решения.
В этом руководстве мы разберем, как автоматизировать обход Basilisk с помощью API RuCaptcha.
Как найти параметры для решения
Чтобы отправить задачу на решение, вам нужно извлечь из страницы или сетевых запросов критически важные параметры.
Вам понадобятся следующие значения:
- websiteURL — полный адрес страницы, на которой загружена капча. Убедитесь, что вы указываете именно тот URL, который виден в адресной строке браузера.
- websiteKey — уникальный ключ капчи.
Как их найти на практике:
Способ 1: Через HTML код
- Откройте Инструменты разработчика (F12) и перейдите на вкладку Elements.
- Найдите контейнер капчи с атрибутом data-sitekey.
- Скопируйте значение атрибута data-sitekey — это и есть ваш websiteKey.
Способ 2: Через сетевые запросы
- Откройте вкладку Network в инструментах разработчика.
- Отфильтруйте запросы по ключевым словам site_key или basilisk.
- Найдите POST запрос на https://basiliskcaptcha.com/challenge/check-site.
- В payload запроса найдите поле site_key — это ваш websiteKey.
Параметры API
API RuCaptcha поддерживает два типа задач для Basilisk: с использованием наших прокси (BasiliskTaskProxyless) и с использованием ваших прокси (BasiliskTask). Все параметры, которые необходимо передать при создании задачи, представлены в таблице ниже:
| Параметр | Обязательность | Описание |
|---|---|---|
| type | Да | Тип задачи. Указывайте BasiliskTaskProxyless или BasiliskTask |
| websiteURL | Да | Полный URL-адрес целевой веб-страницы |
| websiteKey | Да | Уникальный ключ капчи, полученный из атрибута data-sitekey или из POST запроса |
| proxyType | Нет | Тип прокси (http, socks4, socks5). Обязательно для типа BasiliskTask |
| proxyAddress | Нет | IP-адрес прокси-сервера или имя хоста |
| proxyPort | Нет | Порт прокси-сервера |
| proxyLogin | Нет | Логин для аутентификации на прокси-сервере |
| proxyPassword | Нет | Пароль для аутентификации на прокси-сервере |
| userAgent | Нет | User-Agent браузера. Рекомендуется передавать тот же, что используется в вашем скрипте |
Примеры JSON запросов
Запрос на создание задачи (Proxyless):
json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "BasiliskTaskProxyless",
"websiteURL": "https://example.com/page-with-basilisk",
"websiteKey": "b7890hre5cf2544b2759c19fb2600897"
}
}
Запрос с использованием ваших прокси:
json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "BasiliskTask",
"websiteURL": "https://example.com/page-with-basilisk",
"websiteKey": "b7890hre5cf2544b2759c19fb2600897",
"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 будет содержать токен (captcha_response) и заголовки, включая User-Agent, которые использовались при решении:
json
{
"errorId": 0,
"status": "ready",
"solution": {
"captcha_response": "5620301f30daf284b829fba66fa9b3d0",
"headers": {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36"
}
},
"cost": "0.00299",
"createTime": 1692863536,
"endTime": 1692863556
}
Пошаговая реализация на Python
Получение решения и подготовка окружения
Самый важный этап при работе с Basilisk — это правильная обработка ответа от API. Вам нужно извлечь captcha_response для передачи на сайт и обязательно применить User-Agent из ответа headers.
python
import requests
from twocaptcha import TwoCaptcha
API_KEY = "YOUR_API_KEY"
solver = TwoCaptcha(API_KEY)
try:
result = solver.basilisk(
website_key='b7890hre5cf2544b2759c19fb2600897',
url='https://example.com/page-with-basilisk'
)
# Извлекаем ответ капчи и User-Agent из решения
captcha_response = result['captcha_response']
required_user_agent = result['headers']['User-Agent']
print(f"Токен получен: {captcha_response}")
print(f"Необходимый User-Agent: {required_user_agent}")
except Exception as e:
print(f"Ошибка при решении: {e}")
Внедрение решения на целевой сайт
После того как вы получили ответ, его нужно корректно передать на целевой сайт. Здесь есть два критических правила.
1. Передача captcha_response
Значение captcha_response нужно передать на целевой сайт как ответ Basilisk. В зависимости от того, как виджет интегрирован на странице, это делается одним из двух способов:
Через скрытое поле (если используется форма):
python
# Находим скрытое поле и вставляем токен
driver.execute_script(f"""
let tokenInput = document.querySelector('input[name="captcha_response"]'); // Имя поля может отличаться
if (tokenInput) {{
tokenInput.value = '{captcha_response}';
}}
""")
Через POST-запрос (если вы отправляете данные напрямую через requests):
python
payload = {
'username': 'my_user',
'password': 'my_password',
'captcha_response': captcha_response # Передаем токен в теле запроса
}
2. Синхронизация User-Agent
Если в решении от API пришел headers.User-Agent, вы обязаны использовать точно тот же User-Agent в финальном запросе к сайту. Basilisk привязывает криптографический proof к конкретному User-Agent. Если вы отправите форму с другим User-Agent, сервер это заметит и отклонит токен.
python
# Создаем сессию и устанавливаем User-Agent из ответа API
session = requests.Session()
session.headers.update({
'User-Agent': required_user_agent,
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
})
# Отправляем финальный запрос с токеном и правильным User-Agent
response = session.post('https://example.com/login', data=payload)
print("Статус ответа:", response.status_code)
Если вы используете Selenium или Playwright, вам нужно будет перезапустить браузер или обновить профиль с тем User-Agent, который пришел в ответе API, перед отправкой формы.
Важные нюансы и лучшие практики
Basilisk очень чувствительна к сетевым отпечаткам. Если вы решите капчу с одного IP-адреса, а форму отправите с другого, защита это мгновенно заметит.
Всегда используйте качественные резидентские прокси, если целевой сайт строго проверяет IP-адреса. Для этого используйте тип задачи BasiliskTask и передавайте параметры прокси напрямую в API. Прокси, используемый для решения, и прокси, используемый для финального запроса, должны быть идентичны.
Не затягивайте с отправкой формы. Токены Basilisk имеют ограниченное время жизни. Как только вы получили captcha_response, сразу же внедряйте его и отправляйте форму, используя правильный User-Agent.
Отчеты о правильности решения
Если сайт отклонил полученный токен, обязательно сообщите об этом. Это помогает сервису улучшать алгоритмы и возвращает вам средства за неудачную попытку. Отправить отчет можно через личный кабинет или напрямую через API.
Отправка отчетов через HTTP-запросы
API RuCaptcha предоставляет два эндпоинта для отправки отчетов.
Отчет о неверном решении (reportIncorrect)
Используется, если сайт отклонил токен. Средства за задачу будут возвращены на ваш баланс.
JSON-запрос:
json
{
"clientKey": "YOUR_API_KEY",
"taskId": "TASK_ID_FROM_CREATE_TASK"
}
Отчет о правильном решении (reportCorrect)
Используется, если сайт принял токен без ошибок. Это помогает сервису поддерживать высокое качество распознавания.
JSON-запрос:
json
{
"clientKey": "YOUR_API_KEY",
"taskId": "TASK_ID_FROM_CREATE_TASK"
}
Решение частых проблем
Если API возвращает ошибку ERROR_CAPTCHA_UNSOLVABLE, скорее всего, вы неверно скопировали websiteKey или указали неправильный URL страницы. Проверьте исходный код еще раз.
Если сайт принимает токен, но затем все равно блокирует вас или просит пройти капчу заново, проблема почти наверняка в User-Agent или IP-адресе. Убедитесь, что вы используете тот самый User-Agent, который пришел в поле headers.User-Agent ответа API, и что финальный запрос идет через тот же прокси, что и решение.
Полезные ссылки
- Документация API Basilisk: https://rucaptcha.com/api-docs/basilisk-captcha
- Отправка отчетов через API: https://rucaptcha.com/api-docs/report-correct и https://rucaptcha.com/api-docs/report-incorrect
- Подробный гайд по отправке отчетов: https://rucaptcha.com/h/how-to-submit-reports
- Статистика и отправка репортов через интерфейс: https://rucaptcha.com/statistics/uploads
- Центр поддержки: https://rucaptcha.com/support/tickets/new
- Примеры кода на GitHub: https://github.com/2captcha
Заключение
Обход Basilisk через RuCaptcha требует внимания к деталям окружения. Процесс сводится к извлечению websiteKey из атрибута data-sitekey или сетевого запроса, отправке их в API, получению captcha_response и обязательному применению User-Agent из ответа при финальном запросе. Главное помнить про жесткую привязку токена к User-Agent: синхронизация окружения является залогом успешного прохождения защиты.