この記事では、よくある疑問にできるだけお答えしました。まず最初のステップは、どのような保護システムが使われているかを特定することです。そのために、代表的なキャプチャやボット対策システムの一覧を参照できます。ここには、どの仕組みが使われているかを素早く見分けるための画面イメージや主な特徴がまとめられています。
もしサイトで DataDome CAPTCHA が使われていることが分かったら、次のステップはその特徴と動作をより詳しく確認することです。同じこの記事の中で、DataDome CAPTCHA をサイトに導入するための手順書も確認できるので、あなたのサイト上でどのように機能しているのかをしっかり理解できます。これにより、現在の保護を正しく把握できるだけでなく、今後の運用や保守も計画的に行えるようになります。
CapMonster Cloud API を使った一般的な手順:
type - CustomTask
class - DataDome
websiteURL - CAPTCHAを解くメインページのURL。
captchaUrl(metadata内) - "captchaUrl" — CAPTCHAのリンク。通常は次の形式: "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 - プロキシの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';
// CapMonster Cloud APIキーを入力
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クッキーを検索(ある場合)
const existingDd = (await context.cookies()).find(c => /datadome|dd_/i.test(c.name));
// DataDome iframeを検索 -> 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クッキー::`, 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クッキーを設定
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(`datadomeクッキー設定済み:`, ddSolved.value);
// クッキー挿入後にサイトを再度開く
const page2 = await context.newPage();
const resp2 = await page2.goto(TARGET_URL, { waitUntil: 'domcontentloaded', timeout: 60000 });
console.log(`クッキー設定後のステータス:: ${resp2?.status()}`);
await browser.close();
}
main();
1. アカウントにログインまたは登録し、クライアントサイドおよびサーバーサイドキーを取得します。
重要: 登録には会社の業務用メールを使用する必要があります。
登録後、管理パネルにアクセスできます。
2. パネルでサイト(ドメイン)を追加します。
システムにドメインを追加し、保護パラメータを選択してください:
3. サーバーサイド統合を導入します。
Protection APIを使用するか、スタックに応じたモジュール(Node.js / Express, Nginx, Cloudflare, Java (Tomcat/Jetty/Vert.x), Goなど)を選択してください。
公式SDK/middlewareをインストールし、サーバーキーを設定します。
Node.jsでのDataDome統合例:
DataDomeはサーバーをボットや疑わしいリクエストから保護し、必要に応じてchallengeを自動表示します。Expressまたは統合HTTPサーバーNode.jsで使用可能です。
インストール
Expressの場合:
npm install @datadome/module-expressNode.js HTTPモジュールの場合:
npm install @datadome/module-httpNode.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, // ms単位のタイムアウト、これを過ぎるとリクエストを通す
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タグをサイトの<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タグデータ送信用 */
frame-src *.captcha-delivery.com; /* チャレンジページ用 */
worker-src blob:; /* Web workers用 */
クライアント側統合の詳細はDataDome CAPTCHA公式ドキュメント参照。
結果確認
DataDome は、検証に成功すると datadome= クッキーを作成します。このクッキーはユーザーによって自動的に送信され、サーバーはリクエストを許可します。クッキーがない場合や無効な場合、DataDome は再びチャレンジを表示します.
すでにキャプチャや別の保護システムが導入されているサイトを引き継いだものの、コードにはアクセスできない場合でも心配はいりません!どの技術が使われているかを特定するのはそれほど難しくありません。動作が正しいか確認するには、隔離されたテスト環境で認識サービスCapMonster Cloudを利用し、トークン処理の仕組みと検証ロジックが正しく機能しているかをチェックできます。
DataDome CAPTCHAの場合も、システムを特定し、その挙動を調べて、保護機能が正しく動いていることを確認すれば十分です。この記事では、DataDome CAPTCHAを見分ける方法と、その導入や再設定に関する手順書の見つけ方を紹介しました。これにより、防御を安心して維持し、その動作をしっかりと管理できます。