Cloudflare Turnstile | Challenge | Waiting Room

Автоматически поддерживаются все подтипы Turnstile: manual, non-interactive и invisible. Поэтому нет необходимости указывать подтип для обычной капчи.
Перед началом работы изучите все три варианта распознавания капчи и выберите тот, который больше всего соответствует вашим потребностям.
Вариант 1. Turnstile (token)
Вам требуется решить обычную turstile капчу, как здесь. Обратите внимание, что капча на страницах CloudFlare может выглядеть идентично. Посмотрите, как отличить обычный Turnstile от Challenge.
-
CapMonster Cloud по умолчанию работает через встроенные прокси — они уже включены в стоимость. Указывать собственные прокси требуется только в тех случаях, когда сайт не принимает токен или доступ к встроенным сервисам ограничен.
-
Если прокси с авторизацией по IP, то необходимо добавить адрес 65.21.190.34 в белый список.
-
После решения вы получите токен для подтверждения прохождения проверки.
Параметры запроса
type<string>requiredTurnstileTask
websiteURL<string>requiredАдрес страницы, на которой решается капча
websiteKey<string>requiredКлюч Turnstile
pageAction<string>optionalПоле action, которое можно найти в callback функции для загрузки капчи
data<string>optionalЗначение поля data можно взять из параметра cData.
proxyType<string>optionalhttp - обычный http/https прокси;
https - попробуйте эту опцию только если "http" не работает (требуется для некоторых кастомных прокси);
socks4 - socks4 прокси;
socks5 - socks5 прокси.
proxyAddress<string>optionalIP адрес прокси IPv4/IPv6. Не допускается:
- использование прозрачных прокси (там где можно видеть IP клиента);
- использование прокси на локальных машинах.
proxyPort<integer>optionalПорт прокси.
proxyLogin<string>optionalЛогин прокси-сервера.
proxyPassword<string>optionalПароль прокси-сервера.
Вариант 2. Challenge (token)
-
CapMonster Cloud по умолчанию работает через встроенные прокси — они уже включены в стоимость. Указывать собственные прокси требуется только в тех случаях, когда сайт не принимает токен или доступ к встроенным сервисам ограничен.
-
Если прокси с авторизацией по IP, то необходимо добавить адрес 65.21.190.34 в белый список.
-
После решения вы получите токен для подтверждения прохождения проверки.
Параметры запроса
type<string>requiredTurnstileTask
websiteURL<string>requiredАдрес страницы, на которой решается капча
websiteKey<string>requiredКлюч Turnstile
cloudflareTaskType<string>requiredtoken
pageAction<string>requiredПоле action, которое можно найти в callback функции для загрузки капчи. Если используется cloudflareTaskType, то action обычно “managed“ или “non-interactive“.
userAgent<string>requiredUser-Agent браузера.
Передавайте только актуальный UA от ОС Windows. Сейчас таковым является: userAgentPlaceholder
data<string>requiredЗначение поля data можно взять из параметра cData.
pageData<string>requiredЗначение поля pageData можно взять из параметра chlPageData.
apiJsUrl<string>optionalСтрока, которая содержит ссылку на скрипт капчи.
proxyType<string>optionalhttp - обычный http/https прокси;
https - попробуйте эту опцию только если "http" не работает (требуется для некоторых кастомных прокси);
socks4 - socks4 прокси;
socks5 - socks5 прокси.
proxyAddress<string>optionalIP адрес прокси IPv4/IPv6. Не допускается:
- использование прозрачных прокси (там где можно видеть IP клиента);
- использование прокси на локальных машинах.
proxyPort<integer>optionalПорт прокси.
proxyLogin<string>optionalЛогин прокси-сервера.
proxyPassword<string>optionalПароль прокси-сервера.
Эти параметры находятся в объекте, который передаётся во время создания капчи в функцию window.turnstile.render(el, paramsObj). Получить их можно, например, с помощью выполнения JavaScript перед загрузкой остальных скриптов:
(function () {
const obj = {
render: function () {
const { action, cData, chlPageData } = arguments[1];
const params = [
["action", action],
["data", cData],
["pageData", chlPageData],
];
console.table(params)
}
};
Object.defineProperty(window, "turnstile", {
get: () => {
return obj;
},
});
})();
При вызове window.turnstile.render(el, paramsObj) загружается капча на странице, и при успешном решении вызывается функция callback, которая передает информацию о решении.
window.turnstile.render(el, paramsObj):
el: DOM-элемент для вставки в него капчи.
paramsObj: Объект параметров, содержащий информацию о капче и инструкции для ее решения. Этот объект обычно содержит такие поля, как
sitekey, action, cData, chlPageData, callback.
callback – функция обратного вызова после успешного прохождения капчи.
Вариант 3. Challenge (cookie)
-
Для выполнения данной задачи используйте ваши собственные прокси.
-
После решения вы получите специальные cookie, которые необходимо добавить в браузер.
Параметры запроса
type<string>requiredTurnstileTask
websiteURL<string>requiredАдрес страницы, на которой решается капча
websiteKey<string>requiredКлюч Turnstile(можно передать любую строку)
cloudflareTaskType<string>requiredcf_clearance
htmlPageBase64<string>requiredЗакодированная в base64 html страница "Just a moment", которая выдаётся с кодом 403 при обращении к сайту с данной защитой.
Пример получения строки htmlPageBase64:
var htmlContent = document.documentElement.outerHTML;
var htmlBase64 = btoa(unescape(encodeURIComponent(htmlContent)));
console.log(htmlBase64);
userAgent<string>requiredUser-Agent браузера.
Передавайте только актуальный UA от ОС Windows. Сейчас таковым является версия: userAgentPlaceholder
proxyType<string>requiredhttp - обычный HTTP/HTTPS-прокси;
https - пробуйте этот вариант, если «http» не работает (требуется для некоторых кастомных прокси);
socks4 - прокси типа SOCKS4;
socks5 - прокси типа SOCKS5.
proxyAddress<string>requiredIP адрес прокси IPv4/IPv6. Не допускается:
- использование прозрачных прокси (там, где можно видеть IP клиента);
- использование прокси на локальных машинах.
proxyPort<integer>requiredПорт прокси.
proxyLogin<string>requiredЛогин прокси-сервера.
proxyPassword<string>requiredПароль прокси-сервера.
Вариант 4. Waiting Room (cookie)
-
Для выполнения данной задачи используйте ваши собственные прокси.
-
После решения вы получите специальные cookie, которые необходимо добавить в браузер.
Новый механизм защиты сайтов от чрезмерного количества запросов: пользователю необходимо подождать в среднем около 3 минут, прежде чем продолжить работу с ресурсом:

