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

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

Getting Started Tutorial Captcha types

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

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

Tencent CAPTCHA может заблокировать автоматизированный сценарий при регистрации, входе или отправке формы. Это часто происходит в Selenium, Playwright и других E2E-тестах.

Если вы контролируете конфигурацию приложения, используйте тестовый режим Tencent CAPTCHA. Если тест работает с реальной CAPTCHA или изменить конфигурацию нельзя, получите результат через Captcha Solver и передайте его callback страницы.

Ниже показана интеграция Tencent CAPTCHA с официальным Python SDK Captcha Solver.

Tencent CAPTCHA

Данные Tencent CAPTCHA#

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

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

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

Параметр aid Tencent CAPTCHA

Например:

new TencentCaptcha("YOUR_APP_ID", onSolved);

Замените YOUR_APP_ID на значение из конфигурации целевой страницы.

В Python SDK передайте ключ первым аргументом в CaptchaClient. В примерах ниже ключ хранится в переменной окружения CAPTCHA_API_KEY.

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

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

  • TencentTaskProxyless — решение без клиентского прокси;
  • TencentTask — решение через клиентский прокси. Используйте TencentTaskProxyless, если решение не требует определённого прокси. Используйте TencentTask, если запрос на решение должен выполняться через ваш прокси.

Установка Python SDK#

SDK доступен в репозитории Captcha Solver Python SDK. Установите его напрямую из GitHub:

pip install git+https://github.com/captcha-solver-api/python-sdk.git

Сохраните clientKey в переменной окружения CAPTCHA_API_KEY. Linux и macOS:

export CAPTCHA_API_KEY=your_client_key

Windows PowerShell:

$env:CAPTCHA_API_KEY="your_client_key"

Решение Tencent CAPTCHA без прокси#

Используйте TencentTaskProxyless, если клиентский прокси не требуется:

import os
from captcha_sdk import CaptchaClient
from captcha_sdk.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)

Замените:

  • https://example.com/register на URL страницы с CAPTCHA;
  • YOUR_APP_ID на appId из конфигурации Tencent CAPTCHA. Метод solve() создаёт задачу, проверяет её статус и возвращает результат после завершения решения:
{
    "appid": "...",
    "ret": 0,
    "ticket": "...",
    "randstr": "..."
}

Передайте весь объект результата в callback страницы.

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

Если запрос на решение должен использовать ваш прокси, создайте TencentTask:

import os
from captcha_sdk import CaptchaClient
from captcha_sdk.tasks import TencentTask
client = CaptchaClient(os.environ["CAPTCHA_API_KEY"])
solution = client.solve(
    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",
    )
)
print(solution)

Поддерживаются следующие типы прокси:

  • http;
  • socks4;
  • socks5. Если прокси не требует авторизации, параметры proxyLogin и proxyPassword можно не указывать.

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

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

import os
from captcha_sdk import CaptchaClient
from captcha_sdk.tasks import TencentTaskProxyless
client = CaptchaClient(os.environ["CAPTCHA_API_KEY"])
solution = client.solve(
    TencentTaskProxyless(
        websiteURL="https://example.com/register",
        appId="YOUR_APP_ID",
        captchaScript="https://example.com/custom/TCaptcha.js",
    )
)
print(solution)

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

Запрос TCaptcha-global.js

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

Tencent CAPTCHA возвращает объект с результатом проверки:

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

Передайте этот объект в callback, указанный при инициализации CAPTCHA:

onSolved(solution);

onSolved здесь является только примером. Вызовите фактический callback, который страница зарегистрировала при создании TencentCaptcha.

В параметрах задачи используется appId, а в возвращаемом объекте поле называется appid. Это ожидаемое различие.

Captcha Solver возвращает результат, но не управляет отправкой формы. E2E-тест должен передать объект из Python-процесса в браузер и вызвать callback страницы. Способ передачи зависит от тестовой инфраструктуры. Например, Selenium или Playwright могут выполнить JavaScript в браузере и вызвать callback с полученным результатом.

Интеграция с E2E-тестом#

Для Tencent CAPTCHA последовательность действий выглядит так:

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

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

Асинхронное решение#

Для асинхронной тестовой инфраструктуры используйте AsyncCaptchaClient:

import asyncio
import os
from captcha_sdk import AsyncCaptchaClient
from captcha_sdk.tasks import TencentTaskProxyless
async def solve_tencent():
    client = AsyncCaptchaClient(os.environ["CAPTCHA_API_KEY"])
    try:
        return await client.solve(
            TencentTaskProxyless(
                websiteURL="https://example.com/register",
                appId="YOUR_APP_ID",
            )
        )
    finally:
        await client.aclose()
solution = asyncio.run(solve_tencent())
print(solution)

solve() создаёт задачу, проверяет её статус и возвращает результат после завершения решения.

Проверка интеграции#

Перед запуском теста проверьте:

  • websiteURL указывает на страницу с Tencent CAPTCHA;
  • appId совпадает с конфигурацией виджета;
  • CAPTCHA_API_KEY содержит действительный clientKey;
  • captchaScript используется только при нестандартном URL скрипта;
  • TencentTask содержит proxyType, proxyAddress и proxyPort;
  • callback получает весь объект результата;
  • тест передаёт результат в ту же страницу, в которой была создана CAPTCHA.

Ресурсы#

Итог#

Для автоматизации Tencent CAPTCHA используйте один из двух типов задач:

  • TencentTaskProxyless — если клиентский прокси не нужен;
  • TencentTask — если решение должно выполняться через ваш прокси. Передайте в задачу websiteURL и appId, вызовите client.solve() и передайте возвращённый объект callback страницы. Для асинхронных сценариев используйте AsyncCaptchaClient. Если страница использует нестандартный URL скрипта Tencent CAPTCHA, укажите captchaScript.