CDP API

Scrapeless 爬虫浏览器扩展了标准的 CDP (Chrome DevTools Protocol) 功能,添加了一系列强大的自定义函数来增强浏览器自动化能力。本文档主要介绍与 CAPTCHA 处理相关的 CDP 函数。

CAPTCHA 求解器功能

功能概述

爬虫浏览器包含高级 CAPTCHA 求解能力,自动处理网页上常见的 CAPTCHA 类型。

支持的 CAPTCHA 类型

  • reCaptcha
  • Cloudflare Turnstile
  • Cloudflare 5s Challenge
  • AWS WAF

事件监控机制

核心事件

爬虫浏览器提供三个核心事件来监控 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

Scrapeless 爬虫浏览器提供一系列高级 API,用于对 CAPTCHA 求解器的行为进行细粒度控制。支持以下 API:

API 名称描述
Captcha.setAutoSolve控制自动 CAPTCHA 求解行为
Captcha.setToken设置 CAPTCHA 服务的认证 Token
Captcha.setConfig配置所有 CAPTCHA 求解器参数
Captcha.solve手动触发 CAPTCHA 求解过程
Agent.click模拟鼠标点击
Agent.liveURL获取当前会话页面的实时 URL

详细 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', {
    config: JSON.stringify(
        {
            apiKey: "your-token",
            autoSolve: true,
            enabledForRecaptcha: true,
            enabledForRecaptchaV3: true,
            enabledForTurnstile: true
        }
    )
});

4. Captcha.solve

手动触发 CAPTCHA 求解过程。

const result = await client.send('Captcha.solve', {
    detectTimeout: 10 * 1000,
    options: JSON.stringify([{
        type: 'rcaptcha',
        disabled: true,  // Disable rCaptcha solving
    }])
});
console.log(result);  // { type: 'recaptcha', success: true, message: 'solve_finished', token: 'xxx' }

5. Agent.click

模拟鼠标点击。

await client.send('Agent.click', {
    selector: 'button',
});

6. Agent.liveURL

获取当前会话页面的实时 URL。

await page.goto("https://www.scrapeless.com", {
    waitUntil: "networkidle0",
    timeout: 30000,
});
const client = await page.createCDPSession();
const result = await client.send("Agent.liveURL");
console.log(result);