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

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

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

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

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

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

Введение

Alibaba CAPTCHA (также известная как Aliyun Captcha) — это популярная система защиты, которую можно встретить на сайтах экосистемы Alibaba, таких как AliExpress, Alibaba.com и многих других. Она часто выглядит как слайдер, который нужно перетащить, или как задание на сбор пазла. Для автоматизации это означает, что нам нужно получить специальные токены от сервиса решения и корректно внедрить их на целевую страницу.

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

Как найти все необходимые параметры

Для получения параметров, необходимых для создания задачи, потребуется проанализировать сетевой трафик страницы и данные, возвращаемые сервером при появлении капчи.

ВАЖНО: некоторые параметры генерируются динамически и могут отличаться при каждой загрузке страницы, защищённой Alibaba captcha.

Шаг 1. Получение страницы с капчей

  1. Откройте сайт и выполните действие, которое вызывает появление капчи (например, попытку авторизации).
  2. Откройте DevTools → Network.
  3. Найдите запрос, после которого сервер возвращает HTML-страницу капчи вместо обычного JSON-ответа.

В ответе страницы обычно присутствует объект вида:

javascript Copy
var requestInfo = {
  data,
  region,
  sceneId,
  token,
  traceid,
  type,
  userId,
  userUserId
}

Шаг 2. Извлечение параметров из requestInfo

Из объекта requestInfo необходимо получить следующие значения:

Параметр задачи Источник
sceneId поле sceneId
userId поле userId
userUserId поле userUserId
verifyType поле type
region поле region
UserCertifyId поле traceid

Дополнительно необходимо сохранить:

Параметр Источник
u_atoken значение token
u_asig значение traceid

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

Шаг 3. Поиск sceneId через сетевые запросы

Если объект requestInfo отсутствует или обфусцирован, значение sceneId можно найти альтернативным способом:

  1. Перейдите во вкладку Network.
  2. Выполните поиск по ключам: sceneId, CaptchaSceneId, sId.
  3. Проверьте содержимое запросов и ответов, связанных с проверкой или инициализацией капчи.

Шаг 4. Получение prefix

Параметр prefix обычно содержится в запросах, связанных с загрузкой задания капчи.

Для поиска:

  1. Найдите запросы, выполняемые при инициализации капчи.
  2. Откройте URL запроса.
  3. Найдите параметр prefix в строке запроса, параметрах URL или в теле ответа сервера.

Если URL имеет вид: https://dlw3kug.captcha-open.example.aliyuncs.com/, то значение параметра prefix соответствует поддомену — dlw3kug.

Шаг 5. Получение apiGetLib

Параметр apiGetLib представляет собой ссылку на JavaScript-библиотеку капчи.

Обычно её можно получить одним из следующих способов:

  • Найти тег <script> на странице капчи, содержащий загрузку библиотеки.
  • Найти запрос к файлу AliyunCaptcha.js во вкладке Network.
  • Сформировать URL по шаблону, используемому сайтом.

Пример: https://o.example.com/captcha-frontend/aliyunCaptcha/AliyunCaptcha.js?t=2041

Итоговый набор параметров

В результате должны быть получены следующие значения:

json Copy
{
  "sceneId": "...",
  "prefix": "...",
  "userId": "...",
  "userUserId": "...",
  "verifyType": "...",
  "region": "...",
  "UserCertifyId": "...",
  "apiGetLib": "..."
}

Дополнительно необходимо сохранить:

json Copy
{
  "u_atoken": "...",
  "u_asig": "..."
}

Эти значения используются для повторного выполнения запроса после получения решения капчи.

Параметры API

API RuCaptcha поддерживает два типа задач для Alibaba: с использованием наших прокси (AlibabaTaskProxyless) и с использованием ваших прокси (AlibabaTask).

