In diesem Artikel haben wir versucht, alle wichtigen Fragen zu beantworten. Der erste Schritt bei der Lösung der Aufgabe besteht darin festzustellen, welches Schutzsystem eingesetzt wird. Dazu können Sie die Liste beliebter Captchas und Anti-Bot-Schutzsysteme heranziehen, in der visuelle Beispiele und zentrale Merkmale aufgeführt sind, die Ihnen helfen, schnell zu erkennen, womit Sie es zu tun haben.
Wenn Sie feststellen, dass auf Ihrer Website DataDome CAPTCHA eingesetzt wird, besteht der nächste Schritt darin, seine Eigenschaften und Funktionsweise genauer zu untersuchen. Ebenfalls in diesem Artikel finden Sie eine Anleitung zur Integration von DataDome CAPTCHA, damit Sie vollständig verstehen, wie das System auf Ihrer Website arbeitet. So können Sie nicht nur den aktuellen Schutz besser einschätzen, sondern auch seine Wartung vorausschauend planen.
Die Arbeit mit CapMonster Cloud über die API umfasst in der Regel folgende Schritte:
type - CustomTask
class - DataDome
websiteURL - die Adresse der Hauptseite, auf der die CAPTCHA gelöst wird.
captchaUrl (innerhalb von metadata) - "captchaUrl" – der Link zur CAPTCHA. Sie sieht normalerweise so aus: "https://geo.captcha-delivery.com/captcha/?initialCid=..."
datadomeCookie (innerhalb von metadata) - Ihre DataDome-Cookies. Sie können sie auf der Seite mit document.cookie abrufen (wenn sie nicht das HttpOnly-Flag haben), im Header Set-Cookie: "datadome=...", oder direkt aus dem HTML-Code der Seite initialCid.
userAgent - User-Agent des Browsers. Übergeben Sie nur einen aktuellen UA unter Windows.
Für diese Aufgabe müssen auch Ihre Proxys verwendet werden:
proxyType :
proxyAddress - IP-Adresse des Proxys (IPv4/IPv6).
proxyPort - Proxy-Port.
proxyLogin - Proxy-Login.
proxyPassword - Proxy-Passwort.
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/144.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';
// Geben Sie Ihren CapMonster Cloud API-Key an
const API_KEY = 'YOUR_API_KEY';
// Ihre Website unter DataDome-Schutz
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/144.0.0.0 Safari/537.36
// Proxy-Konfiguration
const proxy = {
proxyType: "http",
proxyAddress: '8.8.8.8',
proxyPort: 8080,
proxyLogin: 'proxyLogin',
proxyPassword: 'proxyPassword'
};
async function main() {
// Browserstart
const browser = await chromium.launch({ headless: true });
const context = await browser.newContext({ userAgent: USER_AGENT });
const page = await context.newPage();
// Zur Website wechseln
await page.goto(TARGET_URL, { waitUntil: 'networkidle' });
// Nach bereits gesetztem datadome-Cookie suchen (falls vorhanden)
const existingDd = (await context.cookies()).find(c => /datadome|dd_/i.test(c.name));
// DataDome-Iframe finden → 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(`=== Extrahierte DataDome-Parameter ===`);
console.log(`captchaUrl:`, captchaUrl || 'nicht gefunden');
console.log(`aktuelles datadome-Cookie::`, existingDd ? ${existingDd.name}=${existingDd.value}` : 'kein Wert');
const cm = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);
// Aufgabe an CapMonster senden
console.log(`Sende DataDome-Aufgabe an CapMonster......`);
// DataDome-Task wird gesendet
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;
// Domain und benötigte Cookies aus der Lösung abrufen
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=== Cookies von 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 im Browser setzen
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 gesetzt:`, ddSolved.value);
// Website nach Setzen des Cookies erneut öffnen
const page2 = await context.newPage();
const resp2 = await page2.goto(TARGET_URL, { waitUntil: 'domcontentloaded', timeout: 60000 });
console.log(`Status nach Cookie-Installation:: ${resp2?.status()}`);
await browser.close();
}
main();
1. Melden Sie sich in Ihrem Konto an oder registrieren Sie sich bei DataDome und erhalten Sie Ihre Schlüssel (Client-Side und Server-Side).
Wichtig: Für die Registrierung müssen Sie eine geschäftliche Firmen-E-Mail verwenden.
Nach der Registrierung gelangen Sie ins Admin-Panel.
2. Fügen Sie die Website (Domain) im DataDome-Panel hinzu.
Fügen Sie Ihre Domain in das System ein und wählen Sie die Schutzparameter:
3. Server-seitige Integration installieren.
Verwenden Sie die Protection API oder wählen Sie ein fertiges Modul für Ihren Stack (Node.js / Express, Nginx, Cloudflare, Java (Tomcat/Jetty/Vert.x), Go usw.).
Installieren Sie das offizielle DataDome SDK / Middleware und konfigurieren Sie den Server-Side Key.
Beispiel für DataDome-Integration in Node.js:
DataDome schützt den Server vor Bots und verdächtigen Anfragen, indem bei Bedarf automatisch eine Challenge angezeigt wird. Das Modul kann mit Express oder dem integrierten HTTP-Server von Node.js verwendet werden.
Installation
Für Express:
npm install @datadome/module-expressFür den HTTP-Modul-Server in Node.js:
npm install @datadome/module-httpUnterstützt werden Node.js-Versionen ab 18. Ein serverseitiger Schlüssel ist erforderlich.
const { DatadomeExpress } = require('@datadome/module-express');
const express = require('express');
const app = express();
// Initialisierung des DataDome-Clients
const datadomeClient = new DatadomeExpress('YOUR_SERVER_KEY');
// Middleware-Einbindung
app.use(datadomeClient.middleware());
// Ihre Routen
app.get('/', (req, res) => {
res.send('Hello World');
});
// Serverstart
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}/`);
});Moduleinstellungen
Die Konfiguration kann bei der Client-Erstellung übergeben werden:
const datadomeClient = new DatadomeExpress('YOUR_SERVER_KEY', {
timeout: 150, // Timeout in ms, nach dessen Ablauf die Anfrage durchgelassen wird
urlPatternInclusion: null, // welche URLs überprüft werden
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',
});Erweiterte Möglichkeiten:
Weitere Details finden Sie in der offiziellen Dokumentation.
4. Client-seitige Integration.
Fügen Sie den JS-Tag in den <head> Ihrer Website ein:
<head>
<script>
window.ddjskey = 'YOUR_DATADOME_JS_KEY';
window.ddoptions = {
// Hier können Sie Ihre Einstellungen hinzufügen (optional)
};
</script>
<script src="https://js.datadome.co/tags.js" async></script>
<!-- Weitere head-Elemente -->
</head>
YOUR_DATADOME_JS_KEY → Ersetzen Sie dies durch Ihren Client-Side Key.
Der Skript sollte früh im <head> geladen werden, damit DataDome Anfragen abfangen und das Benutzerverhalten korrekt analysieren kann.
Wenn Ihre Website CSP verwendet, fügen Sie folgende Direktiven hinzu:
<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; /* für das Senden von JS-Tag-Daten */
frame-src *.captcha-delivery.com; /* für Challenge-Seiten */
worker-src blob:; /* für Web-Worker */
Mehr Details zur Client-Integration finden Sie in der offiziellen Dokumentation der DataDome CAPTCHA.
Ergebnisprüfung
DataDome erstellt das Cookie datadome= nach einer erfolgreich bestandenen Prüfung. Dieses Cookie wird automatisch vom Nutzer gesendet – und der Server lässt die Anfrage durch. Wenn das Cookie fehlt oder ungültig ist, zeigt DataDome erneut eine Challenge an.
Wenn Sie eine Website übernommen haben, auf der bereits ein Captcha oder ein anderes Schutzsystem installiert ist und Sie keinen Zugriff auf den Code haben, ist das kein Problem! Es ist ziemlich einfach festzustellen, welche Technologie genau verwendet wird. Und um die korrekte Funktionsweise zu überprüfen, können Sie den Erkennungsdienst CapMonster Cloud in einer isolierten Testumgebung nutzen, um sicherzustellen, dass der Mechanismus zur Tokenverarbeitung und die Prüflogik ordnungsgemäß funktionieren.
Im Fall von DataDome CAPTCHA reicht es aus, das System zu erkennen, sein Verhalten zu analysieren und sich zu vergewissern, dass der Schutz korrekt arbeitet. In diesem Artikel haben wir gezeigt, wie Sie DataDome CAPTCHA identifizieren und wo Sie Anleitungen für die Einbindung oder Neukonfiguration finden, damit Sie den Schutz zuverlässig betreiben und seine Arbeit unter Kontrolle halten können.