Um script alternativo para resolver o Cloudflare Challenge
Às vezes, a captura dos parâmetros por alguns motivos não pode ser feita imediatamente; nesse caso, você pode tentar adicionar o recarregamento da página de captcha até que os parâmetros sejam recuperados:
const { Builder } = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');
(função assíncrona example() {
const options = new chrome.Options();
options.addArguments('--auto-open-devtools-for-tabs');
const driver = await new Builder()
.forBrowser('chrome')
.setChromeOptions(options)
.build();
let params = null;
try {
while (!params) {
await driver.get('https://your_site_with_captcha.com/');
aguarde driver.executeScript(`
window.turnstile = new Proxy(window.turnstile, {
get(target, prop) {
se (prop === 'render') {
return function(a, b) {
let p = {
type: "TurnstileTaskProxyless",
websiteKey: b.sitekey,
websiteURL: window.location.href,
data: b.cData,
pagedata: b.chlPageData,
action: b.action,
userAgent: navigator.userAgent
};
console.log(JSON.stringify(p));
window.params = p;
window.turnstileCallback = b.callback;
return target.render.apply(this, arguments);
}
}
return target[prop];
}
});
`);
params = await driver.executeAsyncScript(`
const callback = arguments[arguments.length - 1];
setTimeout(() => {
callback(window.params);
}, 5000);
`);
se (!params) {
console.log('Parâmetros não obtidos, recarregando a página...');
await driver.sleep(3000);
}
}
console.log('Params:', params);
const data = {
clientKey: 'your_API_key',
task: {
type: 'TurnstileTaskProxyless',
websiteURL: params.websiteURL,
websiteKey: params.websiteKey,
data: params.data,
action: params.action,
cloudflareTaskType: "token",
pageAction: "managed",
pageData: params.pagedata
}
};
console.log('Dados:', dados);
const createResult = await fetch('https://api.capmonster.cloud/createTask', {
method: 'post',
body: JSON.stringify(data)
});
const createTaskResult = await createResult.json();
console.log('Resultado da tarefa de criação:', createTaskResult);
if (createTaskResult.taskId) {
const asyncDelay = (timeout) =>
nova Promise(resolve => {
setTimeout(() => {
resolve();
}, timeout);
});
const getTaskResult = async (taskId) => {
const taskResult = await fetch('https://api.capmonster.cloud/getTaskResult', {
method: 'post',
body: JSON.stringify({
"clientKey": "your_API_key",
"taskId": taskId
})
});
const taskResponse = await taskResult.json();
console.log('Resposta da tarefa:', taskResponse);
se (taskResponse.status === 'processing') {
aguarde asyncDelay(5000);
return await getTaskResult(taskId);
}
return taskResponse;
};
const taskRes = await getTaskResult(createTaskResult.taskId);
console.log('Resultado da tarefa:', taskRes);
if (taskRes.solution) {
console.log('Token da solução:', taskRes.solution.token);
aguarde driver.executeScript(`
window.turnstileCallback('${taskRes.solution.token}');
`);
}
}
} finally {
await driver.quit();
}
})();