Looking for international version of our service? Go to 2captcha.com

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

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

Как обойти капчу Basilisk

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

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

Введение

Basilisk — это token-based система защиты от ботов, которая использует криптографические проверки для верификации пользователей. В отличие от классических капч с выбором изображений, Basilisk работает в фоновом режиме и возвращает токен, который нужно передать на целевой сайт. При автоматизации важно не только получить токен, но и корректно синхронизировать окружение (в частности, User-Agent) с тем, которое использовалось при генерации решения.

В этом руководстве мы разберем, как автоматизировать обход Basilisk с помощью API RuCaptcha.

Как найти параметры для решения

Чтобы отправить задачу на решение, вам нужно извлечь из страницы или сетевых запросов критически важные параметры.

Вам понадобятся следующие значения:

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

Как их найти на практике:

Способ 1: Через HTML код

  1. Откройте Инструменты разработчика (F12) и перейдите на вкладку Elements.
  2. Найдите контейнер капчи с атрибутом data-sitekey.
  3. Скопируйте значение атрибута data-sitekey — это и есть ваш websiteKey.

Способ 2: Через сетевые запросы

  1. Откройте вкладку Network в инструментах разработчика.
  2. Отфильтруйте запросы по ключевым словам site_key или basilisk.
  3. Найдите POST запрос на https://basiliskcaptcha.com/challenge/check-site.
  4. В 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 Copy
{
    "clientKey": "YOUR_API_KEY",
    "task": {
        "type": "BasiliskTaskProxyless",
        "websiteURL": "https://example.com/page-with-basilisk",
        "websiteKey": "b7890hre5cf2544b2759c19fb2600897"
    }
}

Запрос с использованием ваших прокси:

json Copy
{
    "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 Copy
{
    "clientKey": "YOUR_API_KEY",
    "taskId": "TASK_ID_FROM_CREATE_TASK"
}

Успешный ответ от API будет содержать токен (captcha_response) и заголовки, включая User-Agent, которые использовались при решении:

json Copy
{
    "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 Copy
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 Copy
# Находим скрытое поле и вставляем токен
driver.execute_script(f"""
    let tokenInput = document.querySelector('input[name="captcha_response"]'); // Имя поля может отличаться
    if (tokenInput) {{
        tokenInput.value = '{captcha_response}';
    }}
""")

Через POST-запрос (если вы отправляете данные напрямую через requests):

python Copy
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 Copy
# Создаем сессию и устанавливаем 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 Copy
{
    "clientKey": "YOUR_API_KEY",
    "taskId": "TASK_ID_FROM_CREATE_TASK"
}

Отчет о правильном решении (reportCorrect)

Используется, если сайт принял токен без ошибок. Это помогает сервису поддерживать высокое качество распознавания.

JSON-запрос:

json Copy
{
    "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, и что финальный запрос идет через тот же прокси, что и решение.

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

Заключение

Обход Basilisk через RuCaptcha требует внимания к деталям окружения. Процесс сводится к извлечению websiteKey из атрибута data-sitekey или сетевого запроса, отправке их в API, получению captcha_response и обязательному применению User-Agent из ответа при финальном запросе. Главное помнить про жесткую привязку токена к User-Agent: синхронизация окружения является залогом успешного прохождения защиты.