DataDome
这种类型的验证码通常要求用户通过移动滑块来完成拼图以进行验证。

-
执行此任务时,请使用 您自己的代理。
-
如果代理按 IP 授权,请将地址 65.21.190.34 加入白名单。
-
完成验证后,您将获得 特殊的Cookie,需要添加到浏览器中。
请求参数
type<string>requiredCustomTask
class<string>requiredDataDome
websiteURL<string>required验证码所在的主页面URL。
captchaUrl(在metadata中)<string>required"captchaUrl" - 验证码链接。通常格式为: "https://geo.captcha-delivery.com/captcha/?initialCid=..."。
datadomeCookie(在metadata中)<string>required您的DataDome Cookie。可以通过页面的 document.cookie 获取(如果Cookie没有 HttpOnly 标志),通过请求头 Set-Cookie: "datadome=...",或直接从HTML代码中的 initialCid 获取 (查看如何找到datadomeCookie示例)。
proxyType<string>requiredhttp - 常规http/https代理;
https - 仅在http不工作时使用(某些自定义代理需要);
socks4 - socks4代理;
socks5 - socks5代理。
proxyAddress<string>required代理IPv4/IPv6地址。禁止使用:
- 透明代理(客户端IP可见);
- 本地机器代理。
proxyPort<integer>required代理端口。
proxyLogin<string>required代理服务器登录名。
proxyPassword<string>required代理服务器密码。
userAgent<string>optional浏览器的 User-Agent。
请仅传递当前 Windows 系统下的有效 UA。当前推荐值为:userAgentPlaceholder
任务创建方法
在页面加载过程中,DataDome可能会使用两种脚本之一:c.js 或 i.js。
如果目标网站使用 c.js,提取的Cookie可能无法用于验证。在执行解决方案之前,请检查加载了哪个脚本 (DevTools → Network / HTML)。
使用 c.js 的情况:

使用 i.js 的情况:

https://api.capmonster.cloud/createTask
请求
{
"clientKey": "API_KEY",
"task": {
"type": "CustomTask",
"class": "DataDome",
"websiteURL": "https://example.com",
"userAgent": "userAgentPlaceholder",
"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
}
获取任务结果的方法
使用 getTaskResult 方法来获取DataDome验证码的解决方案。
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
}
}
如何找到 datadomeCookie
使用开发者工具
方法1:
-
在浏览器中打开受DataDome保护的网站(Chrome、Firefox)。
-
按 F12 → 打开 Application 标签 → Cookies。
-
找到网站域名(例如:www.example.com)。
在Cookie中查找键 datadome —— 这就是所需的 datadomeCookie 参数。

方法2:
-
打开触发DataDome验证码的网站。
-
进入 DevTools → Network,刷新页面,找到加载带有
initialCid参数的请求。
示例URL:
https://geo.captcha-delivery.com/interstitial/?initialCid=...&hash=...&cid=...

或:
- 打开该请求的 Response,在HTML代码中找到对象:
var ddm = { ... };
- 在该对象中找到参数
cid,其值即为当前datadomeCookie。

方法3:
-
打开触发DataDome验证码的网站。
-
进入 DevTools → Network,刷新页面,找到状态为 403 的请求。
-
切换到 Headers → Response Headers,在头部找到
Set-Cookie:并复制datadome参数的值(格式datadome=<value>)。

使用 SDK 库
- JavaScript
- Python
显示代码(用于浏览器)
// https://github.com/ZennoLab/capmonstercloud-client-js
import { CapMonsterCloudClientFactory, ClientOptions, DataDomeRequest } from '@zennolab_com/capmonstercloud-client';
const API_KEY = "YOUR_API_KEY"; // 输入您的 CapMonster Cloud API 密钥
document.addEventListener("DOMContentLoaded", async () => {
const client = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);
// 如有必要,可以检查余额
const balance = await client.getBalance();
console.log("Balance:", balance);
// DataDome 只能使用您的代理解决
const proxy = {
proxyType: "http",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "username",
proxyPassword: "password"
};
const datadomeRequest = new DataDomeRequest({
_class: 'DataDome',
websiteURL: "https://example.com/", // 验证码页面的 URL
userAgent: "userAgentPlaceholder",
proxy,
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"
}
});
const result = await client.Solve(datadomeRequest);
console.log("Solution:", result);
});
显示代码 (Node.js)
// https://github.com/ZennoLab/capmonstercloud-client-js
import { CapMonsterCloudClientFactory, ClientOptions, DataDomeRequest } from '@zennolab_com/capmonstercloud-client';
const API_KEY = "YOUR_API_KEY"; // 输入您的 CapMonster Cloud API 密钥
async function solveDataDome() {
const client = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);
// 如有必要,可以检查余额
const balance = await client.getBalance();
console.log("Balance:", balance);
// DataDome 只能使用您的代理解决
const proxy = {
proxyType: "http",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "username",
proxyPassword: "password"
};
const datadomeRequest = new DataDomeRequest({
_class: 'DataDome',
websiteURL: "https://example.com/", // 验证码页面的 URL
userAgent: "userAgentPlaceholder",
proxy,
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"
}
});
const result = await client.Solve(datadomeRequest);
console.log("Solution:", result);
}
solveDataDome().catch(console.error);
显示代码
# https://github.com/ZennoLab/capmonstercloud-client-python
import asyncio
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import DataDomeCustomTaskRequest
from capmonstercloudclient.requests.baseRequestWithProxy import ProxyInfo
API_KEY = "YOUR_API_KEY" # 输入您的 CapMonster Cloud API 密钥
async def solve_datadome_captcha():
client_options = ClientOptions(api_key=API_KEY)
cap_monster_client = CapMonsterClient(options=client_options)
# DataDome 只能使用您的代理解决
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="userAgentPlaceholder"
)
# 如有必要,可以检查余额
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())
