CDP API
Scrapeless Scraping Browser扩展了标准CDP (Chrome DevTools Protocol)功能,包含一系列强大的自定义函数来增强浏览器自动化能力。本文档主要介绍与CAPTCHA处理相关的CDP函数。
Captcha求解器功能
功能概述
Scraping Browser包含高级CAPTCHA解决方案功能,可以自动处理网页上出现的主流CAPTCHA类型。
支持的CAPTCHA类型
- reCaptcha
- Cloudflare Turnstile
事件监控机制
核心事件
Scraping Browser提供三个核心事件来监控CAPTCHA求解过程:
事件名称 | 描述 |
---|---|
Captcha.detected | 检测到CAPTCHA |
Captcha.solveFinished | CAPTCHA求解完成 |
Captcha.solveFailed | CAPTCHA求解失败 |
事件响应数据结构
字段 | 类型 | 描述 |
---|---|---|
type | string | CAPTCHA类型: recaptcha turnstile |
success | boolean | 求解结果 |
message | string | 状态消息: "NOT_DETECTED" "SOLVE_FINISHED" "SOLVE_FAILED" "INVALID" |
token? | string | 成功时返回的Token(可选) |
实现示例
// 监听CAPTCHA求解事件
const client = await page.createCDPSession();
client.on('Captcha.detected', (result) => {
console.log('Captcha detected:', result);
});
await new Promise((resolve, reject) => {
client.on('Captcha.solveFinished', (result) => {
if (result.success) resolve();
});
client.on('Captcha.solveFailed', () =>
reject(new Error('Captcha solve failed'))
);
setTimeout(() =>
reject(new Error('Captcha solve timeout')),
5 * 60 * 1000
);
});
高级配置API
Scraping Browser提供一系列高级API,用于对CAPTCHA求解器的行为进行细粒度控制。以下是支持的API:
API名称 | 描述 |
---|---|
Captcha.setAutoSolve | 控制自动CAPTCHA求解行为 |
Captcha.setToken | 设置CAPTCHA服务的认证Token |
Captcha.setConfig | 配置所有CAPTCHA求解器参数 |
Captcha.solve | 手动触发CAPTCHA求解过程 |
详细API描述
1. Captcha.setAutoSolve
配置接口,用于控制自动CAPTCHA求解行为。
const client = await page.createCDPSession();
await client.send('Captcha.setAutoSolve', {
autoSolve: false,
options: [{
type: 'recaptcha', // Options: recaptcha | turnstile
disabled: false,
}]
});
2. Captcha.setToken
设置CAPTCHA求解服务的认证Token。
await client.send('Captcha.setToken', {
apiKey: 'your-token'
});
3. Captcha.setConfig
配置CAPTCHA求解器的所有参数。
await client.send('Captcha.setConfig', {
apiKey: 'your-token',
autoSolve: true,
enabledForRecaptcha: true, // 启用reCAPTCHA求解
enabledForRecaptchaV3: true, // 启用reCAPTCHA v3求解
enabledForTurnstile: true // 启用Turnstile求解
});
4. Captcha.solve
手动触发CAPTCHA求解过程。
const result = await client.send('Captcha.solve', {
detectTimeout: 10 * 1000,
options: JSON.stringify([{
type: 'rcaptcha',
disabled: true, // 禁用rCaptcha求解
}])
});
console.log(result); // { type: 'recaptcha', success: true, message: 'solve_finished', token: 'xxx' }