CDP API
Scrapelessスクレイピングブラウザは、標準のCDP(Chrome DevTools Protocol)機能を拡張し、ブラウザ自動化機能を強化するための一連の強力なカスタム機能を追加します。このドキュメントでは、主にCAPTCHA処理に関連するCDP機能について説明します。
CAPTCHAソルバー機能
機能概要
Scraping Browserは、高度なCAPTCHA解決機能を備えており、ウェブページでよく見られるCAPTCHAタイプを自動的に処理します。
サポートされているCAPTCHAタイプ
- reCaptcha
- Cloudflare Turnstile
- Cloudflare 5秒チャレンジ
- AWS WAF
イベント監視メカニズム
コアイベント
Scraping Browserは、CAPTCHA解決プロセスを監視するための3つのコアイベントを提供します。
| イベント名 | 説明 |
|---|---|
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 | 成功時に返されるトークン (オプション) |
実装例
// 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.setToken | CAPTCHAサービスの認証トークンを設定します |
Captcha.setConfig | すべてのCAPTCHAソルバーパラメータを設定します |
Captcha.solve | CAPTCHA解決プロセスを手動でトリガーします |
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
画像CAPTCHAを解決する
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,
})