Также данный тип Cloudflare можно определить по заголовку страницы:
Параметры запроса
type<string>requiredTurnstileTask
websiteURL<string>requiredАдрес страницы, на которой находится проверка
websiteKey<string>requiredКлюч Cloudflare на целевом сайте
cloudflareTaskType<string>requiredwait_room
htmlPageBase64<string>requiredHTML-страница в формате base64, на которой присутствует заголовок <title>Waiting Room powered by Cloudflare</title>
userAgent<string>requiredUser-Agent браузера.
Передавайте только актуальный UA от ОС Windows. Сейчас таковым является версия: userAgentPlaceholder
proxyType<string>requiredhttp - обычный HTTP/HTTPS-прокси;
https - пробуйте этот вариант, если «http» не работает (требуется для некоторых кастомных прокси);
socks4 - прокси типа SOCKS4;
socks5 - прокси типа SOCKS5.
proxyAddress<string>requiredIP адрес прокси IPv4/IPv6. Не допускается:
- использование прозрачных прокси (там, где можно видеть IP клиента);
- использование прокси на локальных машинах.
proxyPort<integer>requiredПорт прокси.
proxyLogin<string>requiredЛогин прокси-сервера.
proxyPassword<string>requiredПароль прокси-сервера.
Примеры запросов
Вариант 1. Turnstile (token)
- TurnstileTask (без прокси)
- TurnstileTask (c прокси)
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/createTask
Запрос
{
"clientKey": "API_KEY",
"task": {
"type": "TurnstileTask",
"websiteURL": "http://tsmanaged.zlsupport.com",
"websiteKey": "0x4AAAAAAABUYP0XeMJF0xoy",
"proxyType": "http",
"proxyAddress": "8.8.8.8",
"proxyPort": 8080,
"proxyLogin": "proxyLoginHere",
"proxyPassword": "proxyPasswordHere"
}
}
Ответ
{
"errorId": 0,
"taskId": 407533072
}
Вариант 2. Challenge (token)
- TurnstileTask (без прокси)
- TurnstileTask (c прокси)
https://api.capmonster.cloud/createTask
Запрос
{
"clientKey": "API_KEY",
"task": {
"type": "TurnstileTask",
"websiteURL": "https://example.com",
"websiteKey": "0x4AAAAAAADnPIDROrmt1Wwj",
"cloudflareTaskType": "token",
"userAgent": "userAgentPlaceholder",
"pageAction": "managed",
"pageData": "HUHDWUHuhuwfiweh32..uh2uhuhyugYUG=",
"data": "874291f4retD1366"
}
}
Ответ
{
"errorId": 0,
"taskId": 407533072
}
https://api.capmonster.cloud/createTask
Запрос
{
"clientKey": "API_KEY",
"task": {
"type": "TurnstileTask",
"websiteURL": "https://example.com",
"websiteKey": "0x4AAAAAAADnPIDROrmt1Wwj",
"cloudflareTaskType": "token",
"userAgent": "userAgentPlaceholder",
"pageAction": "managed",
"pageData": "HUHDWUHuhuwfiweh32..uh2uhuhyugYUG=",
"data": "874291f4retD1366",
"proxyType": "http",
"proxyAddress": "8.8.8.8",
"proxyPort": 8080,
"proxyLogin": "proxyLoginHere",
"proxyPassword": "proxyPasswordHere"
}
}
Ответ
{
"errorId": 0,
"taskId": 407533072
}
Вариант 3. Challenge (cookie)
https://api.capmonster.cloud/createTask
Запрос
{
"clientKey":"API_KEY",
"task": {
"type":"TurnstileTask",
"websiteURL":"https://example.com",
"websiteKey":"xxxxxxxxxx",
"cloudflareTaskType": "cf_clearance",
"htmlPageBase64": "PCFET0NUWVBFIGh0...vYm9keT48L2h0bWw+",
"userAgent": "userAgentPlaceholder",
"proxyType":"http",
"proxyAddress":"8.8.8.8",
"proxyPort":8080,
"proxyLogin":"proxyLoginHere",
"proxyPassword":"proxyPasswordHere"
}
}
Ответ
{
"errorId":0,
"taskId":407533072
}
Вариант 4. Waiting Room (cookie)
https://api.capmonster.cloud/createTask
Запрос
{
"clientKey":"API_KEY",
"task": {
"type":"TurnstileTask",
"websiteURL":"https://example.com",
"websiteKey":"xxxxxxxxxx",
"cloudflareTaskType": "wait_room",
"htmlPageBase64": "PCFET0NUWVBFIGh0...vYm9keT48L2h0bWw+",
"userAgent": "userAgentPlaceholder",
"proxyType":"http",
"proxyAddress":"8.8.8.8",
"proxyPort":8080,
"proxyLogin":"proxyLoginHere",
"proxyPassword":"proxyPasswordHere"
}
}
Ответ
{
"errorId":0,
"taskId":407533072
}
Метод получения результата задачи
Используйте метод getTaskResult, чтобы получить решение Turnstile. В зависимости от загрузки системы вы получите ответ через время в диапазоне от 5 до 20 с.
| Свойство | Тип | Описание |
|---|---|---|
| cf_clearance | String | Специальные куки cloudflare, которые вы можете подставить в свой браузер |
| token | String | Используйте токен при вызове callback функции |
Как отличить обычный Turnstile от Cloudflare Challenge.
Типы проверок от Cloudflare могут выглядеть по-разному.
Обычный вариант:

