logo
bars

DataDome CAPTCHA
и CapMonster Cloud

Решение капчи, установка на сайт и тестирование.

Стоимость решения DataDome CAPTCHA

Тип капчи
Цена (РУБ)
₽ 177.49
1000 токенов
Вам достался «по наследству» сайт с подключённой капчей или другой защитой, но доступа к исходному коду нет? В такой ситуации возникают вопросы: какую именно систему защиты использует сайт, правильно ли она установлена и как проверить её работу?

В этой статье мы постарались дать ответы на все вопросы. А начать решение задачи нужно с определения того, какая система защиты используется. Для этого можно обратиться к списку популярных капч и систем антибот-защиты, где представлены визуальные примеры и ключевые признаки, которые могут помочь быстро определить, с чем вы имеете дело.

Если вы обнаружили, что на вашем сайте используется DataDome CAPTCHA, следующим шагом станет более подробное изучение её свойств и самой работы. Также в этой статье вы можете изучить инструкцию по подключению системы DataDome CAPTCHA, чтобы полностью разобраться, как она функционирует на вашем сайте. Это позволит не только понимать текущую защиту, но и грамотно планировать её поддержку.

Что такое DataDome

Что такое DataDome

DataDome — это система защиты от ботов и автоматических атак, которая анализирует поведение посетителей и сетевые параметры, чтобы отличить реальных пользователей от вредоносного трафика и обеспечить стабильную работу сайта или приложения.
Background
Виды DataDome CAPTCHA
Поведенческий анализ
Поведенческий анализ
Оценка действий пользователя (клики, прокрутка, скорость взаимодействия).
JavaScript-проверка
JavaScript-проверка
Скрытая проверка браузера и его окружения.
Сетевая проверка
Сетевая проверка
Анализ IP-адресов, заголовков, прокси и известных бот-сетей.
Challenge
Challenge
Показ капчи (обычно в виде слайдера “Смахните вправо, чтобы заполнить головоломку”), если система сомневается.

Как решить DataDome CAPTCHA через CapMonster Cloud

При тестировании защиты DataDome важно убедиться, что она корректно интегрирована и реагирует на подозрительный трафик. Для ручной проверки откройте страницу, защищённую DataDome, и убедитесь, что система активна.
Попробуйте выполнить запрос, имитирующий подозрительное поведение (например, слишком частые обновления страницы или отправку формы без валидных данных) — DataDome должен заблокировать доступ или показать защитную страницу.
Для автоматического тестирования и распознавания капчи можно использовать специализированные сервисы, например, CapMonster Cloud — инструмент, который принимает параметры капчи, обрабатывает их на своих серверах и возвращает готовое решение. Это решение (токен или куки) можно подставить в форму или браузер, чтобы пройти проверку без участия пользователя.

Работа с CapMonster Cloud через API обычно включает следующие шаги:

Создание задачи (Task)Создание задачи (Task)
arrow
Отправка запроса к APIОтправка запроса к API
arrow
Получение результатаПолучение результата
arrow
Подстановка токена на страницуПодстановка токена на страницу
arrow

Распознавание DataDome CAPTCHA с использованием готовых библиотек

Сервис CapMonster Cloud предоставляет готовые библиотеки для удобной работы на языках Python, JavaScript (Node.js).
Python
JavaScript
python
import asyncio
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import DataDomeCustomTaskRequest
from capmonstercloudclient.requests.baseRequestWithProxy import ProxyInfo
API_KEY = "YOUR_API_KEY"  # Укажите ваш API-ключ CapMonster Cloud
async def solve_datadome_captcha():
    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"
    )
    # Создаем задачу DataDome
    datadome_request = DataDomeCustomTaskRequest(
        websiteUrl="https://example.com",  # URL страницы с капчей
        metadata={
            "datadomeCookie": "datadome=VYUWrgJ9ap4zmXq8Mgbp...64emvUPeON45z", 
            "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"
        },
        proxy=proxy,
        userAgent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36"
    )
    # При необходимости можно проверить баланс 
    balance = await cap_monster_client.get_balance()
    print("Balance:", balance)
    result = await cap_monster_client.solve_captcha(datadome_request)
    print("Solution:", result)
asyncio.run(solve_datadome_captcha())
Решение DataDome и подстановка куки
Пример на Node.js для полного цикла распознавания капчи на вашей веб-странице. Возможные подходы: использовать HTTP-запросы для получения HTML и параметров системы защиты, отправить ответ и обработать результат. Или с помощью инструментов для автоматизации (например, Playwright) — открыть страницу, дождаться проверки, отправить параметры через клиент CapMonster Cloud, получить результат, подставить куки в браузер (для тестирования вы можете использовать как правильные, так и некорректные данные) и увидеть результат.
python