Параметр Обязательность Описание
type Да Тип задачи. Указывайте AlibabaTaskProxyless или AlibabaTask
websiteURL Да Полный URL-адрес целевой веб-страницы
sceneId Да Идентификатор сценария капчи (извлекается из requestInfo или сетевых запросов)
prefix Да Параметр инициализации капчи, обычно соответствует поддомену в URL запроса к капче
userId Нет Уникальный идентификатор пользователя или сессии на стороне сайта
userUserId Нет Дополнительный (вторичный) идентификатор пользователя
verifyType Нет Версия или тип механизма проверки капчи
region Нет Регион сервера или дата-центра, через который обрабатывается капча
UserCertifyId Нет Уникальный ID проверки, связанный с текущей сессией капчи
apiGetLib Нет Ссылка на JS-библиотеку капчи, используемую сайтом
userAgent Нет User-Agent браузера, с которым открывается страница
proxyType Нет Тип прокси (http, socks4, socks5). Обязательно для типа AlibabaTask
proxyAddress Нет IP-адрес прокси-сервера или имя хоста
proxyPort Нет Порт прокси-сервера
proxyLogin Нет Логин для аутентификации на прокси-сервере
proxyPassword Нет Пароль для аутентификации на прокси-сервере

Примеры JSON запросов

Запрос на создание задачи (Proxyless):

json Copy
{
   "clientKey":"YOUR_API_KEY",
   "task":{
      "type":"AlibabaTaskProxyless",
      "websiteUrl":"https://www.example.com",
      "sceneId":"abc123xyz4",
      "prefix":"def456gh",
      "userId":"Abc123Def456Ghi789Jkl012Mno345Pqr678Stu901=",
      "userUserId":"Xyz987Abc654Def321Ghi098Jkl765Mno432Pqr109=",
      "verifyType":"1.0",
      "region":"sgp",
      "UserCertifyId":"abc123def456ghi789jkl012mno345pq",
      "apiGetLib":"https://o.example.com/captcha-frontend/aliyunCaptcha/AliyunCaptcha.js?t=1234",
      "userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36"
   }
}

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

json Copy
{
   "clientKey":"YOUR_API_KEY",
   "task":{
      "type":"AlibabaTask",
      "websiteUrl":"https://www.example.com",
      "sceneId":"abc123xyz4",
      "prefix":"def456gh",
      "userId":"Abc123Def456Ghi789Jkl012Mno345Pqr678Stu901=",
      "userUserId":"Xyz987Abc654Def321Ghi098Jkl765Mno432Pqr109=",
      "verifyType":"1.0",
      "region":"sgp",
      "UserCertifyId":"abc123def456ghi789jkl012mno345pq",
      "apiGetLib":"https://o.example.com/captcha-frontend/aliyunCaptcha/AliyunCaptcha.js?t=1234",
      "userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36",
      "proxyType":"http",
      "proxyAddress":"1.2.3.4",
      "proxyPort":8080,
      "proxyLogin":"login",
      "proxyPassword":"password"
   }
}

Запрос на получение результата стандартный:

json Copy
{
    "clientKey": "YOUR_API_KEY",
    "taskId": "TASK_ID_FROM_CREATE_TASK"
}

Успешный ответ от API будет содержать токены для внедрения:

json Copy
{
  "errorId": 0,
  "status": "ready",
  "solution": {
    "data": {
      "tokens": "{\"sceneId\":\"abc123xyz4\",\"certifyId\":\"aBcDeF1234\",\"deviceToken\":\"ABC_WEB#1234...xyz789=\",\"data\":\"AbC123xYz...DeF456qWe789\"}"
    }
  }
}

Пошаговая реализация на Python

Использование через официальный SDK

python Copy
from twocaptcha import TwoCaptcha

solver = TwoCaptcha('YOUR_API_KEY')

try:
    result = solver.alibaba(
        scene_id='abc123xyz4',
        prefix='def456gh',
        url='https://www.example.com',
        user_id='Abc123Def456Ghi789Jkl012Mno345Pqr678Stu901=',
        user_user_id='Xyz987Abc654Def321Ghi098Jkl765Mno432Pqr109=',
        verify_type='1.0',
        region='sgp',
        user_certify_id='abc123def456ghi789jkl012mno345pq',
        api_get_lib='https://o.example.com/captcha-frontend/aliyunCaptcha/AliyunCaptcha.js?t=1234',
        user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36'
    )
    print(f"Решение получено: {result}")
