Pular para o conteúdo principal
Está tendo problemas para obter o token?
Entre em contato com o suporte

DataDome

Este tipo de captcha geralmente exige que o usuário resolva um quebra-cabeça movendo um slider para verificação.

Atenção!
  • Para executar esta tarefa, utilize os seus próprios proxies.

  • Se o proxy usar autenticação por IP, é necessário adicionar o endereço 65.21.190.34 à lista de permissões (whitelist).

  • Após a resolução, você receberá cookies especiais, que devem ser adicionados ao navegador.

Parâmetros da solicitação


IMPORTANTE: alguns valores de parâmetros são dinâmicos — eles mudam a cada renderização da página que contém DataDome.
Extraia-os imediatamente antes de criar a tarefa para evitar erros durante a resolução.
Veja exemplos de extração de parâmetros nas seções Como encontrar datadomeCookie e Exemplos de solução automática do DataDome.


Importante

Antes de criar a tarefa, verifique o valor do parâmetro t no objeto DataDome ou no captchaUrl gerado:

  • t=fe – você pode prosseguir com a criação da tarefa;

  • t=bv – o endereço IP ou o proxy foi bloqueado pelo DataDome.

Se o valor for t=bv, altere o proxy e obtenha os parâmetros atualizados novamente. Para exemplos detalhados de código, consulte a seção Exemplos de resolução automática do DataDome.

type<string>required

CustomTask


class<string>required

DataDome


websiteURL<string>required

URL da página principal onde o captcha será resolvido.


captchaUrl (dentro de metadata)<string>required

URL da CAPTCHA com os parâmetros dinâmicos atualizados. Geralmente, apresenta o seguinte formato:

https://geo.captcha-delivery.com/captcha/?initialCid=...&hash=...&cid=...&t=fe&referer=...&s=...

Envie o URL somente após verificar o parâmetro t.


datadomeCookie (dentro de metadata)<string>required

Seus cookies do DataDome. Podem ser obtidos na página usando document.cookie (se os cookies não tiverem a flag HttpOnly), no cabeçalho da requisição Set-Cookie: "datadome=...", ou diretamente do código HTML initialCid (veja exemplos de como encontrar datadomeCookie).


datadomeVersion (dentro de metadata)<string>optional

Versão do método de resolução do DataDome. Quando definido como "new", é utilizado o método de resolução atualizado, com suporte para os scripts i.js e c.js (veja mais detalhes abaixo). Se o parâmetro não for especificado, será utilizado o método antigo, que oferece suporte apenas ao i.js.


proxyType<string>required

http - proxy http/https padrão;
https - use apenas se "http" não funcionar (necessário para alguns proxies customizados);
socks4 - proxy socks4;
socks5 - proxy socks5.


proxyAddress<string>required

Endereço IPv4/IPv6 do proxy. Não permitido:

  • proxies transparentes (onde o IP do cliente é visível);
  • proxies em máquinas locais.


proxyPort<integer>required

Porta do proxy.


proxyLogin<string>required

Login do servidor proxy.


proxyPassword<string>required

Senha do servidor proxy.


userAgent<string>optional

User-Agent do navegador. Use o valor atual compatível com o CapMonster Cloud: userAgentPlaceholder

Você pode obter o valor mais recente em: https://capmonster.cloud/api/useragent/actual.


Método para criar tarefa

Importante

Durante o carregamento da página, o DataDome pode usar um de dois scripts: c.js ou i.js. Antes de resolver, verifique qual script está carregado (DevTools → Network / HTML).

Opção com c.js:

Opção com i.js:

POST
https://api.capmonster.cloud/createTask

Exemplo de requisição

{
"clientKey": "API_KEY",
"task": {
"type": "CustomTask",
"class": "DataDome",
"websiteURL": "https://yourwebsite.com/page-with-datadome",
"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=cookie-value",
"datadomeVersion": "new"
},
"proxyType": "your-proxy-type",
"proxyAddress": "your-proxy-address",
"proxyPort": 1234,
"proxyLogin": "your-proxy-login",
"proxyPassword": "your-proxy-password"
}
}

Exemplo de resposta

{
"errorId":0,
"taskId":407533072
}

Método para obter o resultado da tarefa

Use o método getTaskResult para obter a solução do captcha DataDome.

POST
https://api.capmonster.cloud/getTaskResult

Exemplo de requisição

{
"clientKey":"API_KEY",
"taskId": 407533072
}

Exemplo de resposta

{
"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
}
}

Como encontrar datadomeCookie

Usando DevTools

