Перейти к основному содержимому
Возникают проблемы с получением токена?
Свяжитесь с поддержкой

FunCaptcha

Внимание!

CapMonster Cloud по умолчанию работает через встроенные прокси — они уже включены в стоимость. Указывать собственные прокси требуется только в тех случаях, когда сайт не принимает токен или доступ к встроенным сервисам ограничен.

Если прокси с авторизацией по IP, то необходимо добавить адрес 65.21.190.34 в белый список.

Параметры запроса


ВАЖНО: значения некоторых параметров являются динамическими — они меняются при каждом рендеринге страницы с FunCaptcha.
Извлекайте их непосредственно перед созданием задачи, чтобы избежать ошибок при решении. Примеры извлечения параметров см. в разделах Поиск параметров FunCaptcha и Автоматическое решение FunCaptcha с data[blob].


type<string>required

FunCaptchaTask


websiteURL<string>required

Адрес страницы, на которой решается капча.


websitePublicKey<string>required

Ключ FunCaptcha (значение public key или pk).

Пример формата: EX72CCFB-26EX-40E5-91E6-85EX70BE98ED


data<string>optional

Дополнительный параметр. Обязателен, если на сайте используется data[blob].

Важно: Не загружайте фрейм с капчей для извлечения blob. После загрузки капчи значение параметра становится невалидным.


funcaptchaApiJSSubdomain<string>optional

Поддомен Arkose Labs (значение surl). Указывайте в том случае, если он отличается от стандартного: client-api.arkoselabs.com

Важно: Указывайте только домен без префикса https://


userAgent<string>optional

User-Agent браузера.
Передавайте только актуальный UA от ОС Windows. Сейчас таковым является: userAgentPlaceholder


cookies<string>optional

Передавайте дополнительные cookie в формате:

cookieName1=value1; cookieName2=value2

proxyType<string>optional

http - обычный http/https прокси;
https - попробуйте эту опцию только если "http" не работает (требуется для некоторых кастомных прокси);
socks4 - socks4 прокси;
socks5 - socks5 прокси.


proxyAddress<string>optional

IP адрес прокси IPv4/IPv6. Не допускается:

  • использование прозрачных прокси (где сохраняется видимость реального IP клиента);
  • использование прокси на локальных машинах.


proxyPort<integer>optional

Порт прокси.


proxyLogin<string>optional

Логин прокси-сервера.


proxyPassword<string>optional

Пароль прокси-сервера.

Метод создания задачи

POST
https://api.capmonster.cloud/createTask

Пример запроса

{
"clientKey": "API_KEY",
"task": {
"type": "FunCaptchaTask",
"websiteURL": "https://yourwebsite.com/page-with-funcaptcha",
"websitePublicKey": "your-website-key",
"funcaptchaApiJSSubdomain": "example-api.arkoselabs.com",
"data": "{\"blob\":\"your-blob-value-1234567890\"}",
"userAgent": "userAgentPlaceholder"
}
}

Пример ответа

{
"errorId":0,
"taskId":407533077
}

Метод получения результата задачи

Используйте метод getTaskResult, чтобы получить решение FunCaptcha.

POST
https://api.capmonster.cloud/getTaskResult

Пример запроса

{
"clientKey": "API_KEY",
"taskId": 407533077
}

Пример ответа

{
"errorId": 0,
"errorCode": null,
"errorDescription": null,
"solution": {
"token": "337187b9f57678923.5060184402|r=us-west-2|lang=en|pk=EX72CCFB-26EX-40E5-91E6-85EX70BE98ED|at=40|ag=101|cdn_url=https%3A%2F%2Fclient-api.arkoselabs.com%2Fcdn%2Ffc|surl=https%3A%2F%2Fclient-api.arkoselabs.com|smurl=https%3A%2F%2Fclient-api.arkoselabs.com%2Fcdn%2Ffc%2Fassets%2Fstyle-manager",
"userAgent": "userAgentPlaceholder"
},
"status": "ready"
}

Поиск параметров FunCaptcha

websitePublicKey и funcaptchaApiJSSubdomain

Откройте DevTools → Elements и найдите скрытый input с ID verification-token или FunCaptcha-Token. В них содержатся значения параметров pk (websitePublicKey) и surl (funcaptchaApiJSSubdomain).

Получите параметры через консоль:

const v = document.querySelector("#verification-token, #FunCaptcha-Token").value;
const p = Object.fromEntries(v.split("|").map(x => x.split("=")));
console.log("pk:", p.pk);
console.log("surl:", decodeURIComponent(p.surl));

data (blob)

Если на сайте используется дополнительный параметр blob, его значение можно получить следующим образом:

1. Определение источника данных

Параметр blob может находиться в разных местах:

  • HTML-атрибут страницы: например, data-blob или другие data-* атрибуты.

  • JSON-ответ API: возвращается после действия пользователя (например, клика или запроса капчи).

  • Query-параметр URL в JSON-ответе: иногда blob передается как часть URL.

