← К списку статей

Как автоматизировать Tencent CAPTCHA

Getting Started Tutorial Captcha types

07 Sep 2026 г. Автор: Dzmitry

Как автоматизировать Tencent CAPTCHA

Tencent CAPTCHA может заблокировать регистрацию, вход или отправку формы в Selenium, Playwright и других E2E-тестах. Если вы контролируете приложение, используйте тестовый режим Tencent CAPTCHA. В остальных случаях получите решение через Captcha Solver и передайте возвращённый объект в callback страницы.

В руководстве используются официальные Python SDK и JavaScript SDK. В отдельном репозитории с примерами находятся готовые синхронные и асинхронные варианты для обоих языков.

Tencent CAPTCHA

Данные Tencent CAPTCHA#

Для создания задачи нужны три значения:

  • websiteURL — URL страницы с CAPTCHA;
  • appId — идентификатор Tencent CAPTCHA;
  • clientKey — ключ Captcha Solver API.

Tencent CAPTCHA использует appId, а не websiteKey. Найдите его в конфигурации виджета на странице.

Параметр aid Tencent CAPTCHA

Например:

new TencentCaptcha("YOUR_APP_ID", onSolved);

Сохраните ключ API в переменной окружения CAPTCHA_API_KEY, а YOUR_APP_ID замените значением из конфигурации целевой страницы.

Выбор типа задачи#

Captcha Solver поддерживает два типа задач Tencent:

  • TencentTaskProxyless — решение без клиентского прокси;
  • TencentTask — решение через ваш прокси.

Используйте TencentTaskProxyless, если целевой сайт не требует определённого IP или сессии. TencentTask поддерживает прокси http, socks4 и socks5. Логин и пароль прокси необязательны.

Установка SDK#

Python:

pip install captcha-solver-api

JavaScript:

npm install @captcha-solver-api/javascript-sdk

Перед запуском примера задайте ключ API.

Linux и macOS:

export CAPTCHA_API_KEY=your_client_key

Windows PowerShell:

$env:CAPTCHA_API_KEY="your_client_key"

Python: синхронный пример#

import os

from captcha_solver_api import CaptchaClient
from captcha_solver_api.tasks import TencentTaskProxyless

client = CaptchaClient(os.environ["CAPTCHA_API_KEY"])

solution = client.solve(
    TencentTaskProxyless(
        websiteURL="https://example.com/register",
        appId="YOUR_APP_ID",
    )
)

print(solution)

Python: асинхронный пример#

import asyncio
import os

from captcha_solver_api import AsyncCaptchaClient
from captcha_solver_api.tasks import TencentTaskProxyless


async def main():
    client = AsyncCaptchaClient(os.environ["CAPTCHA_API_KEY"])
    solution = await client.solve(
        TencentTaskProxyless(
            websiteURL="https://example.com/register",
            appId="YOUR_APP_ID",
        )
    )
    print(solution)


asyncio.run(main())

JavaScript: пример с Promise#

import { CaptchaClient, Tasks } from '@captcha-solver-api/javascript-sdk';

const client = new CaptchaClient({
  clientKey: process.env.CAPTCHA_API_KEY
});

const task = new Tasks.TencentTaskProxyless({
  websiteURL: 'https://example.com/register',
  appId: 'YOUR_APP_ID'
});

client.solve(task)
  .then((solution) => console.log(solution))
  .catch((error) => console.error(error));

JavaScript: пример с Async/Await#

import { CaptchaClient, Tasks } from '@captcha-solver-api/javascript-sdk';

const client = new CaptchaClient({
  clientKey: process.env.CAPTCHA_API_KEY
});

try {
  const solution = await client.solve(
    new Tasks.TencentTaskProxyless({
      websiteURL: 'https://example.com/register',
      appId: 'YOUR_APP_ID'
    })
  );
  console.log(solution);
} catch (error) {
  console.error(error);
}

Метод solve() в SDK создаёт задачу, опрашивает её статус и возвращает готовое решение.

Решение через клиентский прокси#

Используйте TencentTask вместо TencentTaskProxyless и передайте параметры прокси. Набор полей одинаков для обоих SDK:

const task = new Tasks.TencentTask({
  websiteURL: 'https://example.com/register',
  appId: 'YOUR_APP_ID',
  proxyType: 'http',
  proxyAddress: '1.2.3.4',
  proxyPort: 8080,
  proxyLogin: 'proxy_user',
  proxyPassword: 'proxy_password'
});

Нестандартный URL скрипта Tencent CAPTCHA#

Если страница загружает Tencent CAPTCHA по нестандартному URL, передайте его в captchaScript:

const task = new Tasks.TencentTaskProxyless({
  websiteURL: 'https://example.com/register',
  appId: 'YOUR_APP_ID',
  captchaScript: 'https://example.com/custom/TCaptcha.js'
});

Используйте captchaScript только для страниц, которые действительно загружают нестандартный скрипт Tencent CAPTCHA.

Запрос TCaptcha-global.js

Передача результата в callback#

Captcha Solver возвращает совместимый с Tencent объект:

const solution = {
  appid: "...",
  ret: 0,
  ticket: "...",
  randstr: "..."
};

Передайте весь объект в callback, зарегистрированный страницей:

onSolved(solution);

В параметрах задачи используется appId, а в результате — поле appid. Это ожидаемое различие. Captcha Solver возвращает решение, но не отправляет форму. Тест Selenium или Playwright должен вызвать фактический callback страницы и продолжить сценарий.

Последовательность интеграции#

  1. Откройте страницу с Tencent CAPTCHA.
  2. Получите appId из конфигурации страницы.
  3. Создайте TencentTaskProxyless или TencentTask.
  4. Вызовите solve().
  5. Передайте полный объект результата в callback страницы.
  6. Отправьте форму и продолжите проверки теста.

Запрашивайте решение непосредственно перед отправкой формы и используйте его на той же странице, где была создана CAPTCHA.

Ресурсы#

Итог#

Используйте TencentTaskProxyless для обычного решения или TencentTask, если нужен клиентский прокси. Оба официальных SDK предоставляют единый вызов solve() и поддерживают Promise- или async-сценарии. Передавайте возвращённый объект в callback страницы без изменений.