В этой статье мы постарались дать ответы на все вопросы. А начать решение задачи нужно с определения того, какая система защиты используется. Для этого можно обратиться к списку популярных капч и систем антибот-защиты, где представлены визуальные примеры и ключевые признаки, которые могут помочь быстро определить, с чем вы имеете дело.
Если вы обнаружили, что на вашем сайте используется Cloudflare Turnstile, следующим шагом станет более подробное изучение её свойств и самой работы. Также в этой статье вы можете изучить инструкцию по подключению системы Cloudflare Turnstile, чтобы полностью разобраться, как она функционирует на вашем сайте. Это позволит не только понимать текущую защиту, но и грамотно планировать её поддержку.
При тестировании форм с Cloudflare Turnstile часто возникает необходимость проверить работу капчи и убедиться, что она корректно интегрирована.
Вы можете вручную протестировать подставленную на ваш сайт капчу.
Для автоматического распознавания капчи можно использовать специализированные сервисы, например, CapMonster Cloud — инструмент, который принимает параметры капчи, обрабатывает их на своих серверах и возвращает готовый токен. Этот токен можно подставить в форму, чтобы пройти проверку без участия пользователя.
Работа с CapMonster Cloud через API обычно включает следующие шаги:
В запросе для решения Cloudflare Turnstile необходимо указать следующие параметры:
type - TurnstileTask;
websiteURL - адрес страницы, на которой решается капча;
websiteKey - ключ Turnstile.
https://api.capmonster.cloud/createTask{
"clientKey": "API_KEY",
"task": {
"type": "TurnstileTask",
"websiteURL": "http://tsmanaged.zlsupport.com",
"websiteKey": "0x4AAAAAAABUYP0XeMJF0xoy"
}
}{
"errorId":0,
"taskId":407533072
}https://api.capmonster.cloud/getTaskResult{
"clientKey":"API_KEY",
"taskId": 407533072
}{
"errorId": 0,
"status": "ready",
"solution": {
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36",
"token": "0.iGX3xsyFCkbGePM3jP4P4khLo6TrLukt8ZzBvwuQOvbC...f61f3082"
}
}// npm install playwright @zennolab_com/capmonstercloud-client
import { chromium } from "playwright";
import { CapMonsterCloudClientFactory, ClientOptions, TurnstileRequest } from "@zennolab_com/capmonstercloud-client";
async function main() {
// 1. Решение Turnstile через CapMonster Cloud
const cmcClient = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: 'YOUR_CAPMONSTER_API_KEY' })
);
const turnstileRequest = new TurnstileRequest({
websiteURL: 'http://tsmanaged.zlsupport.com',
websiteKey: '0x4AAAAAAABUYP0XeMJF0xoy',
});
const result = await cmcClient.Solve(turnstileRequest);
const token = result.solution.token;
console.log('Токен Turnstile получен:', token);
// 2. Запуск Playwright
const browser = await chromium.launch({ headless: false });
const context = await browser.newContext();
const page = await context.newPage();
await page.goto('http://tsmanaged.zlsupport.com');
// 3. Заполняем логин и пароль
await page.fill('#username', 'your_username');
await page.fill('#password', 'your_password');
// 4. Ждем появления скрытого поля token
await page.waitForSelector('#token', { state: 'attached', timeout: 60000 });
// 5. Подставляем токен и делаем поле видимым
await page.evaluate((t) => {
const tokenInput = document.querySelector('#token');
if (tokenInput) {
tokenInput.type = 'text'; // делаем поле видимым
tokenInput.value = t; // вставляем токен
console.log('Токен вставлен в поле token');
} else {
console.error('Поле #token не найдено');
}
}, token);
// 6. Проверяем, что токен действительно подставился
const checkValue = await page.$eval('#token', el => el.value);
console.log('Проверка значения токена:', checkValue);
// 7. Отправляем форму
await page.click('button[type="submit"]');
console.log('Форма отправлена с токеном Turnstile');
// await browser.close();
}
main().catch(err => console.error(err));1. Перейдите на страницу Cloudflare Turnstile, нажмите Начните сейчас.
2. Зарегистрируйтесь в сервисе.
3. В Turnstile Widgets нажмите на синюю кнопку Add Widget.

4. Настройте Cloudflare Turnstile, укажите:
5. После создания виджета, вы получите два ключа — Site Key и Secret Key.

