Friendly Captcha
CapMonster Cloud по умолчанию работает через встроенные прокси — они уже включены в стоимость. Указывать собственные прокси требуется только в тех случаях, когда сайт не принимает токен или доступ к встроенным сервисам ограничен.
Если прокси с авторизацией по IP, то необходимо добавить адрес 65.21.190.34 в белый список.
Параметры запроса
type<string>requiredCustomTask
class<string>requiredfriendly
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>optionalUser-Agent браузера.
Передавайте только актуальный UA от ОС Windows. Сейчас таковым является: userAgentPlaceholder
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Пароль прокси-сервера.
Метод создания задачи
Используйте значение параметра 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"
- CustomTask (без прокси)
- CustomTask (с прокси)
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
}
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"
},
"proxyType": "http",
"proxyAddress": "8.8.8.8",
"proxyPort": 8080,
"proxyLogin": "proxyLoginHere",
"proxyPassword": "proxyPasswordHere"
}
}
Ответ
{
"errorId": 0,
"taskId": 407533077
}
Метод получения результата задачи
Используйте метод getTaskResult, чтобы получить решение Friendly капчи. Формат токена в ответе зависит от версии капчи, используемой на сайте:
V1: "56a3727f1f9ae4f339c8e512913cd6f8.ac7W...MAKgAAAN+MAQArAAAAjxMBACwAAAB5QgAA.AgAB"
V2: "AQQA.8Q2TbgK_..._pknXDweJjKT2qwmroOhHcZsU4dHyu-jaGIPx9k7432p_num13buuTu6n4lVA=="
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"
}
}
}
Значение полученного токена подставляется в соответствующее поле:
| Версия | Поле для подстановки токена |
|---|---|
| V1 | input.frc-captcha-solution |
| V2 | input.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=:

Чтобы определить версию клиента, необходимо:
-
Открыть найденный запрос
puzzle?sitekey=...и перейти в Headers → Request Headers -
Найти заголовок
x-frc-client:

Заголовок содержит версию клиента Friendly Captcha, используемую на сайте:
x-frc-client: <version>
Примеры значений: 0.9.14, 0.9.19 и т.д.
- После определения версии из
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;
})();
