CDP API
Scrapeless Scraping Browserは標準的なCDP(Chrome DevTools Protocol)機能を拡張し、ブラウザの自動化機能を強化するための強力なカスタム関数を一連追加しています。このドキュメントでは主に、CAPTCHA処理に関連するCDP関数を扱います。
CAPTCHAソルバー機能
機能概要
Scraping Browserには高度なCAPTCHA解決機能が含まれており、Webページで見つかる一般的なCAPTCHAの種類を自動的に処理します。
サポートされているCAPTCHAの種類
- reCaptcha
- Cloudflare Turnstile
- Cloudflare 5s Challenge
- 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 | 成功時に返されるトークン(オプション) |
実装例
// 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は、CAPTCHAソルバーの動作を細かく制御するための高度なAPIをいくつか提供します。次のAPIがサポートされています。
API名 | 説明 |
---|---|
Captcha.setAutoSolve | 自動CAPTCHA解決動作を制御します |
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({
session_name: 'sdk_test',
session_ttl: 180,
proxy_country: 'US',
session_recording: 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({
session_name: 'sdk_test',
session_ttl: 180,
proxy_country: 'US',
session_recording: 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({
session_name: 'sdk_test',
session_ttl: 180,
proxy_country: 'US',
session_recording: 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({
session_name: 'sdk_test',
session_ttl: 180,
proxy_country: 'US',
session_recording: 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({
session_name: 'sdk_test',
session_ttl: 180,
proxy_country: 'US',
session_recording: 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,
})