ドキュメントブラウザーと CrawlAgent BrowserCDP API

CDP API

Scrapeless Scraping Browserは標準のCDP(Chrome DevTools Protocol)機能を拡張し、ブラウザ自動化機能を強化する一連の強力なカスタム関数を追加しています。このドキュメントでは主に、CDPの処理に関連するCAPTCHA関数について説明します。

CAPTCHA Solverの機能

機能概要

Scraping Browserには高度なCAPTCHA対策機能が含まれており、Webページで一般的に見られるCAPTCHAの種類を自動的に処理できます。

サポートされているCAPTCHAの種類

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

イベント監視メカニズム

コアイベント

Scraping Browserは、CAPTCHAの解決プロセスを監視するための3つのコアイベントを提供しています:

イベント名説明
Captcha.detectedCAPTCHAが検出された
Captcha.solveFinishedCAPTCHAの解決が完了した
Captcha.solveFailedCAPTCHAの解決に失敗した

イベント応答データ構造

フィールド型説明
typestringCAPTCHAの種類: recaptcha turnstile
successboolean解決結果
messagestringステータスメッセージ: "NOT_DETECTED" "SOLVE_FINISHED" "SOLVE_FAILED" "INVALID"
token?string成功時に返されるトークン(オプション)

実装例

// Listen for CAPTCHA solving events
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は、CAPTCHAソルバーの動作を細かく制御できる一連の高度なAPIを提供しています。以下のAPIがサポートされています:

API名説明
Captcha.setTokenCAPTCHAサービスの認証トークンを設定します
Captcha.setConfigすべてのCAPTCHAソルバーパラメーターを構成します
Captcha.solveCAPTCHA解決プロセスを手動でトリガーします
Agent.clickマウスクリックをシミュレートします
Agent.liveURL現在のセッションページのライブURLを取得します

詳細なAPIの説明

1. Captcha.setConfig

CAPTCHAソルバーのすべてのパラメーターを構成します。

await client.send('Captcha.setConfig', {
    config: JSON.stringify(
        {
            apiKey: "your-token",
            autoSolve: true,
            enabledForRecaptcha: true,
            enabledForRecaptchaV3: true,
            enabledForTurnstile: true
        }
    )
});

2. Captcha.solve

CAPTCHA解決プロセスを手動でトリガーします。

const { Puppeteer, createPuppeteerCDPSession } = require('@scrapeless-ai/sdk');
 
(async () => {
    const browser = await Puppeteer.connect({
      sessionName: 'sdk_test',
      sessionTTL: 180,
      proxyCountry: 'US',
      sessionRecording: true,
      defaultViewport: null
    });
    const page = await browser.newPage();
    await page.goto('https://www.scrapeless.com');
    const cdpSession = await createPuppeteerCDPSession(page);
 
    await cdpSession.solveCaptcha({ timeout: 30000 });
})();

3. Agent.click

マウスクリックをシミュレートします。

const { Puppeteer, createPuppeteerCDPSession } = require('@scrapeless-ai/sdk');
 
(async () => {
    const browser = await Puppeteer.connect({
      sessionName: 'sdk_test',
      sessionTTL: 180,
      proxyCountry: 'US',
      sessionRecording: true,
      defaultViewport: null
    });
    const page = await browser.newPage();
    await page.goto('https://www.scrapeless.com');
    const cdpSession = await createPuppeteerCDPSession(page);
 
    await cdpSession.realClick('button');
})();

4. Agent.type

キーボード入力をシミュレートします。

const { Puppeteer, createPuppeteerCDPSession } = require('@scrapeless-ai/sdk');
 
(async () => {
    const browser = await Puppeteer.connect({
      sessionName: 'sdk_test',
      sessionTTL: 180,
      proxyCountry: 'US',
      sessionRecording: true,
      defaultViewport: null
    });
    const page = await browser.newPage();
    await page.goto('https://www.scrapeless.com');
    const cdpSession = await createPuppeteerCDPSession(page);
 
    await cdpSession.realFill('input', 'Hello, Scrapeless!');
})();

5. Agent.liveURL

現在のセッションページのライブURLを取得します。

const { Puppeteer, log as Log, createPuppeteerCDPSession } = require('@scrapeless-ai/sdk');
const logger = Log.withPrefix('puppeteer-example');
 
(async () => {
    const browser = await Puppeteer.connect({
      sessionName: 'sdk_test',
      sessionTTL: 180,
      proxyCountry: 'US',
      sessionRecording: true,
      defaultViewport: null
    });
    const page = await browser.newPage();
    await page.goto('https://www.scrapeless.com');
    const cdpSession = await createPuppeteerCDPSession(page);
 
    const { error, liveURL } = await cdpSession.liveURL();
    if (error) {
      logger.error('Failed to get current page URL:', error);
    } else {
      logger.info('Current page URL:', liveURL);
    }
    await browser.close();
})();

6. Captcha.imageToText

画像キャプチャの解決

const { Puppeteer, createPuppeteerCDPSession } = require('@scrapeless-ai/sdk');
 
const browser = await Puppeteer.connect({
  sessionName: 'sdk_test',
  sessionTTL: 180,
  proxyCountry: 'US',
  sessionRecording: true,
  defaultViewport: null
});
const page = await browser.newPage();
await page.goto('https://www.example.com');
const cdpSession = await createPuppeteerCDPSession(page);
 
await cdpSession.imageToText({
  imageSelector: '.captcha__image',
  inputSelector: 'input[name="captcha"]',
  timeout: 30000,
})