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

Данные Tencent CAPTCHA#
Для создания задачи нужны три значения:
websiteURL— URL страницы с CAPTCHA;appId— идентификатор Tencent CAPTCHA;clientKey— ключ Captcha Solver API.
Tencent CAPTCHA использует appId, а не websiteKey. Найдите его в конфигурации виджета на странице.

Например:
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.

Передача результата в callback#
Captcha Solver возвращает совместимый с Tencent объект:
const solution = {
appid: "...",
ret: 0,
ticket: "...",
randstr: "..."
};
Передайте весь объект в callback, зарегистрированный страницей:
onSolved(solution);
В параметрах задачи используется appId, а в результате — поле appid. Это ожидаемое различие. Captcha Solver возвращает решение, но не отправляет форму. Тест Selenium или Playwright должен вызвать фактический callback страницы и продолжить сценарий.
Последовательность интеграции#
- Откройте страницу с Tencent CAPTCHA.
- Получите
appIdиз конфигурации страницы. - Создайте
TencentTaskProxylessилиTencentTask. - Вызовите
solve(). - Передайте полный объект результата в callback страницы.
- Отправьте форму и продолжите проверки теста.
Запрашивайте решение непосредственно перед отправкой формы и используйте его на той же странице, где была создана CAPTCHA.
Ресурсы#
- Captcha Solver Python SDK
- Captcha Solver JavaScript SDK
- Примеры Tencent для Python и JavaScript
- Документация Tencent CAPTCHA
- Репозиторий примеров Tencent CAPTCHA
Итог#
Используйте TencentTaskProxyless для обычного решения или TencentTask, если нужен клиентский прокси. Оба официальных SDK предоставляют единый вызов solve() и поддерживают Promise- или async-сценарии. Передавайте возвращённый объект в callback страницы без изменений.