什么是 Cloudflare 验证码以及如何使用 CapMonster Cloud 轻松解决验证码问题
。
Cloudflare验证码在确保各种网站安全方面发挥着重要作用。虽然它对普通用户来说并不麻烦,但在使用脚本时可能会很困难,而这正是它的目的所在。在本文中,我们将探讨解决 Cloudflare 验证码的有效策略,重点介绍 CapMonster 云的功能 - 自动解决各类验证码的领先服务之一。
Cloudflare验证码是一种防止自动请求的保护系统,可以防止网站资源被滥用。对于大多数真正的访问者来说,这种验证码不会造成任何不便,因为它不要求执行某些任务 - 验证通常在后台进行(否则,您最多需要做的就是点击带有 "确认您是人类 "字样的窗口)
当您成功通过 Cloudflare 验证码时:

如果系统检测到自动请求的迹象,则可能会出现此消息:

Cloudflare 提供两种验证码:转门和挑战。
Cloudflare转门位于网站本身(例如,可在注册表单下方看到该窗口小部件),Cloudflare Challenge 首先会弹出一个单独的 "稍等 "页面,进行 5 秒钟的检查,如果成功通过,则会打开网站本身。
普通 CF 十字转门的示例:

调用 CF 挑战赛页面:

Developer Tools,查看 网络 选项卡并查看特征标志:
对网站的首次请求返回 403 代码:

id 为 challenge-form 的表单具有一个包含__cf_chl_f_tk=参数的 action 属性(不要误认为是转门验证码参数中的 action):

- 页面上有两个类似的<script>标记,可在 window object:

解析要求数据检索的效率和连续性,但有时这一过程会因一些障碍而变得复杂,例如 Cloudflare 验证码 。这种检查会导致延误和中断。因此,有必要找到克服这些问题的方法,并调整其解析方法以解决 Cloudflare 验证码问题,同时保持所需的数据准确性和可靠性水平。2;margin-bottom:0pt;margin-top:0pt;" dir="ltr">数据解析的开发人员和从业人员正在探索各种方法,其中值得一提的是实现自动验证码求解的有效工具--CapMonster Cloud。该云服务有助于解决网站上的拦截问题,从而节省了用户的时间并简化了自动化任务。
CapMonster Cloud 提供了一个 API,用于解决各种网站上的验证码问题。要使用它,您需要注册,获得 API 密钥,并在您的代码或程序中使用它。虽然 Cloudflare 验证码是一个相当严重的障碍,但如果您正确编写要发送到服务器的任务并接收结果,那么解决它并不困难。2;margin-bottom:0pt;margin-top:0pt;" dir="ltr">以下说明将帮助您避免在使用服务和解决 Cloudflare 验证码时可能出现的错误。
要解决验证码问题,您需要在请求中向 Capmonster.云服务器。对于 CF 伸缩门,此类参数是 websiteKey - 验证码密钥,其格式大致如下: 0x4AAAAAAABUYP0XeMJJF0xoy 。您可以在页面代码中找到它,例如在 "网络 "选项卡中:

