Эта статья была полезной?
Как обойти капчу Alibaba
Технический специалист
Введение
Alibaba CAPTCHA (также известная как Aliyun Captcha) — это популярная система защиты, которую можно встретить на сайтах экосистемы Alibaba, таких как AliExpress, Alibaba.com и многих других. Она часто выглядит как слайдер, который нужно перетащить, или как задание на сбор пазла. Для автоматизации это означает, что нам нужно получить специальные токены от сервиса решения и корректно внедрить их на целевую страницу.
В этом руководстве мы разберем, как автоматизировать обход Alibaba CAPTCHA с помощью API RuCaptcha.
Как найти все необходимые параметры
Для получения параметров, необходимых для создания задачи, потребуется проанализировать сетевой трафик страницы и данные, возвращаемые сервером при появлении капчи.
ВАЖНО: некоторые параметры генерируются динамически и могут отличаться при каждой загрузке страницы, защищённой Alibaba captcha.
Шаг 1. Получение страницы с капчей
- Откройте сайт и выполните действие, которое вызывает появление капчи (например, попытку авторизации).
- Откройте DevTools → Network.
- Найдите запрос, после которого сервер возвращает HTML-страницу капчи вместо обычного JSON-ответа.
В ответе страницы обычно присутствует объект вида:
javascript
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 можно найти альтернативным способом:
- Перейдите во вкладку Network.
- Выполните поиск по ключам: sceneId, CaptchaSceneId, sId.
- Проверьте содержимое запросов и ответов, связанных с проверкой или инициализацией капчи.
Шаг 4. Получение prefix
Параметр prefix обычно содержится в запросах, связанных с загрузкой задания капчи.
Для поиска:
- Найдите запросы, выполняемые при инициализации капчи.
- Откройте URL запроса.
- Найдите параметр 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
{
"sceneId": "...",
"prefix": "...",
"userId": "...",
"userUserId": "...",
"verifyType": "...",
"region": "...",
"UserCertifyId": "...",
"apiGetLib": "..."
}
Дополнительно необходимо сохранить:
json
{
"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
{
"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
{
"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
{
"clientKey": "YOUR_API_KEY",
"taskId": "TASK_ID_FROM_CREATE_TASK"
}
Успешный ответ от API будет содержать токены для внедрения:
json
{
"errorId": 0,
"status": "ready",
"solution": {
"data": {
"tokens": "{\"sceneId\":\"abc123xyz4\",\"certifyId\":\"aBcDeF1234\",\"deviceToken\":\"ABC_WEB#1234...xyz789=\",\"data\":\"AbC123xYz...DeF456qWe789\"}"
}
}
}
Пошаговая реализация на Python
Использование через официальный SDK
python
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
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
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
{
"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-запрос. Главное помнить про важность использования хороших прокси и быстрой отправки формы, так как токены имеют ограниченное время жизни.
Полезные ссылки
- Документация API Alibaba: https://rucaptcha.com/api-docs/alibaba-captcha
- Статистика и отправка репортов: https://rucaptcha.com/statistics/uploads
- Центр поддержки: https://rucaptcha.com/support/tickets/new
- Примеры кода на GitHub: https://github.com/2captcha