6. Подключите клиентскую часть
1) Подключите скрипт Turnstile
Автоматический рендеринг (виджет создаётся сам при загрузке страницы):
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>Программное управление (вы сами создаёте виджет через JavaScript):
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit" defer></script>Важно: скрипт должен загружаться с точного URL. Прокси или кэш могут вызвать сбои.
2) Создайте контейнер для виджета
Авто:
<div class="cf-turnstile" data-sitekey="<YOUR_SITEKEY>"></div>Программно:
<div id="turnstile-container"></div>3) Настройка виджета
Через data-атрибуты:
<div class="cf-turnstile"
data-sitekey="<YOUR_SITEKEY>"
data-theme="light"
data-size="normal"
data-callback="onSuccess">
</div>Через JavaScript:
const widgetId = turnstile.render("#turnstile-container", {
sitekey: "<YOUR_SITEKEY>",
theme: "light",
size: "normal",
callback: token => console.log("Token:", token)
});4) Работа с токенами
const token = turnstile.getResponse(widgetId); // получить токен
const isExpired = turnstile.isExpired(widgetId); // проверить истечение
turnstile.reset(widgetId); // сброс
turnstile.remove(widgetId); // удалить
turnstile.execute("#turnstile-container"); // запуск вручную
5) Интеграция с формой
<form id="my-form" method="POST">
<input type="hidden" name="cf-turnstile-response" id="cf-turnstile-response">
<button type="submit">Отправить</button>
</form>
<script>
function onSuccess(token) {
document.getElementById("cf-turnstile-response").value = token;
}
</script>
<title>Turnstile Example</title>
<!-- Подключаем Turnstile скрипт -->
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
</head>
<body>
<h1>Пример формы с Turnstile</h1>
<form id="my-form">
<label for="username">Имя:</label>
<input type="text" name="username" id="username" required>
<!-- Контейнер для Turnstile -->
<div class="cf-turnstile" data-sitekey="<YOUR_SITEKEY>" data-callback="onTurnstileSuccess"></div>
<button type="submit">Отправить</button>
</form>
<script>
// Callback, который вызывается после прохождения капчи
function onTurnstileSuccess(token) {
console.log("Получен Turnstile токен:", token);
// Сохраняем токен в скрытое поле формы (необязательно)
document.getElementById("cf-turnstile-token")?.remove();
const input = document.createElement("input");
input.type = "hidden";
input.name = "cf-turnstile-response";
input.id = "cf-turnstile-token";
input.value = token;
document.getElementById("my-form").appendChild(input);
}
// Отправка формы
document.getElementById("my-form").addEventListener("submit", async (e) => {
e.preventDefault();
const formData = new FormData(e.target);
const response = await fetch("/submit-form", {
method: "POST",
body: formData
});
const result = await response.json();
if(result.success){
alert("Форма успешно отправлена и токен проверен!");
} else {
alert("Ошибка проверки Turnstile токена. Попробуйте снова.");
// Сбрасываем виджет, чтобы пользователь мог пройти капчу заново
turnstile.reset();
}
});
</script>
</body>
</html>
6) Настройте серверную часть
Процесс серверной проверки:
API Siteverify:
https://challenges.cloudflare.com/turnstile/v0/siteverifyПараметры запроса:
Особенности токена:
<?php
function validateTurnstile($token, $secret, $remoteip = null) {
$url = 'https://challenges.cloudflare.com/turnstile/v0/siteverify';
$data = ['secret' => $secret, 'response' => $token];
if ($remoteip) $data['remoteip'] = $remoteip;
$options = [
'http' => [
'header' => "Content-type: application/x-www-form-urlencoded
",
'method' => 'POST',
'content' => http_build_query($data)
]
];
$response = file_get_contents($url, false, stream_context_create($options));
if ($response === FALSE) {
return ['success' => false, 'error-codes' => ['internal-error']];
}
return json_decode($response, true);
}
// Использование
$secret_key = 'YOUR_SECRET_KEY';
$token = $_POST['cf-turnstile-response'] ?? '';
$remoteip = $_SERVER['REMOTE_ADDR'];
$result = validateTurnstile($token, $secret_key, $remoteip);
if($result['success']){
echo "Форма успешно отправлена!";
} else {
echo "Ошибка проверки: " . implode(', ', $result['error-codes']);
}
?>
Если вам достался сайт с уже установленной капчей или другой системой защиты и при этом нет доступа к коду — ничего страшного! Определить, какая именно технология используется, достаточно легко. А для проверки корректности работы можно использовать сервис распознавания CapMonster Cloud в изолированной тестовой среде, чтобы убедиться, что механизм обработки токенов и логика проверки функционируют корректно.
В случае с Cloudflare Turnstile — достаточно распознать систему, изучить её поведение и убедиться, что защита функционирует корректно. В статье мы показали, как определить Cloudflare Turnstile и где найти инструкции по её подключению или перенастройке, чтобы уверенно поддерживать защиту и контролировать её работу.