// 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/156.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();
  
Как подключить DataDome CAPTCHA к своему сайту
Чтобы уверенно ориентироваться в работе капчи на вашем сайте, понимать логику её проверки, заново подключить или перенастроить, рекомендуем вам изучить этот раздел. В нём описан процесс подключения защиты — это поможет быстро разобраться во всех нюансах.

1. Войдите в свой аккаунт или зарегистрируйтесь в DataDome и получите ключи (client-side и server-side).

Важно: для регистрации необходимо использовать корпоративный рабочий e-mail, принадлежащий вашей компании.

После регистрации вы попадёте в админ-панель.

2. Подключите сайт (домен) в панели DataDome.

Добавьте ваш домен в системе и выберите параметры защиты:

  • Web Protection (защита HTTP-трафика)
  • Bot detection & mitigation
  • Frequency & behavior analysis
  • Challenge pages (страница с проверкой DataDome)
  • JS tag configuration

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:

javascript
npm install @datadome/module-express

Для HTTP-модуля Node.js:

javascript
npm install @datadome/module-http

Поддерживаются Node.js версии 18 и выше. Необходим серверный ключ, доступный в вашей панели DataDome.

Интеграция с ExpressИнтеграция с Express
arrow
Интеграция с HTTP сервером Node.jsИнтеграция с HTTP сервером Node.js
arrow

Настройки модуля

Вы можете передавать конфигурацию при создании клиента:

javascript

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',
});

Расширенные возможности:

  • Логирование заголовков DataDome (enrichedHeaders)
  • CSP nonce: app.use(datadomeClient.middleware({ nonce: 'VALUE' }))
  • Переопределение метаданных запроса через handlers

HelpIcon

Более подробно о подключении серверной части можете узнать в официальной документации.

4. Подключите клиентскую часть.

Вставьте JS Tag в <head> вашего сайта:

markup

<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, добавьте следующие директивы:

Для inline скриптаДля inline скрипта
arrow
Для загрузки внешних скриптовДля загрузки внешних скриптов
arrow

HelpIcon

Более подробно о подключении клиентской части можете узнать в официальной документации DataDome CAPTCHA.

Проверка результата

DataDome создаёт куки datadome= после успешного прохождения проверки. Эти куки автоматически отправляются пользователем — и сервер пропускает запрос. Если куки нет или оно невалидно — DataDome снова покажет челлендж.

Background

Возможные ошибки и отладка

Bug Icon

Неверный ключ или домен

DataDome не защищает сайт корректно, challenge не появляется. Проверьте, что используется правильный Server-Side Key и что домен добавлен в панели DataDome.
Bug Icon

Таймаут обработки запроса

Сервер не дождался ответа от DataDome API. Увеличьте значение timeout в настройках модуля.
Bug Icon

Пустой токен или неверный параметр

Ошибка при передаче результата проверки на сервер. Убедитесь, что клиентский JS Tag корректно установлен и возвращает ddtoken.
Bug Icon

Challenge не пройден

Запрос помечен как подозрительный или токен просрочен. Для диагностики включите логирование через параметр logger модуля и отслеживайте события blocked и valid.
Проверка устойчивости защиты
Рекомендации по безопасности и оптимизации
Храните <span class="font-bold">Server-Side Key</span> только на сервере, не передавайте его в клиентскую часть.
Включайте логирование событий через <span class="font-bold">logger</span> или слушатели <span class="font-bold">blocked/valid</span>, чтобы отслеживать причины блокировок.
Разместите ссылки на <span class="font-bold">Политику конфиденциальности</span> и <span class="font-bold">Условия использования DataDome</span> на страницах с формами, как это рекомендуется для прозрачности перед пользователями.
Заключение

Если вам достался сайт с уже установленной капчей или другой системой защиты и при этом нет доступа к коду — ничего страшного! Определить, какая именно технология используется, достаточно легко. А для проверки корректности работы можно использовать сервис распознавания CapMonster Cloud в изолированной тестовой среде, чтобы убедиться, что механизм обработки токенов и логика проверки функционируют корректно.

В случае с DataDome CAPTCHA — достаточно распознать систему, изучить её поведение и убедиться, что защита функционирует корректно. В статье мы показали, как определить DataDome CAPTCHA и где найти инструкции по её подключению или перенастройке, чтобы уверенно поддерживать защиту и контролировать её работу.