except Exception as e:
    print(f"Ошибка при решении: {e}")

Внедрение решения на страницу

После того как вы получили ответ от API, его нужно корректно передать на целевой сайт. Ответ содержит объект data с tokens, который нужно распарсить и внедрить.

python Copy
import json
from twocaptcha import TwoCaptcha

solver = TwoCaptcha('YOUR_API_KEY')

try:
    result = solver.alibaba(
        scene_id='abc123xyz4',
        prefix='def456gh',
        url='https://www.example.com'
    )
    
    # Парсим tokens из ответа
    tokens_data = json.loads(result['data']['tokens'])
    
    # Извлекаем необходимые значения
    certify_id = tokens_data['certifyId']
    device_token = tokens_data['deviceToken']
    data = tokens_data['data']
    
    # Внедряем токены через JavaScript
    driver.execute_script(f"""
        let certifyInput = document.querySelector('input[name="certifyId"]');
        let deviceTokenInput = document.querySelector('input[name="deviceToken"]');
        let dataInput = document.querySelector('input[name="data"]');
        
        if (certifyInput) certifyInput.value = '{certify_id}';
        if (deviceTokenInput) deviceTokenInput.value = '{device_token}';
        if (dataInput) dataInput.value = '{data}';
    """)
    
except Exception as e:
    print(f"Ошибка: {e}")

Если вы отправляете данные напрямую через POST-запрос, просто добавьте эти параметры в тело запроса:

python Copy
payload = {
    'username': 'my_user',
    'password': 'my_password',
    'certifyId': certify_id,
    'deviceToken': device_token,
    'data': data
}

Важные нюансы и лучшие практики

Alibaba CAPTCHA очень чувствительна к сетевым отпечаткам и IP-адресам. Если вы решите капчу с одного IP-адреса, а форму отправите с другого, защита это мгновенно заметит.

Всегда используйте качественные резидентские прокси, если целевой сайт строго проверяет IP-адреса. Для этого используйте тип задачи AlibabaTask и передавайте параметры прокси напрямую в API. Прокси, используемый для решения, и прокси, используемый для финального запроса, должны быть идентичны.

Не затягивайте с отправкой формы. Токены Alibaba имеют ограниченное время жизни. Как только вы получили решение, сразу же внедряйте его и отправляйте форму.

Используйте сохранённые значения u_atoken и u_asig при повторной отправке запроса после успешного решения капчи.

Отчеты о правильности решения

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

Отправить отчет можно через API, используя эндпоинты reportIncorrect и reportCorrect.

Пример JSON-запроса:

json Copy
{
    "clientKey": "YOUR_API_KEY",
    "taskId": "TASK_ID_FROM_CREATE_TASK"
}

Решение частых проблем

Если API возвращает ошибку ERROR_CAPTCHA_UNSOLVABLE, скорее всего, вы неверно скопировали sceneId или prefix. Проверьте исходный код и сетевые запросы еще раз.

Если сайт принимает токены, но затем все равно блокирует вас или просит пройти капчу заново, проблема почти наверняка в IP-адресе. Проверьте настройки прокси и убедитесь, что вы используете один и тот же IP для решения и для отправки финальной формы.

Если объект requestInfo обфусцирован или отсутствует, используйте альтернативный метод поиска sceneId через сетевые запросы (поиск по ключам sceneId, CaptchaSceneId, sId).

Заключение

Обход Alibaba CAPTCHA через RuCaptcha сводится к извлечению sceneId и prefix со страницы, отправке этих данных в API и внедрению полученных токенов (certifyId, deviceToken, data) в форму или POST-запрос. Главное помнить про важность использования хороших прокси и быстрой отправки формы, так как токены имеют ограниченное время жизни.

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