Стилизованные варианты:
Чтобы окончательно убедиться в наличии Challenge, можно открыть инструменты разработчика, посмотреть трафик, изучить код страницы и увидеть характерные признаки:
- Первый запрос к сайту возвращает код 403:

- Форма с id challenge-form имеет атрибут action (не путать с action из параметров для капчи turnstile), содержащий параметр
__cf_chl_f_tk=:

- На странице находится два похожих тега
<script>, которые создают новое значение в объектеwindow:

Пример реализации решения с помощью Selenium на Node.js
const { Builder } = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');
(async function example() {
const options = new chrome.Options();
options.addArguments('--auto-open-devtools-for-tabs')
const driver = new Builder()
.forBrowser('chrome')
.setChromeOptions(options)
.build();
try {
driver.executeScript(`
window.turnstile = new Proxy(window.turnstile, {
get(target, prop) {
if (prop === 'render') {
return function(a, b) {
let p = {
type: "TurnstileTask",
websiteKey: b.sitekey,
websiteURL: window.location.href,
data: b.cData,
pagedata: b.chlPageData,
action: b.action,
userAgent: navigator.userAgent
}
console.log(JSON.stringify(p))
window.params = p;
window.turnstileCallback = b.callback;
return target.render.apply(this, arguments);
}
}
return target[prop];
}
});
`)
driver.get('SITE WITH CAPTCHA');
const params = await driver.executeScript(`
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(window.params)
}, 2000)
})
`);
if (params) {
const data = {
clientKey: 'API KEY',
task: {
type: 'TurnstileTask',
websiteURL: params.websiteURL,
websiteKey: params.websiteKey,
data: params.data,
action: params.action
}
}
const createResult = await fetch('https://api.capmonster.cloud/createTask', {
method: 'post',
body: JSON.stringify(data)
});
const createTaskResult = await createResult.json()
if (createTaskResult.taskId) {
const asyncDelay = (timeout) =>
new Promise(resolve => {
setTimeout(() => {
resolve();
}, timeout);
});
const getTaskResult = async (taskId) => {
const taskResult = await fetch('https://api.capmonster.cloud/getTaskResult', {
method: 'post',
body: JSON.stringify({
"clientKey":"API KEY",
"taskId": createTaskResult.taskId
})
});
const taskResponse = await taskResult.json();
if (taskResponse.status === 'processing') {
await asyncDelay(5000);
return await getTaskResult(taskId)
}
return taskResponse;
}
const taskRes = await getTaskResult(createTaskResult.taskId)
if (taskRes.solution) {
await driver.executeScript(`
window.turnstileCallback(${taskRes.solution.token});
`);
}
}
}
//DO SOMETHING
} finally {
await driver.quit();
}
})();
Как найти все нужные параметры для создания задачи на решение
Вручную
- Откройте ваш сайт, где отображается капча, в браузере.
- Правой кнопкой кликните по элементу капчи и выберите Inspect.
Вариант 1.
websiteKey
Можно найти в Элементах:


Также можно использовать команду в консоли, открыв url капчи, начинающегося с: https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/g… в отдельной вкладке:
console.log(window._cf_chl_opt.chlApiSitekey);
chlApiSitekey – это и есть sitekey.
pageAction
Action и также sitekey можно найти в callback-функции:

Параметры для вариантов 2 и 3 лучше извлекать автоматически:
Автоматически
Для автоматизации поиска параметров их можно извлекать через браузер (обычный или headless, например, с Playwright) или напрямую из HTTP-запросов. Поскольку значения динамических параметров действуют недолго, их рекомендуется использовать сразу после получения.
Приведённые фрагменты кода являются базовыми примерами для ознакомления в извлечении необходимых параметров. Точная реализация будет зависеть от вашего сайта с капчей, его структуры и используемых HTML-элементов и селекторов.
- JavaScript
- Python
- C#
Для варианта 1. Turnstile (token) - в браузере
// Функция для проверки наличия window.onloadTurnstileCallback
const checkTurnstileCallback = () => {
return new Promise((resolve, reject) => {
const timeout = setTimeout(() => reject('Таймаут ожидания callback'), 30000);
const interval = setInterval(() => {
if (window.onloadTurnstileCallback !== undefined) {
clearInterval(interval);
clearTimeout(timeout);
const callbackDetails = window.onloadTurnstileCallback.toString();
const sitekeyMatch = callbackDetails.match(/sitekey: ['"]([^'"]+)['"]/);
const actionMatch = callbackDetails.match(/action: ['"]([^'"]+)['"]/);
resolve({
sitekey: sitekeyMatch ? sitekeyMatch[1] : null,
action: actionMatch ? actionMatch[1] : null,
});
}
}, 500);
});
};
// Попытка найти любой элемент с data-sitekey
const turnstileElement = document.querySelector('[data-sitekey]');
if (turnstileElement) {
const sitekey = turnstileElement.getAttribute("data-sitekey");
console.log("Turnstile Sitekey (из элемента):", sitekey);
} else {
console.log("Turnstile элемент не найден. Проверяем через callback...");
checkTurnstileCallback()
.then((data) => {
console.log("Turnstile Params (из callback):", data);
})
.catch((error) => {
console.error(error);
});
}
Для варианта 2. Challenge (token) - Node.js
import { chromium } from "playwright";
(async () => {
const browser = await chromium.launch({ headless: false });
const page = await browser.newPage();
let params = null;
try {
while (!params) {
await page.goto("https://example.com");
await page.evaluate(() => {
window.turnstile = new Proxy(window.turnstile, {
get(target, prop) {
if (prop === "render") {
return function (a, b) {
const p = {
websiteKey: b.sitekey,
websiteURL: window.location.href,
data: b.cData,
pagedata: b.chlPageData,
action: b.action,
userAgent: navigator.userAgent,
};
window.params = p;
return target.render.apply(this, arguments);
};
}
return target[prop];
},
});
});
params = await page.evaluate(() => {
return new Promise((resolve) => {
setTimeout(() => resolve(window.params || null), 5000);
});
});
if (!params) {
await page.waitForTimeout(3000);
}
}
console.log("Turnstile Params:", params);
} finally {
await browser.close();
}
})();
Для варианта 3. Challenge (cookie cf_clearance) - Node.js
import { chromium } from "playwright";
import { Buffer } from "buffer";
(async () => {
const browser = await chromium.launch({ headless: false });
const page = await browser.newPage();
let websiteKey = null;
while (!websiteKey) {
await page.goto("https://example.com");
await page.evaluate(() => {
window.turnstile = new Proxy(window.turnstile, {
get(target, prop) {
if (prop === "render") {
return function (a, b) {
window.websiteKey = b.sitekey;
return target.render.apply(this, arguments);
};
}
return target[prop];
},
});
});
websiteKey = await page.evaluate(() => {
return new Promise((resolve) => {
setTimeout(() => resolve(window.websiteKey || null), 5000);
});
});
if (!websiteKey) {
await page.waitForTimeout(3000);
}
}
const html = await page.content();
const htmlPageBase64 = Buffer.from(html).toString("base64");
const result = {
websiteKey,
htmlPageBase64,
};
console.log(result);
await browser.close();
})();
Для варианта 1. Turnstile (token)
import asyncio
from playwright.async_api import async_playwright
async def run():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
context = await browser.new_context()
page = await context.new_page()
await page.goto("https://example.com")
element = await page.query_selector('[data-sitekey]')
if element:
sitekey = await element.get_attribute("data-sitekey")
print("Turnstile Sitekey (из элемента):", sitekey)
else:
print("Turnstile элемент не найден. Проверяем через callback...")
try:
result = await page.evaluate('''() => {
return new Promise((resolve, reject) => {
const timeout = setTimeout(() => reject('Таймаут ожидания callback'), 30000);
const interval = setInterval(() => {
if (window.onloadTurnstileCallback !== undefined) {
clearInterval(interval);
clearTimeout(timeout);
const cbStr = window.onloadTurnstileCallback.toString();
const sitekeyMatch = cbStr.match(/sitekey: ['"]([^'"]+)['"]/);
const actionMatch = cbStr.match(/action: ['"]([^'"]+)['"]/);
resolve({
sitekey: sitekeyMatch ? sitekeyMatch[1] : null,
action: actionMatch ? actionMatch[1] : null,
});
}
}, 500);
});
}''')
print("Turnstile Params (из callback):", result)
except Exception as e:
print("Ошибка:", e)
await browser.close()
asyncio.run(run())
Для варианта 2. Challenge (token)
import asyncio
from playwright.async_api import async_playwright
async def extract_turnstile_params():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
page = await browser.new_page()
params = None
while not params:
await page.goto("https://example.com")
await page.evaluate("""
window.turnstile = new Proxy(window.turnstile, {
get(target, prop) {
if (prop === "render") {
return function(a, b) {
const p = {
websiteKey: b.sitekey,
websiteURL: window.location.href,
data: b.cData,
pagedata: b.chlPageData,
action: b.action,
userAgent: navigator.userAgent
};
window.params = p;
return target.render.apply(this, arguments);
};
}
return target[prop];
}
});
""")
await page.wait_for_timeout(5000)
params = await page.evaluate("window.params || null")
if not params:
await page.wait_for_timeout(3000)
print("Turnstile Params:", params)
await browser.close()
asyncio.run(extract_turnstile_params())
Для варианта 3. Challenge (cookie cf_clearance)
import asyncio
import base64
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
page = await browser.new_page()
website_key = None
while not website_key:
await page.goto("https://example.com")
await page.evaluate("""
() => {
window.turnstile = new Proxy(window.turnstile, {
get(target, prop) {
if (prop === 'render') {
return function(a, b) {
window.websiteKey = b.sitekey;
return target.render.apply(this, arguments);
};
}
return target[prop];
}
});
}
""")
website_key = await page.evaluate("""
() => new Promise(resolve => {
setTimeout(() => resolve(window.websiteKey || null), 5000);
})
""")
if not website_key:
await page.wait_for_timeout(3000)
html = await page.content()
html_base64 = base64.b64encode(html.encode("utf-8")).decode("utf-8")
result = {
"websiteKey": website_key,
"htmlPageBase64": html_base64
}
print(result)
await browser.close()
asyncio.run(main())
Для варианта 1. Turnstile (token)
using System;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Microsoft.Playwright;
class Program
{
public static async Task Main()
{
using var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions
{
Headless = false
});
var context = await browser.NewContextAsync();
var page = await context.NewPageAsync();
await page.GotoAsync("https://example.com");
var element = await page.QuerySelectorAsync("[data-sitekey]");
if (element != null)
{
var sitekey = await element.GetAttributeAsync("data-sitekey");
Console.WriteLine($"Turnstile Sitekey (из элемента): {sitekey}");
}
else
{
Console.WriteLine("Turnstile элемент не найден. Проверяем через callback...");
try
{
var result = await page.EvaluateAsync(@"() => {
return new Promise((resolve, reject) => {
const timeout = setTimeout(() => reject('Таймаут ожидания callback'), 30000);
const interval = setInterval(() => {
if (window.onloadTurnstileCallback !== undefined) {
clearInterval(interval);
clearTimeout(timeout);
const cbStr = window.onloadTurnstileCallback.toString();
const sitekeyMatch = cbStr.match(/sitekey: ['""]([^'""]+)['""]/);
const actionMatch = cbStr.match(/action: ['""]([^'""]+)['""]/);
resolve({
sitekey: sitekeyMatch ? sitekeyMatch[1] : null,
action: actionMatch ? actionMatch[1] : null
});
}
}, 500);
});
}");
Console.WriteLine("Turnstile Params (из callback): " + result?.ToString());
}
catch (Exception ex)
{
Console.WriteLine("Ошибка: " + ex.Message);
}
}
await browser.CloseAsync();
}
}
Для варианта 2. Challenge (token)
using Microsoft.Playwright;
using System.Text.Json;
class Program
{
public static async Task Main()
{
using var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions
{
Headless = false
});
var page = await browser.NewPageAsync();
object? parameters = null;
while (parameters == null)
{
await page.GotoAsync("https://example.com");
await page.EvaluateAsync(@"() => {
window.turnstile = new Proxy(window.turnstile, {
get(target, prop) {
if (prop === 'render') {
return function(a, b) {
const p = {
websiteKey: b.sitekey,
websiteURL: window.location.href,
data: b.cData,
pagedata: b.chlPageData,
action: b.action,
userAgent: navigator.userAgent
};
window.params = p;
return target.render.apply(this, arguments);
};
}
return target[prop];
}
});
}");
parameters = await page.EvaluateAsync(@"() => new Promise(resolve => {
setTimeout(() => resolve(window.params || null), 5000);
})");
if (parameters == null)
{
await page.WaitForTimeoutAsync(3000);
}
}
Console.WriteLine("Turnstile Params:");
Console.WriteLine(JsonSerializer.Serialize(parameters, new JsonSerializerOptions { WriteIndented = true }));
await browser.CloseAsync();
}
}
Для варианта 3. Challenge (cookie cf_clearance)
using System;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Playwright;
class Program
{
public static async Task Main()
{
using var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync(
new BrowserTypeLaunchOptions { Headless = false });
var page = await browser.NewPageAsync();
string websiteKey = null;
while (websiteKey == null)
{
await page.GotoAsync("https://example.com");
await page.EvaluateAsync(@"() => {
window.turnstile = new Proxy(window.turnstile, {
get(target, prop) {
if (prop === 'render') {
return function(a, b) {
window.websiteKey = b.sitekey;
return target.render.apply(this, arguments);
};
}
return target[prop];
}
});
}");
websiteKey = await page.EvaluateAsync<string>(@"() =>
new Promise(resolve => {
setTimeout(() => resolve(window.websiteKey || null), 5000);
})");
if (websiteKey == null)
{
await page.WaitForTimeoutAsync(3000);
}
}
var html = await page.ContentAsync();
var htmlBase64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(html));
Console.WriteLine($"websiteKey: {websiteKey}");
Console.WriteLine($"htmlPageBase64: {htmlBase64}");
await browser.CloseAsync();
}
}
Используйте библиотеку SDK
- JavaScript (для браузера)
- Node.js
- Python
- C#
Вариант 1. Turnstile (token)
// https://github.com/ZennoLab/capmonstercloud-client-js
import {
CapMonsterCloudClientFactory,
ClientOptions,
TurnstileRequest
} from '@zennolab_com/capmonstercloud-client';
const API_KEY = "YOUR_API_KEY"; // Укажите ваш API-ключ CapMonster Cloud
document.addEventListener("DOMContentLoaded", async () => {
const client = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);
// Базовый пример без прокси
// CapMonster Cloud автоматически использует свои прокси
let turnstileRequest = new TurnstileRequest({
websiteURL: "http://tsmanaged.zlsupport.com", // URL страницы с капчей
websiteKey: "0x4AAAAAAABUYP0XeMJF0xoy" // Замените на корректное значение
});
// Пример использования вашего собственного прокси
// Раскомментируйте данный блок, если вы хотите использовать собственный прокси
/*
const proxy = {
proxyType: "https",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "username",
proxyPassword: "password"
};
turnstileRequest = new TurnstileRequest({
websiteURL: "http://tsmanaged.zlsupport.com",
websiteKey: "0x4AAAAAAABUYP0XeMJF0xoy",
proxy,
userAgent: "userAgentPlaceholder"
});
*/
// При необходимости можно проверить баланс
const balance = await client.getBalance();
console.log("Balance:", balance);
const result = await client.Solve(turnstileRequest);
console.log("Solution:", result);
});
Вариант 2. Challenge (token)
// https://github.com/ZennoLab/capmonstercloud-client-js
import {
CapMonsterCloudClientFactory,
ClientOptions,
TurnstileRequest
} from '@zennolab_com/capmonstercloud-client';
const API_KEY = "YOUR_API_KEY"; // Укажите ваш API-ключ CapMonster Cloud
document.addEventListener("DOMContentLoaded", async () => {
const client = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);
// Базовый пример без прокси
// CapMonster Cloud автоматически использует свои прокси
let turnstileRequest = new TurnstileRequest({
websiteURL: "https://example.com", // URL страницы с капчей
websiteKey: "0x4AAAAAAABUYP0XeMJF0xoy", // Замените на корректное значение
data: "YOUR_DATA_HERE",
pageAction: "managed",
cloudflareTaskType: "token",
pageData: "YOUR_PAGE_DATA_HERE",
userAgent: "userAgentPlaceholder"
});
// Пример использования вашего собственного прокси
// Раскомментируйте данный блок, если вы хотите использовать собственный прокси
/*
const proxy = {
proxyType: "http",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "username",
proxyPassword: "password"
};
turnstileRequest = new TurnstileRequest({
websiteURL: "https://example.com",
websiteKey: "0x4AAAAAAABUYP0XeMJF0xoy",
proxy,
data: "YOUR_DATA_HERE",
pageAction: "managed",
cloudflareTaskType: "token",
pageData: "YOUR_PAGE_DATA_HERE",
userAgent: "userAgentPlaceholder"
});
*/
// При необходимости можно проверить баланс
const balance = await client.getBalance();
console.log("Balance:", balance);
const result = await client.Solve(turnstileRequest);
console.log("Solution:", result);
});
Вариант 3. Challenge (cookie cf_clearance)
// https://github.com/ZennoLab/capmonstercloud-client-js
import {
CapMonsterCloudClientFactory,
ClientOptions,
TurnstileRequest
} from '@zennolab_com/capmonstercloud-client';
document.addEventListener("DOMContentLoaded", async () => {
const cmcClient = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: 'YOUR_API_KEY' }) // Укажите ваш API-ключ CapMonster Cloud
);
// При необходимости можно проверить баланс
const balance = await cmcClient.getBalance();
console.log('Balance:', balance);
const proxy = {
proxyType: "http",
proxyAddress: '123.45.67.89',
proxyPort: 8080,
proxyLogin: 'username',
proxyPassword: 'password'
};
// Cloudflare cf_clearance решается только с вашим прокси
const turnstileRequest = new TurnstileRequest({
websiteURL: 'https://example.com/',
websiteKey: '0x4AAAAAAABUY0VLtOUMAHxE',
cloudflareTaskType: 'cf_clearance',
proxy,
htmlPageBase64: 'PGh0bW...h0bWw+',
userAgent: 'userAgentPlaceholder'
});
// Отправка задачи на решение
const result = await cmcClient.Solve(turnstileRequest);
console.log('Solution:', result.solution);
});
Вариант 1. Turnstile (token)
// https://github.com/ZennoLab/capmonstercloud-client-js
import { CapMonsterCloudClientFactory, ClientOptions, TurnstileRequest } from '@zennolab_com/capmonstercloud-client';
const API_KEY = "YOUR_API_KEY"; // Укажите ваш API-ключ CapMonster Cloud
async function solveTurnstile() {
const client = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);
// Базовый пример без прокси
// CapMonster Cloud автоматически использует свои прокси
let turnstileRequest = new TurnstileRequest({
websiteURL: "http://tsmanaged.zlsupport.com", // URL страницы с капчей
websiteKey: "0x4AAAAAAABUYP0XeMJF0xoy" // Замените на корректное значение
});
// Пример использования вашего собственного прокси
// Раскомментируйте данный блок, если вы хотите использовать собственный прокси
/*
const proxy = {
proxyType: "https",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "username",
proxyPassword: "password"
};
turnstileRequest = new TurnstileRequest({
websiteURL: "http://tsmanaged.zlsupport.com",
websiteKey: "0x4AAAAAAABUYP0XeMJF0xoy",
proxy,
userAgent: "userAgentPlaceholder"
});
*/
// При необходимости можно проверить баланс
const balance = await client.getBalance();
console.log("Balance:", balance);
const result = await client.Solve(turnstileRequest);
console.log("Solution:", result);
}
solveTurnstile().catch(err => console.error("Ошибка:", err));
Вариант 2. Challenge (token)
// https://github.com/ZennoLab/capmonstercloud-client-js
import {
CapMonsterCloudClientFactory,
ClientOptions,
TurnstileRequest
} from '@zennolab_com/capmonstercloud-client';
const API_KEY = "YOUR_API_KEY"; // Укажите ваш API-ключ CapMonster Cloud
(async () => {
const client = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);
// Базовый пример без прокси
// CapMonster Cloud автоматически использует свои прокси
let turnstileRequest = new TurnstileRequest({
websiteURL: "https://example.com", // URL страницы с капчей
websiteKey: "0x4AAAAAAABUYP0XeMJF0xoy", // Замените на корректное значение
data: "YOUR_DATA_HERE",
pageAction: "managed",
cloudflareTaskType: "token",
pageData: "YOUR_PAGE_DATA_HERE",
userAgent: "userAgentPlaceholder"
});
// Пример использования вашего собственного прокси
// Раскомментируйте данный блок, если вы хотите использовать собственный прокси
/*
const proxy = {
proxyType: "http",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "username",
proxyPassword: "password"
};
turnstileRequest = new TurnstileRequest({
websiteURL: "https://example.com",
websiteKey: "0x4AAAAAAABUYP0XeMJF0xoy",
proxy,
data: "YOUR_DATA_HERE",
pageAction: "managed",
cloudflareTaskType: "token",
pageData: "YOUR_PAGE_DATA_HERE",
userAgent: "userAgentPlaceholder"
});
*/
// При необходимости можно проверить баланс
const balance = await client.getBalance();
console.log("Balance:", balance);
const result = await client.Solve(turnstileRequest);
console.log("Solution:", result);
})();
Вариант 3. Challenge (cookie cf_clearance)
// https://github.com/ZennoLab/capmonstercloud-client-js
import { CapMonsterCloudClientFactory, ClientOptions, TurnstileRequest } from '@zennolab_com/capmonstercloud-client';
async function main() {
const cmcClient = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: 'YOUR_API_KEY' }) // Укажите ваш API-ключ CapMonster Cloud
);
// При необходимости можно проверить баланс
const balance = await cmcClient.getBalance();
console.log('Balance:', balance);
const proxy = {
proxyType: "http",
proxyAddress: '123.45.67.89',
proxyPort: 8080,
proxyLogin: 'username',
proxyPassword: 'password'
};
// Cloudflare cf_clearance решается только с вашим прокси
const turnstileRequest = new TurnstileRequest({
websiteURL: 'https://example.com/',
websiteKey: '0x4AAAAAAABUY0VLtOUMAHxE',
cloudflareTaskType: 'cf_clearance',
proxy,
htmlPageBase64: 'PGh0bW...h0bWw+',
userAgent: 'userAgentPlaceholder'
});
const result = await cmcClient.Solve(turnstileRequest);
console.log('Solution:', result.solution);
}
main().catch(console.error);
Вариант 1. Turnstile (token)
# https://github.com/ZennoLab/capmonstercloud-client-python
import asyncio
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import TurnstileRequest
# from capmonstercloudclient.requests.baseRequestWithProxy import ProxyInfo # Раскомментируйте, если планируете использовать прокси
API_KEY = "YOUR_API_KEY" # Укажите ваш API-ключ CapMonster Cloud
async def solve_turnstile_token():
client_options = ClientOptions(api_key=API_KEY)
cap_monster_client = CapMonsterClient(options=client_options)
# Базовый пример без прокси
# CapMonster Cloud автоматически использует свои прокси
turnstile_request = TurnstileRequest(
websiteURL="http://tsmanaged.zlsupport.com",
websiteKey="0x4AAAAAAABUYP0XeMJF0xoy",
)
# Пример использования вашего собственного прокси
# Раскомментируйте данный блок, если вы хотите использовать собственный прокси
#
# proxy = ProxyInfo(
# proxyType="http",
# proxyAddress="123.45.67.89",
# proxyPort=8080,
# proxyLogin="username",
# proxyPassword="password"
# )
#
# turnstile_request = TurnstileRequest(
# websiteURL="http://tsmanaged.zlsupport.com",
# websiteKey="0x4AAAAAAABUYP0XeMJF0xoy",
# proxy=proxy
# )
# При необходимости можно проверить баланс
balance = await cap_monster_client.get_balance()
print("Balance:", balance)
result = await cap_monster_client.solve_captcha(turnstile_request)
print("Solution:", result)
asyncio.run(solve_turnstile_token())
Вариант 2. Challenge (token)
# https://github.com/ZennoLab/capmonstercloud-client-python
import asyncio
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import TurnstileRequest
# from capmonstercloudclient.requests.baseRequestWithProxy import ProxyInfo # Раскомментируйте, если планируете использовать прокси
API_KEY = "YOUR_API_KEY" # Укажите ваш API-ключ CapMonster Cloud
async def solve_turnstile_token():
client_options = ClientOptions(api_key=API_KEY)
cap_monster_client = CapMonsterClient(options=client_options)
# Базовый пример без прокси
# CapMonster Cloud автоматически использует свои прокси
turnstile_request = TurnstileRequest(
websiteURL="http://example.com", # URL страницы с капчей
websiteKey="0x4AAAAAAABUYP0XeMJF0xoy", # Замените на корректное значение
data="YOUR_DATA_HERE",
pageAction="managed",
cloudflareTaskType="token",
pageData="YOUR_PAGE_DATA_HERE",
userAgent="userAgentPlaceholder"
)
# Пример использования вашего собственного прокси
# Раскомментируйте данный блок, если вы хотите использовать собственный прокси
#
# proxy = ProxyInfo(
# proxyType="http",
# proxyAddress="123.45.67.89",
# proxyPort=8080,
# proxyLogin="username",
# proxyPassword="password"
# )
#
# turnstile_request = TurnstileRequest(
# websiteURL="http://tsmanaged.zlsupport.com",
# websiteKey="0x4AAAAAAABUYP0XeMJF0xoy",
# proxy=proxy,
# data="YOUR_DATA_HERE",
# pageAction="managed",
# cloudflareTaskType="token",
# pageData="YOUR_PAGE_DATA_HERE",
# userAgent="userAgentPlaceholder"
# )
# При необходимости можно проверить баланс
balance = await cap_monster_client.get_balance()
print("Balance:", balance)
result = await cap_monster_client.solve_captcha(turnstile_request)
print("Solution:", result)
asyncio.run(solve_turnstile_token())
Вариант 3. Challenge (cookie cf_clearance)
# https://github.com/ZennoLab/capmonstercloud-client-python
import asyncio
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import TurnstileRequest
from capmonstercloudclient.requests.baseRequestWithProxy import ProxyInfo # Используем ProxyInfo
API_KEY = "YOUR_API_KEY" # Укажите ваш API-ключ CapMonster Cloud
async def solve_cf_clearance():
client_options = ClientOptions(api_key=API_KEY)
cap_monster_client = CapMonsterClient(options=client_options)
# Пример настройки прокси
proxy = ProxyInfo(
proxyType="http",
proxyAddress="123.45.67.89",
proxyPort=8080,
proxyLogin="username",
proxyPassword="password"
)
# Cloudflare cf_clearance решается только с вашим прокси
turnstile_request = TurnstileRequest(
websiteURL="https://example.com",
websiteKey="0x4AAAAAAABUYP0XeMJF0xoy", # замените на актуальное значение
cloudflareTaskType="cf_clearance",
htmlPageBase64="BASE64_HTML_PAGE_HERE",
userAgent="userAgentPlaceholder",
proxy=proxy
)
# При необходимости можно проверить баланс
balance = await cap_monster_client.get_balance()
print("Balance:", balance)
result = await cap_monster_client.solve_captcha(turnstile_request)
print("Solution:", result)
asyncio.run(solve_cf_clearance())
Вариант 1. Turnstile (token)
// https://github.com/ZennoLab/capmonstercloud-client-dotnet
using System;
using System.Threading.Tasks;
using Zennolab.CapMonsterCloud;
using Zennolab.CapMonsterCloud.Requests;
class Program
{
static async Task Main(string[] args)
{
// Ваш API-ключ от CapMonster Cloud
var clientOptions = new ClientOptions
{
ClientKey = "YOUR_API_KEY"
};
var cmCloudClient = CapMonsterCloudClientFactory.Create(clientOptions);
// Базовый пример без прокси
// CapMonster Cloud автоматически использует свои прокси
var turnstileRequest = new TurnstileRequest
{
WebsiteUrl = "http://tsmanaged.zlsupport.com", // URL страницы с капчей
WebsiteKey = "0x4AAAAAAABUYP0XeMJF0xoy" // Замените на корректное значение
};
// Пример использования вашего собственного прокси
// Раскомментируйте данный блок, если вы хотите использовать собственный прокси
/*
var turnstileRequest = new TurnstileRequest
{
WebsiteUrl = "http://tsmanaged.zlsupport.com",
WebsiteKey = "0x4AAAAAAABUYP0XeMJF0xoy",
Proxy = new ProxyContainer(
"123.45.67.89",
8080,
ProxyType.Http,
"username",
"password"
)
};
*/
// При необходимости можно проверить баланс
var balance = await cmCloudClient.GetBalanceAsync();
Console.WriteLine("Balance: " + balance);
var turnstileResult = await cmCloudClient.SolveAsync(turnstileRequest);
Console.WriteLine("Solution: " + turnstileResult.Solution.Value);
}
}
Вариант 2. Challenge (token)
// https://github.com/ZennoLab/capmonstercloud-client-dotnet
using System;
using System.Threading.Tasks;
using Zennolab.CapMonsterCloud;
using Zennolab.CapMonsterCloud.Requests;
class Program
{
static async Task Main(string[] args)
{
// Ваш API-ключ от CapMonster Cloud
var clientOptions = new ClientOptions
{
ClientKey = "YOUR_API_KEY"
};
var cmCloudClient = CapMonsterCloudClientFactory.Create(clientOptions);
// Базовый пример без прокси
// CapMonster Cloud автоматически использует свои прокси
var turnstileRequest = new TurnstileRequest
{
WebsiteUrl = "https://example.com", // URL страницы с капчей
WebsiteKey = "0x4AAAAAAABUYP0XeMJF0xoy", // Ваш sitekey
Data = "YOUR_DATA_HERE",
PageAction = "managed",
CloudflareTaskType = "token",
PageData = "YOUR_PAGE_DATA_HERE",
UserAgent = "userAgentPlaceholder"
};
// Пример использования вашего собственного прокси
// Раскомментируйте данный блок, если вы хотите использовать собственный прокси
/*
var turnstileRequest = new TurnstileRequest
{
WebsiteUrl = "https://example.com",
WebsiteKey = "0x4AAAAAAABUYP0XeMJF0xoy",
Data = "YOUR_DATA_HERE",
PageAction = "managed",
CloudflareTaskType = "token",
PageData = "YOUR_PAGE_DATA_HERE",
UserAgent = "userAgentPlaceholder",
Proxy = new ProxyContainer(
"123.45.67.89",
8080,
ProxyType.Http,
"username",
"password"
)
};
*/
// При необходимости можно проверить баланс
var balance = await cmCloudClient.GetBalanceAsync();
Console.WriteLine("Balance: " + balance);
var turnstileResult = await cmCloudClient.SolveAsync(turnstileRequest);
Console.WriteLine("Solution: " + turnstileResult.Solution.Value);
}
}
Вариант 3. Challenge (cookie cf_clearance)
// https://github.com/ZennoLab/capmonstercloud-client-dotnet
using Zennolab.CapMonsterCloud;
using Zennolab.CapMonsterCloud.Requests;
class Program
{
static async Task Main(string[] args)
{
var clientOptions = new ClientOptions
{
ClientKey = "YOUR_API_KEY" // Ваш API-ключ CapMonster Cloud
};
var cmCloudClient = CapMonsterCloudClientFactory.Create(clientOptions);
var turnstileRequest = new TurnstileRequest
{
WebsiteUrl = "https://example.com", // URL страницы с капчей
WebsiteKey = "0x4AAAAAAADnPIDROrmt1Wwj", // Замените на корректное значение
CloudflareTaskType = "cf_clearance",
HtmlPageBase64 = "htmlPageBase64Here",
UserAgent = "userAgentPlaceholder",
Proxy = new ProxyContainer(
"123.45.67.89",
8080,
ProxyType.Http,
"username",
"password"
)
};
var turnstileResult = await cmCloudClient.SolveAsync(turnstileRequest);
Console.WriteLine("Solution: " + turnstileResult.Solution.Clearance);
}
}