Opção 1:

  1. Abra o site protegido pelo DataDome no navegador (Chrome, Firefox).

  2. Pressione F12 → vá para a aba ApplicationCookies.

  3. Encontre o domínio do site (ex.: www.example.com).

Entre os cookies, procure a chave datadome — este é o parâmetro datadomeCookie necessário.

Opção 2:

  1. Abra o site onde o captcha DataDome é ativado.

  2. Vá para DevTools → Network, recarregue a página e encontre a requisição que carrega a página com initialCid.

Exemplo de URL:

https://geo.captcha-delivery.com/interstitial/?initialCid=...&hash=...&cid=...

ou:

  1. Abra a Response dessa requisição. No código HTML, encontre o objeto:

var ddm = { ... };

  1. Dentro deste objeto, localize o parâmetro cid. Seu valor é o datadomeCookie atual.

Opção 3:

  1. Abra o site onde o captcha DataDome é ativado.

  2. Vá para DevTools → Network, recarregue a página e encontre uma requisição com status 403.

  3. Vá para a aba Headers → Response Headers. Nos cabeçalhos, encontre Set-Cookie: e copie o valor do parâmetro datadome (datadome=<valor>).

Exemplos de solução automática do DataDome

Atenção!

Os exemplos abaixo são fornecidos apenas para fins informativos e para demonstrar a lógica geral.

Como os sites diferem em seus mecanismos de proteção, estrutura de requisições e parâmetros, as soluções podem exigir adaptação adicional e testes para um recurso específico.

Mostrar código (Node.js + Playwright)
// npm install cheerio playwright @zennolab_com/capmonstercloud-client
// npx playwright install chromium

const cheerio = require("cheerio");
const { chromium } = require("playwright");

const {
CapMonsterCloudClientFactory,
ClientOptions,
DataDomeRequest,
} = require("@zennolab_com/capmonstercloud-client");

const API_KEY = "YOUR_API_KEY"; // Insira sua chave da API do CapMonster Cloud

const PAGE_URL = "https://example.com/"; // Insira a URL da página protegida pelo DataDome

const USER_AGENT = "userAgentPlaceholder";

const BASE_HEADERS = {
accept:
"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8",
"accept-language": "en-US,en;q=0.9",
"cache-control": "no-cache",
pragma: "no-cache",
"sec-ch-ua":
'"Chromium";v="150", "Google Chrome";v="150", ";Not A Brand";v="99"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Windows"',
"sec-fetch-dest": "document",
"sec-fetch-mode": "navigate",
"sec-fetch-site": "none",
"sec-fetch-user": "?1",
"upgrade-insecure-requests": "1",
};

const PROXY = {
proxyType: "http",
proxyAddress: "127.0.0.1",
proxyPort: 8080,
proxyLogin: "proxy_login",
proxyPassword: "proxy_password",
};

