在本文中,我们尽量回答了所有关键问题。要开始解决问题,第一步是确定当前使用的是哪种防护系统。为此,您可以查看常见验证码与反机器人防护系统列表,其中提供了可视化示例和关键特征,帮助您快速判断自己正在使用哪一种方案。
如果您发现自己的网站使用的是 Cloudflare Challenge,下一步就是更深入地了解它的特性和具体工作方式。在本文中,您还可以查看 Cloudflare Challenge 的接入说明,以便彻底弄清它在您的网站上是如何运行的。这样一来,您不仅能更好地理解当前的防护机制,还可以更合理地规划后续的维护和支持。
通过 CapMonster Cloud API 工作的一般流程:
type - TurnstileTask
websiteURL - 要解决验证码的页面地址
websiteKey - Turnstile 密钥(可以传递任意字符串)
cloudflareTaskType - cf_clearance
htmlPageBase64 - 当访问启用此防护的网站时,会返回以 Base64 编码的“Just a moment”HTML 页面,并附带 403 状态码。
userAgent - 浏览器 User-Agent。请只传递来自 Windows 系统的 最新 UA。
此任务还需要使用您的代理:
proxyType :
proxyAddress - 代理 IP 地址 IPv4/IPv6。
proxyPort - 代理端口。
proxyLogin - 代理服务器用户名。
proxyPassword - 代理服务器密码。
https://api.capmonster.cloud/createTask{
"clientKey":"API_KEY",
"task": {
"type":"TurnstileTask",
"websiteURL":"https://example.com",
"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/142.0.0.0 Safari/537.36",
"proxyType":"http",
"proxyAddress":"8.8.8.8",
"proxyPort":8080,
"proxyLogin":"proxyLoginHere",
"proxyPassword":"proxyPasswordHere"
}
}
{
"errorId":0,
"taskId":407533072
}https://api.capmonster.cloud/getTaskResult{
"clientKey":"API_KEY",
"taskId": 407533072
}
{
"errorId": 0,
"status": "ready",
"solution": {
"cf_clearance": "1tarGvbY2_ZhQdYxpSBloao.FoOn9VtcJtmb_IQ_hCE-1761217338-1.2.1.1-vyVPoLYIGX0VCJomVuLjF7n0kdM0PXaPjpDsRcohxGr7hb2CE7WfcHpmQZ70goqEjdWxPsDhSVaKNTz9opxWguiNdWEEq_.SceWXIqfP7tnEb69f3bP0mixNqcWy_5P_9INpoAEqr1k7aYU0r45PT4gPr5pwHxedVySyLRdoBXIJasdTE52YOQ3NPdGWTwQ_3h2n_wYqqIvf0kCSAvimRrmsgZxomlyejwqPI6ZHi.w"
}
}
// npm install playwright @zennolab_com/capmonstercloud-client
// npx playwright install chromium
import { chromium } from 'playwright';
import {
CapMonsterCloudClientFactory,
ClientOptions,
TurnstileRequest
} from '@zennolab_com/capmonstercloud-client';
// 设置 — 替换为您的值
const API_KEY = 'YOUR_API_KEY';
const TARGET_URL = 'https://www.example.com';
const SITE_KEY = 'xxxxx'; // 可传任意字符串
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 cmcClient = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);
// 启动浏览器
const browser = await chromium.launch({
headless: false,
proxy: proxy.proxyAddress ? {
server: `${proxy.proxyType}://${proxy.proxyAddress}:${proxy.proxyPort}`,
username: proxy.proxyLogin,
password: proxy.proxyPassword
} : undefined
});
// 创建 context 并设置 User-Agent 与窗口大小(可选)
const context = await browser.newContext({ userAgent: USER_AGENT, viewport: { width: 1280, height: 800 } });
// 创建页面并加载目标 URL
const page = await context.newPage();
const resp = await page.goto(TARGET_URL, { waitUntil: 'domcontentloaded', timeout: 60000 });
console.log('初始请求状态:', resp?.status());
// 获取页面 HTML 并转换为 Base64 供 CapMonster 使用
const htmlBase64 = Buffer.from(await page.content(), 'utf-8').toString('base64');
// 创建 Turnstile 任务以获取 cf_clearance
const solveResult = await cmcClient.Solve(new TurnstileRequest({
websiteURL: TARGET_URL,
websiteKey: SITE_KEY,
cloudflareTaskType: 'cf_clearance',
htmlPageBase64: htmlBase64,
userAgent: USER_AGENT,
proxy: proxy.proxyAddress ? proxy : undefined
}));
const cf_clearance = solveResult?.solution?.cf_clearance;
if (!cf_clearance) {
console.error('无法从 CapMonster 获取 cf_clearance:', solveResult);
await browser.close();
return;
}
console.log('cf_clearance 已获取:', cf_clearance);
// 将 cf_clearance cookie 添加到浏览器 context
await context.addCookies([{
name: 'cf_clearance',
value: cf_clearance,
domain: '.' + new URL(TARGET_URL).hostname,
path: '/',
httpOnly: true,
secure: true
}]);
console.log('cf_clearance cookie 已成功添加到浏览器。');
// 使用 cf_clearance 重新打开页面
const page2 = await context.newPage();
const resp2 = await page2.goto(TARGET_URL, { waitUntil: 'domcontentloaded', timeout: 60000 });
console.log('设置 cf_clearance 后的请求状态:', resp2?.status());
await browser.close();
console.log('脚本已完成。');
}
main().catch(err => {
console.error('发生错误:', err);
process.exit(1);
});
http.request.uri.path contains "/login"如果你接手了一个已经集成了验证码或其他防护系统的网站,但又无法访问其代码,也不用担心!要判断实际使用了哪种技术其实并不难。为了核实其是否正常工作,你可以在隔离的测试环境中使用CapMonster Cloud识别服务,确保令牌处理机制和校验逻辑都运行正常。
对于Cloudflare Challenge,只需识别出所用的系统,观察其行为,并确认防护是否正常工作即可。本文演示了如何识别 Cloudflare Challenge,以及到哪里查找其接入或重新配置的说明文档,从而帮助你自信地维护防护方案并掌控其运行情况。