Что такое Tencent Captcha (TenDI) и как её решить?
Tencent Captcha – это система защиты от автоматизированных действий, разработанная компанией Tencent. Широко используется на различных онлайн-платформах, таких, как интернет-магазины, социальные сети и финансовые сервисы, для защиты от спама, мошенничества и других видов злоупотреблений.
Основной вид проверки Tencent Captcha – это слайдер, он предлагает пользователю передвинуть ползунок так, чтобы сошлись элементы пазла:

Также встречаются графические капчи, где нужно последовательно нажимать на нужные элементы:

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

Tencent также предлагает интеллектуальную проверку (или "умную проверку"), аналогичную тому, что предлагают многие другие системы, например, reCAPTCHA от Google. Эта умная проверка использует алгоритмы машинного обучения и анализа поведения пользователя для определения того, является ли действие на веб-ресурсе подлинным или представляет собой автоматизированную атаку.
CapMonster Cloud помогает преодолеть большинство различных типов капч, включая и Tencent Captcha. Для этого нужно отправить запрос на сервер в формате JSON методом POST, выглядеть он должен приблизительно так:
{
"clientKey": "dce6bcbb1a728ea8d871de6d169a2057",
"task": {
"type": "CustomTask",
"class": "TenDI",
"websiteURL": "https://domain.com",
"websiteKey": "189123456",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
}
}
Параметры, используемые в запросе:
Пример ответа в случае удачного решения должен быть примерно такой (также в формате JSON):
{
"errorId":0,
"taskId":407533072
}
Пример получения результата решения:
Используется метод getTaskResult:
{
"errorId":0,
"status":"ready",
"solution": {
"data": {
"randstr": "@EcL",
"ticket": "tr03lHU nuW3neJZu.....7LrIbs*"
},
"headers": {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
}
}
}
randstr – это случайная строка, которая является частью решения Tencent Captcha, используется для идентификации и проверки решения капчи.
ticket – это уникальный идентификатор, который также является частью решения капчи, используется для подтверждения правильности решения капчи и получения доступа к защищенному контенту или функциональности.
Для отправки запроса на сервер для автоматического решения необходимо заранее узнать уникальный идентификатор капчи. Найти его достаточно просто: в браузере загрузите нужную страницу с капчей, вызовите саму капчу и откройте Инструменты разработчика. Во вкладке Сеть (Network) среди запросов необходимо найти строку, содержащую ключевое слово “aid” – это и есть идентификатор капчи на заданной странице. Выглядит он примерно так:

Приведём примеры скриптов для решения данного типа капчи на сервере CapMonster Cloud на языках JavaScript и Python.
// Создание задачи для отправки на сервер
async function solveTencentCaptcha(apiKey, pageUrl, captchaKey) {
const solveUrl = 'https://api.capmonster.cloud/createTask';
// Подготовка данных для задачи
const taskData = {
clientKey: apiKey,
task: {
type: 'CustomTask',
class: 'TenDI',
websiteURL: pageUrl,
websiteKey: captchaKey,
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36'
}
};
try {
// Отправка POST-запроса для создания задачи
const responseData = await postJson(solveUrl, taskData);
// Извлечение id капчи
return responseData.taskId;
} catch (error) {
// Обработка ошибок при отправке запроса
console.error('Ошибка при отправке запроса:', error.message);
return null;
}
}
async function getCaptchaSolution(apiKey, taskId) {
// URL для запроса результатов задачи
const resultUrl = 'https://api.capmonster.cloud/getTaskResult';
// Подготовка данных для запроса результатов
const resultData = { clientKey: apiKey, taskId: taskId };
// Цикл для запроса результатов задачи с лимитом 15 попыток
for (let i = 0; i < 15; i++) {
try {
// Отправка POST-запроса для получения результатов задачи
const responseData = await postJson(resultUrl, resultData);
// Проверка статуса задачи
if (responseData.status === 'ready') return responseData;
} catch (error) {
// Обработка ошибок при получении результатов
console.error('Ошибка при получении результата:', error.message);
}
// Ожидание 1 секунды перед следующей попыткой
await sleep(1000);
}
// Вывод сообщения об ошибке, если не удалось получить результат за 15 попыток
console.error('Не удалось получить результат за 15 попыток');
return null;
}
// Функция для отправки POST-запросов с данными JSON
async function postJson(url, data) {
const response = await fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)
});
return response.json();
}
// Функция для приостановки выполнения на заданное время
async function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// Основная функция, запускающая процесс решения капчи
async function main() {
const apiKey = 'YOUR_CAPMONSTER_API';
const pageUrl = 'https://example.com';
const captchaKey = '189939991';
// Решение капчи
const taskId = await solveTencentCaptcha(apiKey, pageUrl, captchaKey);
console.log("Task ID:", taskId);
if (taskId) {
// Получение результатов задачи
const resultData = await getCaptchaSolution(apiKey, taskId);
if (resultData) console.log("Результат:", resultData);
}
}
main();
# Импорт необходимых библиотек
import requests
import time
# Функция для отправки запроса на создание задачи решения капчи
def solve_tencent_captcha(api_key, page_url, captcha_key):
# URL для отправки запроса на создание задачи
solve_url = 'https://api.capmonster.cloud/createTask'
# Подготовка данных для задачи
task_data = {
"clientKey": api_key,
"task": {
"type": "CustomTask",
"class": "TenDI",
"websiteURL": page_url,
"websiteKey": captcha_key,
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
}
}
# Отправка POST-запроса
response = requests.post(solve_url, json=task_data)
# Получение данных из ответа и возврат идентификатора задачи
response_data = response.json()
task_id = response_data.get('taskId')
return task_id
# Функция для получения решения капчи
def get_captcha_solution(api_key, task_id):
# URL получения результата задачи
result_url = 'https://api.capmonster.cloud/getTaskResult'
# Подготовка данных для запроса результата
result_data = {
"clientKey": api_key,
"taskId": task_id
}
# Параметры для ограничения числа попыток получения результата
attempts = 0
max_attempts = 15
# Цикл для повторных запросов результата
while attempts < max_attempts:
# Отправка POST-запроса для получения результата
response = requests.post(result_url, json=result_data)
response_data = response.json()
# Проверка статуса ответа
if response_data['status'] == 'ready':
return response_data
# Ожидание 1 секунды перед следующим запросом
time.sleep(1)
attempts += 1
# Вывод сообщения, если превышено максимальное число попыток
print("Превышено количество попыток получения результата")
return None
# Основная функция
def main():
api_key = 'YOUR_CAPMONSTER_API'
page_url = 'https://example.com'
captcha_key = '189939991'
# Решение капчи и получение идентификатора задачи
task_id = solve_tencent_captcha(api_key, page_url, captcha_key)
print("Task ID:", task_id)
# Если задача успешно создана, повторяем запросы для получения результата
if task_id:
result_data = get_captcha_solution(api_key, task_id)
print("Результат:", result_data)
# Запуск основной функции при запуске скрипта
if __name__ == "__main__":
main()
Ознакомьтесь с нашими инструментами и решениями для легкого решения Tencent Captcha и других типов CAPTCHA:
Расширение CapMonster Cloud для браузера Chrome / Firefox
NB: Напоминаем, что продукт используется для автоматизации тестирования на ваших собственных сайтах и на сайтах, к которым у вас есть доступ на законных основаниях.