/**
* Extrai os parâmetros do DataDome do HTML da página
*
* @param {string} html
*/
function extractDD(html) {
const $ = cheerio.load(html);

for (const script of $("script").toArray()) {
const text = $(script).html();

if (text && text.includes("var dd=")) {
try {
const raw = text.split("var dd=")[1].split(";")[0].replace(/'/g, '"');

return JSON.parse(raw);
} catch {
return null;
}
}
}

return null;
}

/**
* Gera a URL do CAPTCHA do DataDome usando os parâmetros
* extraídos da página
*
* @param {any} dd
*/
function buildCaptchaUrl(dd) {
const params = new URLSearchParams({
initialCid: dd.cid,
hash: dd.hsh,
cid: dd.cookie,
t: dd.t,
referer: PAGE_URL,
s: dd.s,
dm: "cd",
});

if (dd.e) {
params.append("e", dd.e);
}

return `https://${dd.host}/captcha/?${params.toString()}`;
}

(async () => {
// Configura o proxy para o navegador
// O navegador e a tarefa do CapMonster Cloud devem usar o mesmo proxy
const proxyConfig = {
server: `http://${PROXY.proxyAddress}:${PROXY.proxyPort}`,
username: PROXY.proxyLogin,
password: PROXY.proxyPassword,
};

// Inicia o Chromium com o proxy especificado
const browser = await chromium.launch({
headless: false,
proxy: proxyConfig,
});

// Cria um contexto do navegador com o User-Agent e os cabeçalhos HTTP definidos
const context = await browser.newContext({
userAgent: USER_AGENT,
extraHTTPHeaders: BASE_HEADERS,
});

const page = await context.newPage();

// Abre a página protegida
await page.goto(PAGE_URL, {
waitUntil: "domcontentloaded",
});

// Obtém o HTML da página e extrai os parâmetros do DataDome
const html = await page.content();

const dd = extractDD(html);

if (!dd) {
throw new Error("Parâmetros do DataDome não encontrados.");
}

// Verifica se o proxy foi bloqueado pelo DataDome
if (dd.t === "bv") {
throw new Error("Proxy bloqueado pelo DataDome.");
}

// Gera a URL completa do CAPTCHA para enviar na tarefa
const captchaUrl = buildCaptchaUrl(dd);

// Cria o cliente do CapMonster Cloud
const client = CapMonsterCloudClientFactory.Create(
new ClientOptions({
clientKey: API_KEY,
}),
);

// Verifica o saldo atual da conta
const balance = await client.getBalance();

console.log("Saldo:", balance);

// Cria a tarefa do DataDome para o CapMonster Cloud
const request = new DataDomeRequest({
_class: "DataDome",
websiteURL: PAGE_URL,
userAgent: USER_AGENT,
proxy: PROXY,
metadata: {
captchaUrl,
datadomeCookie: `datadome=${dd.cookie}`,
datadomeVersion: "new",
},
});

console.log("Enviando a tarefa do DataDome para resolução...");

// Envia a tarefa para o CapMonster Cloud e aguarda o resultado
const result = await client.Solve(request);

console.dir(result, { depth: null });

// =====================================
// EXTRAÇÃO DOS COOKIES DA RESPOSTA
// DO CAPMONSTER CLOUD
// =====================================

const domains = result?.solution?.domains ?? {};

const allCookies = [];

// Converte os cookies da resposta do CapMonster Cloud
// para o formato aceito pelo Playwright
for (const [domain, data] of Object.entries(domains)) {
const cookies = data?.cookies ?? {};

for (const [name, value] of Object.entries(cookies)) {
allCookies.push({
name,
value,
domain: ".example.com", // Substitua pelo domínio necessário
path: "/",
secure: true,
sameSite: "Lax",
});
}
}

if (!allCookies.length) {
throw new Error("O CapMonster Cloud não retornou cookies.");
}

// ===============================
// APLICA OS COOKIES NO PLAYWRIGHT
// ===============================

// Obtém os cookies do contexto atual do navegador
const existingCookies = await context.cookies();

// Remove os cookies antigos do DataDome
// para evitar conflitos com a nova solução
const filtered = existingCookies.filter((c) => {
const name = c.name.toLowerCase();

return !name.includes("datadome");
});

await context.clearCookies();

// Restaura os demais cookies da sessão atual
if (filtered.length) {
await context.addCookies(filtered);
}

console.log("Cookies antigos do DataDome removidos.");

// Adiciona os cookies recebidos do CapMonster Cloud
await context.addCookies(allCookies);

console.log("Cookies do CapMonster Cloud aplicados:", allCookies);

// ===============================
// RECARREGA A PÁGINA
// COM OS NOVOS COOKIES
// ===============================

// Envia os cookies recebidos junto com os cabeçalhos HTTP originais
await context.setExtraHTTPHeaders({
...BASE_HEADERS,
cookie: allCookies.map((c) => `${c.name}=${c.value}`).join("; "),
});

// Recarrega a página com os cookies resolvidos do DataDome
await page.reload({
waitUntil: "domcontentloaded",
});

console.log("Página recarregada com os cookies do DataDome.");

await page.waitForTimeout(10000);

await browser.close();
})().catch(console.error);

Usar biblioteca SDK

Mostrar Código (para navegador)
// https://github.com/ZennoLab/capmonstercloud-client-js

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

const API_KEY = "YOUR_API_KEY"; // Insira sua chave de API do CapMonster Cloud

document.addEventListener("DOMContentLoaded", async () => {
const client = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);

// Se necessário, você pode verificar o saldo
const balance = await client.getBalance();
console.log("Balance:", balance);

// DataDome é resolvido apenas com seus proxies
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 da página com a captcha
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=cookie-value"
}
});

const result = await client.Solve(datadomeRequest);
console.log("Solution:", result);
});
Mostrar Código (Node.js)
// https://github.com/ZennoLab/capmonstercloud-client-js

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

const API_KEY = "YOUR_API_KEY"; // Insira sua chave de API do CapMonster Cloud

async function solveDataDome() {
const client = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);

// Se necessário, você pode verificar o saldo
const balance = await client.getBalance();
console.log("Balance:", balance);

// DataDome é resolvido apenas com seus proxies
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 da página com a captcha
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=cookie-value"
}
});

const result = await client.Solve(datadomeRequest);
console.log("Solution:", result);
}

solveDataDome().catch(console.error);