DataDome CAPTCHA
i CapMonster Cloud

Rozwiązywanie CAPTCHA, instalacja na stronie i testowanie.

Cennik rozwiązania DataDome CAPTCHA

CAPTCHA
Cena (USD)
$ 2.20
1000 tokenów
Odziedziczyłeś stronę z już wdrożoną captchą lub ochroną, ale bez dostępu do kodu źródłowego? Naturalnie pojawia się pytanie, jaka technologia jest używana, czy działa poprawnie i jak ją przetestować.

W tym artykule staraliśmy się odpowiedzieć na wszystkie najważniejsze pytania. Pierwszym krokiem w rozwiązywaniu problemu jest ustalenie, jaki system ochrony jest używany. W tym celu możesz skorzystać z listy popularnych captcha i systemów ochrony antybotowej, gdzie znajdziesz przykłady graficzne oraz kluczowe cechy, które pomogą szybko rozpoznać, z czym masz do czynienia.

Jeśli okaże się, że na Twojej stronie używany jest DataDome CAPTCHA, kolejnym krokiem będzie dokładniejsze poznanie jej właściwości i sposobu działania. W tym artykule możesz również zapoznać się z instrukcją integracji systemu DataDome CAPTCHA, aby w pełni zrozumieć, jak funkcjonuje on na Twojej stronie. Dzięki temu nie tylko lepiej poznasz obecną ochronę, ale też świadomie zaplanujesz jej dalsze utrzymanie.

Czym jest DataDome
Czym jest DataDome
DataDome to system ochrony przed botami i atakami automatycznymi, który analizuje zachowanie użytkowników i parametry sieciowe, aby odróżnić prawdziwych użytkowników od złośliwego ruchu i zapewnić stabilne działanie strony lub aplikacji.
Background
Przykłady DataDome CAPTCHA
Analiza zachowań
Analiza zachowań
Ocena działań użytkownika (kliknięcia, przewijanie, szybkość interakcji).
Weryfikacja JavaScript
Weryfikacja JavaScript
Ukryta weryfikacja przeglądarki i jej środowiska.
Weryfikacja sieci
Weryfikacja sieci
Analiza adresów IP, nagłówków, proxy i znanych botnetów.
Challenge
Challenge
Wyświetlanie CAPTCHA (zwykle w formie suwaka „Przesuń w prawo, aby rozwiązać zagadkę”), jeśli system ma wątpliwości.

Jak rozwiązać CAPTCHA DataDome za pomocą CapMonster Cloud

Podczas testowania ochrony DataDome ważne jest, aby upewnić się, że jest poprawnie zintegrowana i reaguje na podejrzany ruch. Do ręcznej weryfikacji otwórz stronę chronioną przez DataDome i sprawdź, czy system jest aktywny.
Spróbuj wykonać żądanie symulujące podejrzane zachowanie (np. zbyt częste odświeżanie strony lub wysyłanie formularza bez prawidłowych danych) — DataDome powinien zablokować dostęp lub wyświetlić stronę ochronną.
Do automatycznego testowania i rozwiązywania CAPTCHA można użyć specjalistycznych usług, np. CapMonster Cloud — narzędzia, które przyjmuje parametry CAPTCHA, przetwarza je na swoich serwerach i zwraca gotowe rozwiązanie. Rozwiązanie (token lub ciasteczko) można wprowadzić do formularza lub przeglądarki, aby przejść weryfikację bez udziału użytkownika.

Praca z CapMonster Cloud poprzez API zazwyczaj obejmuje następujące kroki:

Tworzenie zadaniaTworzenie zadania
arrow
Wysyłanie żądania APIWysyłanie żądania API
arrow
Odebranie wynikuOdebranie wyniku
arrow
Umieszczenie tokenu na stronieUmieszczenie tokenu na stronie
arrow
Rozpoznawanie CAPTCHA DataDome przy użyciu gotowych bibliotek
Usługa CapMonster Cloud oferuje gotowe biblioteki do wygodnej pracy w językach Python i JavaScript (Node.js).
Python
JavaScript
Rozwiązanie DataDome i wstawienie ciasteczka
Przykład w Node.js dla pełnego cyklu rozpoznawania CAPTCHA na stronie. Możliwe podejścia: użycie żądań HTTP do pobrania HTML i parametrów systemu ochrony, wysłanie odpowiedzi i przetworzenie wyniku. Lub przy użyciu narzędzi do automatyzacji (np. Playwright) — otwórz stronę, poczekaj na weryfikację, wyślij parametry przez klienta CapMonster Cloud, odbierz wynik, wstaw ciasteczka do przeglądarki (do testów można użyć zarówno poprawnych, jak i niepoprawnych danych) i zobacz wynik.