2. Выполнение запроса

  • GET-запрос к странице, где отображается капча

или

  • POST-запрос к API, который возвращает данные капчи.

Важно: Не загружайте фрейм с капчей для извлечения blob. После загрузки капчи значение параметра становится невалидным.

3. Извлечение параметра

  • Если ответ HTML — используйте регулярное выражение или инструмент для разбора HTML, чтобы найти нужный атрибут.
  • Если ответ JSON — получите значение соответствующего ключа (например, data.blob).
  • Если blob находится в URL — разберите query-параметры и извлеките нужное значение.

Также вы можете найти параметр blob и его значение с помощью сетевых запросов в DevTools:

  1. Перейдите на страницу с капчей, откройте DevTools и вызовите появление капчи. Затем откройте вкладку Network и найдите запрос вида: https://arkoselabs.example.com/fc/gt2/public_key/176068BF-9607-4799-B53D-366BE98E2B84

  2. Заблокируйте загрузку iframe с капчей, чтобы получить валидный blob. Для этого нажмите Ctrl + Shift + P (в Chromium-браузерах), введите Enable network request blocking, включите блокировку и добавьте паттерн вида: /fc/gt2

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

Автоматическое решение FunCaptcha с data[blob]

Примеры на JavaScript (Node.js), Python и C# показывают, как с помощью Playwright получить параметры public_key и blob, создать задачу в CapMonster Cloud и получить токен решения капчи. Вы можете реализовать аналогичную логику с другими инструментами автоматизации или тестирования.

Показать код
// npm install playwright

const { chromium } = require("playwright");

const apiKey = "YOUR_API_KEY"; // API-ключ CapMonster Cloud
const websiteURL = "https://www.example.com/"; // Страница с FunCaptcha

// Ждём запрос FunCaptcha, проверяем его, извлекаем public_key и blob.
async function captureBlobAndPublicKey(page) {
return new Promise(resolve => {
page.on("request", req => {
const url = req.url();

// Проверяем, относится ли запрос к инициализации FunCaptcha
if (url.includes("/fc/gt2/public_key/")) {
const publicKey = url.split("/fc/gt2/public_key/")[1].split("/")[0];
const post = req.postData();

// Проверяем наличие blob в POST-данных и извлекаем его
if (post && post.includes("data[blob]")) {
const params = new URLSearchParams(post);
const blob = params.get("data[blob]");

console.log("Extracted blob:", blob);
console.log("Extracted public_key:", publicKey);

resolve({ blob, publicKey });
}
}
});
});
}

// Создаём задачу FunCaptchaTask в CapMonster Cloud и отправляем параметры.
async function createTask(blob, publicKey) {
const task = {
type: "FunCaptchaTask",
websiteURL,
websitePublicKey: publicKey,
data: JSON.stringify({ blob }),
userAgent:
"userAgentPlaceholder"
};

const res = await fetch("https://api.capmonster.cloud/createTask", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ clientKey: apiKey, task })
});

const json = await res.json();

// Проверяем ответ CapMonster Cloud и ждём taskId
if (!json.taskId) {
console.error("createTask error:", json);
process.exit(1);
}

console.log("Task created:", json.taskId);
return json.taskId;
}

// Ожидание решения задачи
async function getTaskResult(taskId) {
while (true) {
const res = await fetch("https://api.capmonster.cloud/getTaskResult", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ clientKey: apiKey, taskId })
});

const json = await res.json();

// Проверяем готовность решения
if (json.status === "ready") return json.solution;

console.log("Processing...");
await new Promise(r => setTimeout(r, 2500));
}
}

(async () => {
const browser = await chromium.launch({ headless: false });
const page = await browser.newPage();

// Блокировка фрейма капчи
await page.route("**/fc/gt2/**", route => route.abort());

console.log("Opening page...");
await page.goto(websiteURL, { waitUntil: "domcontentloaded" });

console.log("Capturing public_key + blob...");

/**
* ВАЖНО!
* НА ЭТОМ ШАГЕ НУЖНО ВЫЗВАТЬ КАПЧУ.
* - нажать Login / Sign up
* - ввести email / username
* - дождаться появления FunCaptcha
*
* Пример:
* await page.click('text="Create account"');
* await page.waitForTimeout(1000);
*/

const { blob, publicKey } = await captureBlobAndPublicKey(page);

// Проверяем, удалось ли получить параметры
if (!blob || !publicKey) {
console.error("Failed to extract blob or public_key");
await browser.close();
return;
}

console.log("Creating CapMonster task...");
const taskId = await createTask(blob, publicKey);

console.log("Waiting for solution...");
const solution = await getTaskResult(taskId);

// Получаем готовый токен
console.log("CAPTCHA SOLVED");
console.log("Token:", solution.token);

await browser.close();
})();