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

Friendly Captcha

Внимание!

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

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

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

type<string>required

CustomTask


class<string>required

friendly


websiteURL<string>required

Полный URL страницы с капчей.


websiteKey<string>required

Ключ Friendly Captcha (см. раздел Как найти значение sitekey).


apiGetLib (внутри metadata)<string>required

Ссылка на JS-файл. Указывайте URL JS-файла в зависимости от версии капчи:

  • V1: apiGetLib = https://cdn.jsdelivr.net/npm/[email protected]/widget.module.min.js, где X.Y.Z — версия клиента из заголовка x-frc-client.

  • V2: apiGetLib = URL файла site.min.js, который загружается на странице. Пример: https://cdn.jsdelivr.net/npm/@friendlycaptcha/[email protected]/site.min.js, где X.Y.Z — это версия клиента.

Подробнее см. в разделах Метод создания задачи и Как определить версию Friendly Captcha.


userAgent<string>optional

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


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

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


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

Используйте значение параметра apiGetLib в metadata, соответствующее версии Friendly Captcha.

Например:

Для V1

"apiGetLib": "https://cdn.jsdelivr.net/npm/[email protected]/widget.module.min.js"

Для V2

"apiGetLib": "https://cdn.jsdelivr.net/npm/@friendlycaptcha/[email protected]/site.min.js"

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

Запрос

{
"clientKey": "API_KEY",
"task": {
"type": "CustomTask",
"class": "friendly",
"websiteKey": "FFMGEMAD2K3JJ35P",
"websiteURL": "https://example.com",
"userAgent": "userAgentPlaceholder",
"metadata": {
"apiGetLib":"https://cdn.jsdelivr.net/npm/[email protected]/widget.module.min.js"
}
}

Ответ

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

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

Используйте метод getTaskResult, чтобы получить решение Friendly капчи. Формат токена в ответе зависит от версии капчи, используемой на сайте:

V1: "56a3727f1f9ae4f339c8e512913cd6f8.ac7W...MAKgAAAN+MAQArAAAAjxMBACwAAAB5QgAA.AgAB"

V2: "AQQA.8Q2TbgK_..._pknXDweJjKT2qwmroOhHcZsU4dHyu-jaGIPx9k7432p_num13buuTu6n4lVA=="

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

Запрос

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

Ответ

{
"errorId": 0,
"errorCode": null,
"errorDescription": null,
"status": "ready",
"solution": {
"data": {
"token": "56a3727f1f9ae4f339c8e512913cd6f8.ac7W...MAKgAAAN+MAQArAAAAjxMBACwAAAB5QgAA.AgAB"
}
}
}

Значение полученного токена подставляется в соответствующее поле:

ВерсияПоле для подстановки токена
V1input.frc-captcha-solution
V2input.frc-captcha-response

Как найти значение sitekey

  • Для V1 этот параметр можно найти в сетевых запросах, отфильтровав их по ключевым словам sitekey илиpuzzle?sitekey=:


  • Для V2 используйте поиск по ключевым словам sitekey или data-sitekey среди запросов или элементов в коде страницы:

Как определить версию Friendly Captcha

Friendly Captcha может использоваться в двух основных версиях: V1 и V2.
Версию можно определить по загружаемым скриптам или сетевым запросам.

Friendly Captcha V1

Используется, если на странице присутствуют следующие скрипты:

widget.min.js
widget.module.min.js

или в сетевых запросах встречается puzzle?sitekey=:

Чтобы определить версию клиента, необходимо:

  1. Открыть найденный запрос puzzle?sitekey=... и перейти в Headers → Request Headers

  2. Найти заголовок x-frc-client:

Заголовок содержит версию клиента Friendly Captcha, используемую на сайте:

x-frc-client: <version>

Примеры значений: 0.9.14, 0.9.19 и т.д.

  1. После определения версии из x-frc-client подставить её в CDN-ссылку:
https://cdn.jsdelivr.net/npm/friendly-challenge@<VERSION>/widget.module.min.js

Например, если x-frc-client = 0.9.14, используйте:

https://cdn.jsdelivr.net/npm/[email protected]/widget.module.min.js

Эту ссылку необходимо передать в параметр apiGetLib при создании задачи.


Friendly Captcha V2

Если на сайте загружается site.min.js, это означает, что используется Friendly Captcha V2.

Передавайте ссылку site.min.js в параметр apiGetLib при создании задачи:


Автоматическое определение версии Friendly Captcha

Вы можете автоматизировать процесс определения версии Friendly Captcha в браузере, используя следующее решение:

Показать код
(async function detectFriendlyCaptcha() {
const result = {
version: null,
clientVersion: null,
indicators: [],
siteMinJsLinks: [],
detectedCdn: null
};

const scripts = Array.from(document.scripts).map(s => s.src);

for (const src of scripts) {
if (!src) continue;

if (src.includes("widget.min.js") || src.includes("widget.module.min.js")) {
result.version = "V1";
result.detectedCdn = src;
result.indicators.push("Found widget script");
}

const match = src.match(/friendly-challenge@(\d+\.\d+\.\d+)/);
if (match) {
result.clientVersion = match[1];
result.version = "V1";
result.detectedCdn = src;
result.indicators.push("Detected CDN version");
}
}

const puzzleElements = document.querySelectorAll(
'[id*="friendly"], [class*="frc"], iframe[src*="friendly"]'
);

if (puzzleElements.length > 0) {
result.indicators.push("Found captcha DOM elements");
if (!result.version) result.version = "V1";
}

const resources = performance.getEntriesByType("resource");

for (const r of resources) {
if (r.name.includes("puzzle?sitekey")) {
result.version = "V1";
result.indicators.push("Found puzzle?sitekey request");
}
}

for (const src of scripts) {
if (!src) continue;

if (src.includes("site.min.js")) {
result.version = "V2";
result.detectedCdn = src;
result.indicators.push("Found site.min.js");
result.siteMinJsLinks.push(src);
}
}

if (!result.version) {
result.version = "Unknown (not detected)";
}

console.log("FriendlyCaptcha Detection Result:");
console.log(result);

return result;
})();