В этой статье мы постарались дать ответы на все вопросы. А начать решение задачи нужно с определения того, какая система защиты используется. Для этого можно обратиться к списку популярных капч и систем антибот-защиты, где представлены визуальные примеры и ключевые признаки, которые могут помочь быстро определить, с чем вы имеете дело.
Если вы обнаружили, что на вашем сайте используется DataDome CAPTCHA, следующим шагом станет более подробное изучение её свойств и самой работы. Также в этой статье вы можете изучить инструкцию по подключению системы DataDome CAPTCHA, чтобы полностью разобраться, как она функционирует на вашем сайте. Это позволит не только понимать текущую защиту, но и грамотно планировать её поддержку.
Работа с CapMonster Cloud через API обычно включает следующие шаги:
type - CustomTask
class - DataDome
websiteURL - адрес основной страницы, на которой решается капча.
captchaUrl (внутри metadata) - "captchaUrl" - ссылка на капчу. Обычно имеет следующий вид: "https://geo.captcha-delivery.com/captcha/?initialCid=..."
datadomeCookie (внутри metadata) - ваши куки от datadome. Можно получить на странице с помощью document.cookie (если куки не имеют флага HttpOnly), в заголовке запроса Set-Cookie: "datadome=...", либо напрямую из HTML-кода страницы initialCid
userAgent - User-Agent браузера. Передавайте только актуальный UA от ОС Windows.
Также для этой задачи необходимо использование ваших прокси:
proxyType :
proxyAddress - IP адрес прокси IPv4/IPv6.
proxyPort - порт прокси.
proxyLogin - логин прокси-сервера.
proxyPassword - пароль прокси-сервера.
https://api.capmonster.cloud/createTask
{
"clientKey": "API_KEY",
"task": {
"type": "CustomTask",
"class": "DataDome",
"websiteURL": "https://example.com",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36",
"metadata": {
"captchaUrl": "https://geo.captcha-delivery.com/interstitial/?initialCid=AHrlqAAAAAMA9UvsL58YLqIAXNLFPg%3D%3D&hash=C0705ACD75EBF650A07FF8291D3528&cid=7sfa5xUfDrR4bQTp1c2mhtiD7jj9TXExcQypjdNAxKVFyIi1S9tE0~_mqLa2EFpOuzxKcZloPllsNHjNnqzD9HmBA4hEv7SsEyPYEidCBvjZEaDyfRyzefFfolv0lAHM&referer=https%3A%2F%2Fwww.example.com.au%2F&s=6522&b=978936&dm=cm",
"datadomeCookie": "datadome=VYUWrgJ9ap4zmXq8Mgbp...64emvUPeON45z"
},
"proxyType": "http",
"proxyAddress": "123.45.67.89",
"proxyPort": 8080,
"proxyLogin": "proxyUsername",
"proxyPassword": "proxyPassword"
}
}
{
"errorId":0,
"taskId":407533072
}https://api.capmonster.cloud/getTaskResult{
"clientKey":"API_KEY",
"taskId": 407533072
}
{
"errorId": 0,
"status": "ready",
"solution": {
"domains": {
"www.example.com": {
"cookies": {
"datadome": "P1w0VnjFcTFslfps0J4FaPpY_QPbPBW4MeYxj4LW~pztIfJiSSuBPr8oQTUHzdrfgv137FbOBd3kCUOOgny7LhIkhm5e1qdtzYM4s2e46U_qfERK4KiCy22MOSIDsDyh"
},
"localStorage": null
}
},
"url": null,
"fingerprint": null,
"headers": null,
"data": null
}
}
// npx playwright install chromium
import { chromium } from 'playwright';
import { CapMonsterCloudClientFactory, ClientOptions, DataDomeRequest } from '@zennolab_com/capmonstercloud-client';
// Укажите ваш API-ключ CapMonster Cloud
const API_KEY = 'YOUR_API_KEY';
// Ваш сайт под защитой DataDome
const TARGET_URL = 'https://example.com/';
const USER_AGENT = Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
// Настройка прокси
const proxy = {
proxyType: "http",
proxyAddress: '8.8.8.8',
proxyPort: 8080,
proxyLogin: 'proxyLogin',
proxyPassword: 'proxyPassword'
};
async function main() {
// Запуск браузера
const browser = await chromium.launch({ headless: true });
const context = await browser.newContext({ userAgent: USER_AGENT });
const page = await context.newPage();
// Переходим на сайт
await page.goto(TARGET_URL, { waitUntil: 'networkidle' });
// Ищем уже установленную datadome cookie (если есть)
const existingDd = (await context.cookies()).find(c => /datadome|dd_/i.test(c.name));
// Ищем iframe DataDome -> captcha URL
const captchaUrl = await page.evaluate(() =>
Array.from(document.querySelectorAll('iframe[src]'))
.find(i => /captcha-delivery\.com\/captcha/i.test(i.src))
?.src || null
);
console.log(`=== Извлечённые параметры DataDome ===`);
console.log(`captchaUrl:`, captchaUrl || 'не найден');
console.log(`текущая datadome cookie::`, existingDd ? ${existingDd.name}=${existingDd.value}` : 'нет');
const cm = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);
// Отправляем задачу в CapMonster
console.log(`Отправляем задачу DataDome в CapMonster......`);
// Отправляем задачу на решение DataDome
const solve = await cm.Solve(new DataDomeRequest({
_class: "DataDome",
websiteURL: TARGET_URL,
userAgent: USER_AGENT,
proxy,
metadata: {
captchaUrl: captchaUrl || undefined,
datadomeCookie: existingDd
? `${existingDd.name}=${existingDd.value}`
: undefined
}
}));
const sol = solve?.solution;
// Получаем домен и нужные куки из решения
const host = new URL(TARGET_URL).hostname;
const domainKey =
Object.keys(sol.domains).find(d => d.includes(host))
|| Object.keys(sol.domains)[0];
const cookiesArr = sol.domains[domainKey]?.cookies || [];
console.log(`\n=== Куки от CapMonster ===`);
cookiesArr.forEach(c => console.log(`${c.name}=${c.value}`));
const ddSolved =
cookiesArr.find(c => c.name?.toLowerCase() === 'datadome')
|| cookiesArr.find(c => /datadome/i.test(c.name));
// Устанавливаем datadome cookie в браузер
await context.addCookies([{
name: 'datadome',
value: ddSolved.value,
domain: '.' + host,
path: '/',
httpOnly: ddSolved.httpOnly ?? true,
secure: ddSolved.secure ?? true,
sameSite: ddSolved.sameSite ?? 'Lax'
}]);
console.log(`Установлена cookie datadome:`, ddSolved.value);
// Повторно открываем сайт после вставки cookie
const page2 = await context.newPage();
const resp2 = await page2.goto(TARGET_URL, { waitUntil: 'domcontentloaded', timeout: 60000 });
console.log(`Статус после установки cookie:: ${resp2?.status()}`);
await browser.close();
}
main();
1. Войдите в свой аккаунт или зарегистрируйтесь в DataDome и получите ключи (client-side и server-side).
Важно: для регистрации необходимо использовать корпоративный рабочий e-mail, принадлежащий вашей компании.
После регистрации вы попадёте в админ-панель.
2. Подключите сайт (домен) в панели DataDome.
Добавьте ваш домен в системе и выберите параметры защиты:
3. Установите интеграцию на стороне сервера.
Используйте Protection API или выберите готовый модуль для вашего стека (Node.js / Express, Nginx, Cloudflare, Java (Tomcat/Jetty/Vert.x), Go и т.д.).
Установите официальный SDK / middleware DataDome, настройте сервер ключ (server-side key) в конфигурации.
Пример интеграции DataDome в Node.js:
DataDome защищает сервер от ботов и подозрительных запросов, автоматически показывая challenge (капчу) при необходимости. Модуль можно использовать с Express или со встроенным HTTP сервером Node.js.
Установка
Для Express:
npm install @datadome/module-expressДля HTTP-модуля Node.js:
npm install @datadome/module-httpПоддерживаются Node.js версии 18 и выше. Необходим серверный ключ, доступный в вашей панели DataDome.
const { DatadomeExpress } = require('@datadome/module-express');
const express = require('express');
const app = express();
// Инициализация клиента DataDome
const datadomeClient = new DatadomeExpress('YOUR_SERVER_KEY');
// Подключение middleware
app.use(datadomeClient.middleware());
// Ваши маршруты
app.get('/', (req, res) => {
res.send('Hello World');
});
// Запуск сервера
app.listen(3000, () => {
console.log('Server running on port 3000');
})
const { DatadomeHttp } = require('@datadome/module-http');
const http = require('http');
const datadomeClient = new DatadomeHttp('YOUR_SERVER_KEY');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer(async (req, res) => {
const { result, error } = await datadomeClient.handleRequest(req, res);
if (result === 'ALLOW') {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World\n');
} else {
console.log('Request challenged');
if (error) console.error(error);
}
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});Настройки модуля
Вы можете передавать конфигурацию при создании клиента:
const datadomeClient = new DatadomeExpress('YOUR_SERVER_KEY', {
timeout: 150, // таймаут в мс, после которого запрос пропускается
urlPatternInclusion: null, // какие URL проверять
urlPatternExclusion: /\.(avi|flv|mka|mkv|mov|mp4|mpeg|mpg|mp3|flac|ogg|ogm|opus|wav|webm|webp|bmp|gif|ico|jpeg|jpg|png|svg|svgz|swf|eot|otf|ttf|woff|woff2|css|less|js|map|json|avif|xml|gz|zip)$/i,
endpointHost: 'api.datadome.co',
});Расширенные возможности:
Более подробно о подключении серверной части можете узнать в официальной документации.
4. Подключите клиентскую часть.
Вставьте JS Tag в <head> вашего сайта:
<head>
<script>
window.ddjskey = 'YOUR_DATADOME_JS_KEY';
window.ddoptions = {
// Добавьте ваши настройки здесь (опционально)
};
</script>
<script src="https://js.datadome.co/tags.js" async></script>
<!-- Остальные элементы head -->
</head>
YOUR_DATADOME_JS_KEY → замените на ваш Client-Side ключ.
Скрипт лучше загружать в начале <head>, чтобы DataDome мог перехватывать запросы и правильно отслеживать поведение пользователей.
Если сайт использует CSP, добавьте следующие директивы:
<script nonce="DYNAMIC_NONCE">
window.ddjskey = 'YOUR_DATADOME_JS_KEY';
window.ddoptions = {};
</script>
script-src js.datadome.co ct.captcha-delivery.com 'nonce-DYNAMIC_NONCE';
connect-src api-js.datadome.co; /* для отправки данных JS Tag */
frame-src *.captcha-delivery.com; /* для challenge pages */
worker-src blob:; /* для web workers */
Более подробно о подключении клиентской части можете узнать в официальной документации DataDome CAPTCHA.
Проверка результата
DataDome создаёт куки datadome= после успешного прохождения проверки. Эти куки автоматически отправляются пользователем — и сервер пропускает запрос. Если куки нет или оно невалидно — DataDome снова покажет челлендж.
Если вам достался сайт с уже установленной капчей или другой системой защиты и при этом нет доступа к коду — ничего страшного! Определить, какая именно технология используется, достаточно легко. А для проверки корректности работы можно использовать сервис распознавания CapMonster Cloud в изолированной тестовой среде, чтобы убедиться, что механизм обработки токенов и логика проверки функционируют корректно.
В случае с DataDome CAPTCHA — достаточно распознать систему, изучить её поведение и убедиться, что защита функционирует корректно. В статье мы показали, как определить DataDome CAPTCHA и где найти инструкции по её подключению или перенастройке, чтобы уверенно поддерживать защиту и контролировать её работу.