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.solveFinishedCAPTCHA求解完成
Captcha.solveFailedCAPTCHA求解失败

事件响应数据结构

字段类型描述
typestringCAPTCHA类型: recaptcha turnstile
successboolean求解结果
messagestring状态消息: "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' }