要解决 Cloudflare 挑战,您需要在此基础上传递其他参数(如果您通过浏览器工作,则需要获取验证码令牌):
- pageAction
- data
- pageData
- userAgent
所有这些参数都不需要手动搜索,可以在页面加载之前使用 Javascript 代码捕获:
window.turnstile=新代理服务器(window.turnstile, {
get(target, prop) {
if (prop === 'render') {
return function(a, b) {
let p = {
type:"无钥匙转门任务"、
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];
}
});
接收到的数据将用于创建任务并发送到 Capmonster.云服务器(将介绍解决此类验证码的完整脚本示例 下面).
如果您处理请求并需要 cf_clearance cookie,您还需要指定代理参数和 htmlPageBase64 - base64 编码的 html 页面 "稍等片刻",在访问具有此保护的网站时,该页面的代码为 403。
Sample code to get the htmlPageBase64 string: var htmlContent = document.documentElement.outerHTML; var htmlBase64 = btoa(unescape(encodeURIComponent(htmlContent))); console.log(htmlBase64); |
。
Turnstile:
请求示例:
https://api.capmonster.cloud/createTask
{
"clientKey":"dce6bcbb1a728ea8d871de6d169a2057",
"任务":
{
"type": "TurnstileTaskProxyless"、
"websiteURL": "http://tsmanaged.zlsupport.com"、
"websiteKey":"0x4AAAAABUYP0XeMJF0xoy"
}
}
示例响应:
{ "errorId":0、 "taskId":407533072 }
挑战(获取令牌):
请求示例:
代码https://api.capmonster.cloud/createTask { "clientKey":"dce6bcbb1a728ea8d871de6d169a2057", "任务":{ "类型":"TurnstileTask"、 "websiteURL":"https://site.com"、 "websiteKey":"0x4AAAAADnPIDROrmt1Wwj"、 "cloudflareTaskType":"标记"、 "userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"、 "pageAction":"managed"、 "pageData":"HUHDWUHuhuwfiweh32..uh2uhuhyugYUG="、 "data":"874291f4retD1366"。 } } 代码>
挑战(处理需要 cf_clearance cookie 时的请求):
Example request:
https://api.capmonster.cloud/createTask { "clientKey":"dce6bcbb1a728ea8d871de6d169a2057", "任务":{ "type": "TurnstileTask"、 "websiteURL": "https://nowsecure.nl"、 "websiteKey": "xxxxxxxxxx"、 "cloudflareTaskType":"cf_clearance"、 "htmlPageBase64":"PCFET0NUWVBFIGh0...vYm9keT48L2h0bWw+"、 "userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0 Safari/537.36"、 "proxyType": "http"、 "proxyAddress":"8.8.8.8", "代理端口":8080、 "代理登录": "proxyLoginHere"、 "代理密码": "proxyPasswordHere"(代理密码在此处)。 } }
Getting the result:
Use the getTaskResult 方法来获取验证码解决方案。
。// 首先,导入所有必要的附加组件: const { Builder } = require('selenium-webdriver'); const chrome = require('selenium-webdriver/chrome'); (async function example() { // 使用 Selenium WebDriver 创建 Chrome 浏览器驱动程序实例 const options = new chrome.Options(); options.addArguments('--auto-open-devtools-for-tabs'); const driver = await new Builder() .forBrowser('chrome') .setChromeOptions(options) .build(); try { // 导航至需要解决 Cloudflare 挑战的页面 await driver.get('https://your_site_with_captcha.com'); // 执行 JavaScript 以配置代理对象 window.turnstile await driver.executeScript(`) window.turnstile = new Proxy(window.turnstile, { get(target, prop) { if (prop === 'render') { return function(a, b) { // 获取 TurnstileTaskProxyless 任务的参数 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); } } 返回 target[prop]; } }); `); // 执行 JavaScript,预计 5 秒后终止 const params = await driver.executeAsyncScript(`) const callback = arguments[arguments.length - 1]; setTimeout(() => { callback(window.params); }, 5000); `); // 将获得的参数导出到控制台 console.log('Params:', params); if (params) { // 生成用于在 CapMonster 服务中创建任务的数据 const data = { clientKey: 'your_API'、 task: { type: 'TurnstileTaskProxyless'、 websiteURL: params.websiteURL、 websiteKey: params.websiteKey、 data:params.data、 action: params.action、 cloudflareTaskType:"token"、 pageAction:"managed"、 pageData: params.pagedata } }; // 将创建任务的数据导出到控制台 console.log('Data:', data); // 发送请求在 CapMonster.cloud 中创建任务 const createResult = await fetch('https://api.capmonster.cloud/createTask', { method: 'post'、 body:JSON.stringify(data) }); // 获取任务创建结果 const createTaskResult = await createResult.json(); console.log('Create Task Result:', createTaskResult); if (createTaskResult.taskId) { const asyncDelay = (timeout) =>; new 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"、 "taskId": taskId }) }); const taskResponse = await taskResult.json(); console.log('Task Response:', taskResponse); if (taskResponse.status === 'processing') { await asyncDelay(5000); return await getTaskResult(taskId); } return taskResponse; }; // 从 CapMonster.cloud 服务获取任务执行结果 const taskRes = await getTaskResult(createTaskResult.taskId); console.log('Task Result:', taskRes); if (taskRes.solution) { // 在控制台中导出解决方案标记 console.log('Solution Token:', taskRes.solution.token); // 创建一个回调函数来传递解决方案令牌 await driver.executeScript(` window.turnstileCallback('${taskRes.solution.token}'); `); } } } } finally { await driver.quit(); } })(); 代码>
有时由于某些原因无法立即捕获参数,在这种情况下,您可以尝试添加重新加载验证码页面,直到参数被检索到:
。const { Builder } = require('selenium-webdriver'); const chrome = require('selenium-webdriver/chrome'); (async function example() { const options = new chrome.Options(); options.addArguments('--auto-open-devtools-for-tabs'); const driver = await new Builder() .forBrowser('chrome') .setChromeOptions(options) .build(); 让 params = null; try { while (!params) { await driver.get('https://your_site_with_captcha.com/'); await driver.executeScript(`) window.turnstile = new Proxy(window.turnstile, { get(target, prop) { if (prop === 'render') { return function(a, b) { 让 p = { 类型"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); } } 返回 target[prop]; } }); `); params = await driver.executeAsyncScript(`) const callback = arguments[arguments.length - 1]; setTimeout(() => { callback(window.params); }, 5000); `); 如果 (!params) { console.log('Params not obtained, reloading page...'); await driver.sleep(3000); } } console.log('Params:', params); const data = { clientKey: 'your_API_key'、 任务:{ type: 'TurnstileTaskProxyless'、 websiteURL: params.websiteURL、 websiteKey: params.websiteKey、 data:params.data、 action: params.action、 cloudflareTaskType:"token"、 pageAction:"managed"、 pageData: params.pagedata } }; console.log('Data:', data); const createResult = await fetch('https://api.capmonster.cloud/createTask', { method: 'post'、 body:JSON.stringify(data) }); const createTaskResult = await createResult.json(); console.log('Create Task Result:', createTaskResult); if (createTaskResult.taskId) { const asyncDelay = (timeout) =>; new 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('Task Response:', taskResponse); if (taskResponse.status === 'processing') { await asyncDelay(5000); return await getTaskResult(taskId); } return taskResponse; }; const taskRes = await getTaskResult(createTaskResult.taskId); console.log('Task Result:', taskRes); if (taskRes.solution) { console.log('Solution Token:', taskRes.solution.token); await driver.executeScript(` window.turnstileCallback('${taskRes.solution.token}'); `); } } } finally { await driver.quit(); } })(); 代码>
由 Cloudflare 开发的验证码是一项复杂而强大的技术,可保护网站免受各种类型的恶意活动,包括垃圾邮件、DDoS 攻击和其他形式的自动攻击。但是,对于某些任务,可能有必要解决这一保护问题,例如在自动化流程或与其他应用程序集成时。
CapMonster Cloud 服务为此类情况提供了解决方案,让您可以轻松解决验证码问题。为此,您需要熟悉 生成验证码请求,将其发送到服务服务器并接收结果 。
Note:我们在此提醒您,该产品用于在您自己的网站和您拥有合法访问权限的网站上自动进行测试。