// npx playwright install chromium

import { chromium } from 'playwright';
import { CapMonsterCloudClientFactory, ClientOptions, DataDomeRequest } from '@zennolab_com/capmonstercloud-client';

// Podaj swój klucz API CapMonster Cloud
const API_KEY = 'YOUR_API_KEY';

// Twoja strona jest chroniona przez 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/150.0.0.0 Safari/537.36

// Konfiguracja proxy
const proxy = {
  proxyType: "http",
  proxyAddress: '8.8.8.8',
  proxyPort: 8080,
  proxyLogin: 'proxyLogin',
  proxyPassword: 'proxyPassword'
};

async function main() {

  // Uruchamiamy przeglądarkę
  const browser = await chromium.launch({ headless: true });
  const context = await browser.newContext({ userAgent: USER_AGENT });
  const page = await context.newPage();

  // Przechodzimy na stronę
  await page.goto(TARGET_URL, { waitUntil: 'networkidle' });

  // Szukamy już ustawionego ciasteczka datadome (jeśli istnieje)
  const existingDd = (await context.cookies()).find(c => /datadome|dd_/i.test(c.name));

  // Szukamy iframe DataDome -> URL CAPTCHA
  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(`=== Wyciągnięte parametry DataDome ===`);
  console.log(`captchaUrl:`, captchaUrl || 'nie znaleziono');
  console.log(`aktualne ciasteczko datadome::`, existingDd ? ${existingDd.name}=${existingDd.value}` : 'brak');

  const cm = CapMonsterCloudClientFactory.Create(
    new ClientOptions({ clientKey: API_KEY })
  );

  // Wysyłamy zadanie do CapMonster
  console.log(`Wysyłamy zadanie DataDome do CapMonster......`);

  // Wysyłamy zadanie do rozwiązania 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;

  // Pobieramy domenę i potrzebne ciasteczka z rozwiązania
  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=== Ciasteczka z 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));

  // Ustawiamy ciasteczko datadome w przeglądarce
  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(`Ciasteczko datadome ustawione:`, ddSolved.value);

  // Ponownie otwieramy stronę po wstawieniu ciasteczka
  const page2 = await context.newPage();
  const resp2 = await page2.goto(TARGET_URL, { waitUntil: 'domcontentloaded', timeout: 60000 });

  console.log(`Status po ustawieniu ciasteczka:: ${resp2?.status()}`);

  await browser.close();
}

main();
  
Jak podłączyć DataDome CAPTCHA do swojej strony
Aby pewnie poruszać się w działaniu CAPTCHA na Twojej stronie, rozumieć logikę jej weryfikacji, ponownie podłączyć lub skonfigurować, zalecamy zapoznanie się z tym działem. Opisuje proces integracji ochrony — pomoże szybko zrozumieć wszystkie szczegóły.

1. Zaloguj się do swojego konta lub zarejestruj się w DataDome i uzyskaj klucze (client-side i server-side).

Ważne: do rejestracji należy użyć firmowego maila służbowego.

Po rejestracji trafisz do panelu administracyjnego.

2. Podłącz stronę (domenę) w panelu DataDome.

Dodaj swoją domenę do systemu i wybierz parametry ochrony:

  • Ochrona sieci Web (HTTP traffic protection)
  • Bot detection & mitigation
  • Frequency & behavior analysis
  • Strony challenge (strona weryfikacji DataDome)
  • JS tag configuration

3. Zainstaluj integrację po stronie serwera.

Użyj Protection API lub wybierz gotowy moduł dla swojego stacka (Node.js / Express, Nginx, Cloudflare, Java (Tomcat/Jetty/Vert.x), Go itp.).

Zainstaluj oficjalne SDK / middleware DataDome, skonfiguruj server key w ustawieniach.

Przykład integracji DataDome w Node.js:

DataDome chroni serwer przed botami i podejrzanymi żądaniami, automatycznie pokazując challenge (CAPTCHA) w razie potrzeby. Moduł można używać z Express lub wbudowanym serwerem HTTP Node.js.

Instalacja

Dla Express:

npm install @datadome/module-express

Dla modułu HTTP Node.js:

npm install @datadome/module-http

Obsługiwane wersje Node.js: 18+. Wymagany server-side key z panelu DataDome.

Integracja z ExpressIntegracja z Express
arrow
Integracja z serwerem HTTP Node.jsIntegracja z serwerem HTTP Node.js
arrow

Ustawienia modułu

Możesz przekazać konfigurację przy tworzeniu klienta:


const datadomeClient = new DatadomeExpress('YOUR_SERVER_KEY', {
  timeout: 150, // timeout w ms, po którym żądanie jest przepuszczane
  urlPatternInclusion: null, // które URL-e sprawdzać
  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',
});

Rozszerzone możliwości:

  • Logowanie nagłówków DataDome (enrichedHeaders)
  • CSP nonce: app.use(datadomeClient.middleware({ nonce: 'VALUE' }))
  • Nadpisanie metadanych żądania przez handlers

HelpIcon

Więcej szczegółów o integracji serwerowej w oficjalnej dokumentacji.

4. Podłącz część kliencką.

Wstaw JS Tag w <head> swojej strony:


<head>
  <script>
    window.ddjskey = 'YOUR_DATADOME_JS_KEY';
    window.ddoptions = {
      // Dodaj tu swoje ustawienia (opcjonalnie)
    };
  </script>
  <script src="https://js.datadome.co/tags.js" async></script>
  <!-- Pozostałe elementy head -->
</head>

YOUR_DATADOME_JS_KEY → Zamień na swój Client-Side Key.

Skrypt najlepiej ładować na początku <head>, aby DataDome mógł przechwytywać żądania i prawidłowo śledzić zachowanie użytkowników.

Jeśli strona używa CSP, dodaj następujące dyrektywy:

Dla inline scriptDla inline script
arrow
Dla ładowania zewnętrznych skryptówDla ładowania zewnętrznych skryptów
arrow

HelpIcon

Więcej szczegółów o integracji części klienckiej w oficjalnej dokumentacji DataDome CAPTCHA.

Sprawdzenie wyniku

DataDome tworzy ciasteczko datadome= po pomyślnym przejściu weryfikacji. To ciasteczko jest automatycznie wysyłane przez użytkownika — a serwer przepuszcza żądanie. Jeśli ciasteczka nie ma lub jest nieważne, DataDome ponownie wyświetli challenge.

Background
Możliwe błędy i debugowanie
Bug Icon
Nieprawidłowy klucz lub domena
DataDome nie chroni strony poprawnie; challenge nie pojawia się. Sprawdź, czy używasz prawidłowego Server-Side Key i czy domena jest dodana w panelu DataDome.
Bug Icon
Limit czasu przetwarzania żądania
Serwer nie otrzymał odpowiedzi z API DataDome. Zwiększ wartość timeout w ustawieniach modułu.
Bug Icon
Pusty token lub nieprawidłowy parametr
Błąd przy przesyłaniu wyniku weryfikacji do serwera. Upewnij się, że tag JS klienta jest poprawnie zainstalowany i zwraca ddtoken.
Bug Icon
Challenge niezaliczony
Żądanie oznaczone jako podejrzane lub token wygasł. Włącz logowanie poprzez parametr logger modułu i śledź zdarzenia blocked i valid dla diagnostyki.
Sprawdzenie odporności ochrony
Rekomendacje dotyczące bezpieczeństwa i optymalizacji
Przechowuj <span class="font-bold">Server-Side Key</span> tylko na serwerze; nie przekazuj go do części klienta.
Włącz logowanie zdarzeń przez <span class="font-bold">logger</span> lub nasłuchiwacze <span class="font-bold">blocked/valid</span>, aby śledzić przyczyny blokad.
Umieść linki do <span class="font-bold">Polityki prywatności</span> i <span class="font-bold">Regulaminu DataDome</span> na stronach formularzy dla przejrzystości wobec użytkowników.
Wnioski

Jeśli przejąłeś stronę internetową, na której jest już zainstalowany captcha lub inny system zabezpieczeń, a jednocześnie nie masz dostępu do kodu — to nic strasznego! Dość łatwo jest ustalić, jaka dokładnie technologia jest używana. Aby sprawdzić poprawność działania, możesz skorzystać z usługi rozpoznawania CapMonster Cloud w odizolowanym środowisku testowym, żeby upewnić się, że mechanizm przetwarzania tokenów i logika weryfikacji działają prawidłowo.

W przypadku DataDome CAPTCHA wystarczy rozpoznać system, przeanalizować jego zachowanie i upewnić się, że zabezpieczenie działa poprawnie. W artykule pokazaliśmy, jak zidentyfikować DataDome CAPTCHA oraz gdzie znaleźć instrukcje dotyczące jego podłączenia lub ponownej konfiguracji, aby móc pewnie utrzymywać ochronę i kontrolować jej działanie.

Conclusion
Przydatne linki
DocIconDokumentacja DataDome CAPTCHADocIconDokumentacja CapMonster Cloud (praca z DataDome CAPTCHA)

Często zadawane pytania o DataDome

Najwyraźniejszym wskaźnikiem jest cookie datadome w odpowiedziach serwera:

  1. Otwórz stronę chronioną przez DataDome w przeglądarce (Chrome, Firefox).
  2. Naciśnij F12 (narzędzia deweloperskie) → przejdź do zakładki ApplicationCookies.
  3. Znajdź domenę strony (np. www.example.com).
  4. Wśród cookies poszukaj klucza datadome

Możesz też sprawdzić, czy żądania strony zawierają wywołania do geo.captcha-delivery.com w narzędziach deweloperskich → zakładka Network; ten endpoint należy do infrastruktury dostarczania challenge DataDome.

Zainstaluj oficjalny pakiet:

npm install @datadome/module-express

Zaimportuj i zainicjalizuj klienta:

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

następnie

new DatadomeExpress('YOUR_SERVER_SIDE_KEY')

Podłącz middleware:

app.use(datadomeClient.middleware())

W większości przypadków middleware należy zarejestrować przed chronionymi trasami, aby żądania mogły być analizowane przed dotarciem do obsługi tras. W zależności od struktury aplikacji możesz też stosować middleware selektywnie do określonych tras lub grup tras.

Użyj tego przykładu jako minimalnej konfiguracji:

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

Oficjalny moduł obsługuje również dodatkowe opcje konfiguracji i dostosowania dla zaawansowanych integracji.

Więcej szczegółów o integracji po stronie serwera w oficjalnej dokumentacji.

Aby sprawdzić, czy DataDome jest poprawnie skonfigurowany, wypróbuj te trzy testy:

  1. Odwiedź chronioną stronę bez DataDome JS Tag. Jeśli integracja działa zgodnie z oczekiwaniami, powinieneś otrzymać challenge CAPTCHA.
  2. Symuluj zautomatyzowany ruch za pomocą narzędzi takich jak k6 lub JMeter. DataDome powinien wykryć tę aktywność i odpowiedzieć challenge.
  3. Ponownie użyj rozwiązanej datadome cookie z innego adresu IP. To nie powinno działać, a DataDome powinien wyświetlić nowy challenge CAPTCHA.

Jeśli rozwiązywanie DataDome nie powiedzie się, oto najczęstsze przyczyny:

  • ERROR_CAPTCHA_UNSOLVABLE: Parametry createTask są nieprawidłowe. Twój proxy może być zablokowany przez DataDome CAPTCHA. Zmień serwer proxy używany do żądania. Sprawdź ponownie parametry wysyłane w żądaniu. Jeśli błąd się powtarza, skontaktuj się z pomocą techniczną, podając: taskId, typ zadania (type), oryginalny obraz lub dane wejściowe, datę/godzinę zadania i treść żądania.
  • ERROR_KEY_DOES_NOT_EXIST: Twój clientKey jest nieprawidłowy lub nieaktywny. Sprawdź klucz na koncie CapMonster Cloud.
  • ERROR_PROXY_READ_TIMEOUT: Proxy jest zbyt wolny lub zawodny. Spróbuj innego proxy. Ten błąd może być też spowodowany nieprawidłowym metadata.captchaUrl w żądaniu createTask. Sprawdź ponownie link do captcha.
  • Cookies otrzymane z usługi nie działają na docelowej stronie: Żądanie rozwiązania i żądanie końcowe zostały wysłane z różnych adresów IP. Użyj tego samego IP dla obu. Sprawdź też poprawność ustawienia cookies; upewnij się, że zwrócone datadome cookie jest prawidłowo ustawione w przeglądarce lub nagłówkach żądania.

Dla żądań HTTP dołącz rozwiązane wartości do nagłówka żądania Cookie jako datadome=<value> przy każdym kolejnym żądaniu do chronionej domeny.

W narzędziach automatyzacji przeglądarki takich jak Puppeteer, Selenium lub Playwright, dodaj datadome cookie za pomocą wbudowanej metody cookie frameworka przed otwarciem chronionej strony.

Na przykład:

  • W Playwright użyj context.addCookies().
  • W Puppeteer użyj page.setCookie().
  • W Selenium użyj driver.add_cookie().

Upewnij się, że cookie jest ustawione dla właściwej domeny i ścieżki. Używaj też tych metod z httpOnly: true, secure: true i sameSite: 'Lax', aby przeglądarka obsługiwała je tak samo jak zwykłe cookie sesji.