Conclusion

Полезные ссылки

DocIconДокументация DataDome CAPTCHA →DocIconДокументация CapMonster Cloud (работа с DataDome CAPTCHA) →

Часто задаваемые вопросы о DataDome

Самым очевидным признаком является cookie datadome в ответах сервера:

  1. Откройте сайт, защищённый DataDome, в браузере (Chrome, Firefox).
  2. Нажмите F12 (инструменты разработчика) → перейдите на вкладку Application → Cookies.
  3. Найдите домен сайта (например, www.example.com).
  4. Среди cookies найдите ключ datadome

Также можно проверить, есть ли в запросах к сайту обращения к geo.captcha-delivery.com на вкладке Dev tools → Network; этот endpoint относится к инфраструктуре доставки challenge DataDome.

Установите официальный пакет:

npm install @datadome/module-express

Импортируйте и инициализируйте клиент:

const { DatadomeExpress } = require('@datadome/module-express')

затем

new DatadomeExpress('YOUR_SERVER_SIDE_KEY')

Подключите middleware:

app.use(datadomeClient.middleware())

В большинстве случаев middleware следует зарегистрировать до защищённых маршрутов, чтобы запросы анализировались до попадания в обработчики маршрутов. В зависимости от структуры приложения middleware можно применять выборочно к отдельным маршрутам или группам маршрутов.

Используйте этот пример как минимальную настройку:

javascript
const { DatadomeExpress } = require('@datadome/module-express');
const express = require('express');
const app = express();

// Initialize DataDome client
const datadomeClient = new DatadomeExpress('YOUR_SERVER_KEY');

// Connect middleware
app.use(datadomeClient.middleware());

// Your routes
app.get('/', (req, res) => {
  res.send('Hello World');
});

// Start server
app.listen(3000, () => {
  console.log('Server running on port 3000');
})

Официальный модуль также поддерживает дополнительные параметры конфигурации и настройки для продвинутых интеграций.

Подробнее о серверной интеграции в официальной документации.

Чтобы проверить, правильно ли настроен DataDome, попробуйте эти три теста:

  1. Посетите защищённую страницу без DataDome JS Tag. Если интеграция работает как ожидается, вы должны получить CAPTCHA challenge.
  2. Имитируйте автоматизированный трафик с помощью инструментов вроде k6 или JMeter. DataDome должен обнаружить эту активность и ответить challenge.
  3. Повторно используйте решённую datadome cookie с другого IP-адреса. Это не должно работать, и DataDome должен показать новый CAPTCHA challenge.

Если решение DataDome не удаётся, вот наиболее частые причины:

  • ERROR_CAPTCHA_UNSOLVABLE: Параметры createTask указаны неверно. Ваш прокси может быть заблокирован DataDome CAPTCHA. Смените прокси-сервер для запроса. Перепроверьте параметры в запросе. Если ошибка повторяется, обратитесь в поддержку, указав: taskId, тип задачи (type), исходное изображение или входные данные, дату/время задачи и тело запроса.
  • ERROR_KEY_DOES_NOT_EXIST: Ваш clientKey неверен или неактивен. Проверьте ключ в аккаунте CapMonster Cloud.
  • ERROR_PROXY_READ_TIMEOUT: Прокси слишком медленный или ненадёжный. Попробуйте другой прокси. Эта ошибка также может быть вызвана неверным metadata.captchaUrl в запросе createTask. Перепроверьте ссылку на капчу.
  • Cookies, полученные от сервиса, не работают на целевом сайте: Запрос на решение и финальный запрос были отправлены с разных IP. Используйте один и тот же IP для обоих. Также проверьте корректность установки cookies; убедитесь, что возвращённая datadome cookie правильно установлена в браузере или заголовках запроса.

Для HTTP-запросов включайте решённое значение в заголовок Cookie как datadome=<value> при каждом последующем запросе к защищённому домену.

В инструментах автоматизации браузера, таких как Puppeteer, Selenium или Playwright, добавьте datadome cookie встроенным методом фреймворка перед открытием защищённой страницы.

Например:

  • В Playwright используйте context.addCookies().
  • В Puppeteer используйте page.setCookie().
  • В Selenium используйте driver.add_cookie().

Убедитесь, что cookie установлена для правильного домена и пути. Также используйте эти методы с httpOnly: true, secure: true и sameSite: 'Lax', чтобы браузер обрабатывал её так же, как обычную сессионную cookie.