ドキュメントブラウザーと CrawlAgent Browserリアルタイムシグナリング(MFA)

リアルタイムシグナリング

リアルタイムシグナリング は、自動化されたワークフローにおける非同期通信を処理するための高度なイベント駆動型システムです。このシグナルベースのアーキテクチャにより、自動化スクリプトと外部システム間のシームレスなやり取りが可能になり、 Multi-Factor Authentication (MFA) 処理 がその最も重要な用途の一つとなっています。

概要

リアルタイムシグナリングシステムは、自動化ワークフローにおける非同期イベントを管理するための堅牢なフレームワークを提供します。 MFA検証 が主なユースケースの一つですが、このシステムの柔軟なアーキテクチャは多様なイベント駆動型シナリオをサポートしています。

多要素認証(MFA) は重要なセキュリティ機能ですが、自動化されたワークフローではボトルネックとなりやすく、失敗やアカウントロックアウトを引き起こすことがあります。

オートメーションにおけるMFA処理が重要な理由:

✅ アクセスの継続を保証:SMSコード、メールOTP、TOTP認証などの予期しない認証要求にも、ワークフローの中断なく対応できます

✅ ワークフローのクラッシュを防止:従来の自動化ではMFAのプロンプト表示時に凍結しますが、Scraping Browserはこれをスムーズに処理します

✅ セッションの安定性を維持:安全な検証状態管理により、長時間実行されるタスクでもログイン状態を維持できます

✅ アカウントリスクの低減:人間のような検証操作により、セキュリティのトリガーが作動する可能性を抑える

MFAを超えて:ユニバーサルイベントシステム

このシグナリングシステムは認証にとどまらず、以下のような処理にも対応します:

  • フォームの送信 とステータス更新
  • タスクの進捗状況 通知
  • APIコールバック とWebhook
  • ユーザーの操作 と状態変化
  • システム間の処理連携
  • リアルタイム監視 とアラート

完全なシグナリングソリューション:

  • 信頼性の高いMFA検証 (主な使用例)
  • 自動化ニーズに応じた汎用イベント処理
  • コードやデータ入力のための複数の入力方法
  • 非同期処理 (ブロッキングなし)
  • フルCDPおよびHTTPAPI 対応
  • 認証フローとの汎用互換性

対応するAPI

Scrapelessは、リアルタイム通知のための CDP および HTTP インターフェースの両方をサポートしています:

APICDPメソッドHTTPエンドポイント説明
シグナル送信Signal.sendPOST /signal/sendイベントチャネルにデータを送信
シグナル待機Signal.waitGET /signal/waitイベントチャネル上でデータを待機
イベント一覧Signal.listGET /signal/list保留中のすべてのイベント名を一覧表示
統計取得Signal.statsGET /signal/statsキューの統計情報を取得
イベントのクリアSignal.clearDELETE /signal/clear特定またはすべてのイベントをクリア

CDPAPI

CDPSignalAPIs を使用すると、ブラウザ自動化ワークフロー内のイベントチャネルを介してシグナルの送受信が可能になります。 詳細はこちら

Signal.send

指定されたイベントチャネルに信号データを送信します。

リクエスト形式:

{
  "method": "Signal.send",
  "params": {
    "event": "string",
    "data": "object"
  }
}

パラメータ:

パラメータ型必須説明
eventstring✓イベントチャネルの名前
dataobject✓チャネルを通じて送信するデータ

例:

await client.send('Signal.send', {
  event: 'mfa_code',
  data: { code: '123456', type: 'sms' }
});

Signal.wait

指定されたイベントチャネルで信号データを待機します。

リクエスト形式:

{
  "method": "Signal.wait",
  "params": {
    "event": "string",
    "timeout": 60000
  }
}

パラメータ:

パラメータ型必須説明
eventstring✓待機するイベントチャネルの名前
timeoutnumberXミリ秒単位での最大待機時間(デフォルト:60000)

例:

const result = await client.send('Signal.wait', {
  event: 'mfa_code',
  timeout: 60000
});
console.log('Received MFA code:', result.data);

Signal.list

キュー内の保留中のすべてのイベント名を一覧表示します。

リクエスト形式:

{
  "method": "Signal.list",
  "params": {}
}

パラメータ: 必要なし

例:

const list = await client.send('Signal.list');
console.log('Pending events:', list.events);
// Output: ["mfa_code", "captcha_result", "order_status"]
 
// Check for specific event
if (list.events.includes('mfa_code')) {
  console.log('MFA code in queue');
}

Signal.stats

キューの統計情報とサブスクライバ情報を取得します。

リクエスト形式:

{
  "method": "Signal.stats",
  "params": {}
}

パラメータ: 必要なし

レスポンスフィールド:

フィールド型説明
イベントnumber保留中のすべてのイベント名のリスト
waitersnumber待機中のサブスクライバーに関する情報

例:

const client = await page.target().createCDPSession();
 
// Get statistics
const stats = await client.send('Signal.stats');
console.log('Pending events:', stats.events);
console.log('Waiting subscribers:', stats.waiters);

Signal.clear

指定された、またはすべてのイベントをキューからクリアします。

リクエスト形式:

{
  "method": "Signal.clear",
  "params": {
    "event": "string (optional)"
  }
}

パラメータ:

パラメータ型必須説明
eventstringXクリアする特定のイベント。省略された場合は、すべてのイベントをクリアします

HTTP REST API

外部システムの場合、HTTPREST エンドポイントはCDP接続設定よりも簡単な代替手段を提供します。これにより、データ送信ごとにWebSocket接続を確立する必要がなくなります。 詳細を見る

デフォルトブラウザエンドポイントプレフィックス: https://browser.scrapeless.com/browser/{taskId}

POST /signal/send

HTTP経由で信号を送信します。

リクエスト形式:

POST https://browser.scrapeless.com/browser/{taskId}/signal/send?x-api-token={API_KEY}
Content-Type: application/json
 
{
  "event": "string",
  "data": "object"
}

パラメータ:

パラメータ型必須説明
eventstring✓イベントチャネルの名前
dataobject✓チャネルを通じて送信するデータ

例:

curl -X POST 'https://browser.scrapeless.com/browser/{taskId}/signal/send?x-api-token={API_KEY}' \
  -H 'Content-Type: application/json' \
  -d '{
    "event": "mfa_code",
    "data": { "code": "123456", "type": "sms" }
  }'

GET /signal/wait

HTTP経由で信号をGETリクエストで待ちます。

リクエスト形式:

GET https://browser.scrapeless.com/browser/{taskId}/signal/wait?x-api-token={API_KEY}&event={event}&timeout={timeout}

パラメータ:

パラメータ型必須説明
eventstring✓待機するイベントチャネルの名前
timeoutnumberXミリ秒単位での最大待機時間(デフォルト:60000)

例:

# Wait for MFA code with 60 second timeout
curl -X GET 'https://browser.scrapeless.com/browser/{taskId}/signal/wait?x-api-token={API_KEY}&event=mfa_code&timeout=60000'

GET /signal/list

保留中のすべてのイベント名を一覧表示します。

リクエスト形式:

GET https://browser.scrapeless.com/browser/{taskId}/signal/list?x-api-token={API_KEY}

パラメータ: 必要なし

例:

# List all pending events
curl -X GET 'https://browser.scrapeless.com/browser/{taskId}/signal/list?x-api-token={API_KEY}'

GET /signal/stats

キューの統計情報を取得します。

リクエスト形式:

GET https://browser.scrapeless.com/browser/{taskId}/signal/stats?x-api-token={API_KEY}

パラメータ: 必要なし

例:

# Get queue statistics
curl -X GET 'https://browser.scrapeless.com/browser/{taskId}/signal/stats?x-api-token={API_KEY}'

DELETE /signal/clear

キューからイベントをクリアします。

リクエスト形式:

DELETE https://browser.scrapeless.com/browser/{taskId}/signal/clear?x-api-token={API_KEY}
Content-Type: application/json
 
{
  "event": "string (optional)"
}

パラメータ:

パラメータ型必須説明
eventstringXクリアする特定のイベント。省略された場合は、すべてのイベントをクリアします

例:

# Clear specific event
curl -X DELETE 'https://browser.scrapeless.com/browser/{taskId}/signal/clear?x-api-token={API_KEY}' \
  -H 'Content-Type: application/json' \
  -d '{"event": "mfa_code"}'
 
# Clear all events
curl -X DELETE 'https://browser.scrapeless.com/browser/{taskId}/signal/clear?x-api-token={API_KEY}'

ベストプラクティス

適切なタイムアウトを使用

検証遅延の予想に基づいてタイムアウト値を設定してください。一般的なMFA配信時間は10〜60秒の範囲です。

エラー処理

成功、タイムアウト、エラーの場合を適切に処理するために、常にレスポンスステータスコード(200、408、400)を確認してください。

キューの監視

バックログ状況を検出し、システムの問題を把握するために、定期的にキューの統計情報を確認してください。

イベントチャネルの命名

複数のイベントが発生する状況で混乱を避けるため、明確なイベントチャネル名(例: mfa_code、 email_verification、 totp_token)を使用してください。

非同期処理

ユーザー入力を待っている間もスクリプトのブロッキングを防ぐために、非同期の信号処理を活用してください。

キューのクリーンアップ

システムのパフォーマンスを維持し、メモリの問題を防ぐために、不要になったイベントをキューからクリアしてください。

Integration Tip

信号システムは、CDPおよびHTTPインターフェースの両方とシームレスに連携するように設計されており、特定のユースケースに最も適した方法を選択できます。CDPはリアルタイムで低遅延の通信を提供し、一方でHTTP RESTエンドポイントは外部連携に対してシンプルさを提供します。

完全な例

const puppeteer = require('puppeteer-core');
 
(async () => {
    const API_TOKEN = 'API Key';
    const API_URL = 'https://api.scrapeless.com/api/v2/browser'; // Create session task API endpoint
 
    try {
        // Step 1: Get session taskId via HTTP API
        const sessionResponse = await fetch(API_URL, {
            method: 'GET',
            headers: {'x-api-token': API_TOKEN},
        });
 
        const {taskId} = await sessionResponse.json();
        console.log('Session created with task ID:', taskId);
 
        // Step 2: Connect to browser by taskId
        const browser = await puppeteer.connect({
            browserWSEndpoint: `wss://api.scrapeless.com/browser/${taskId}`,
            headers: {'x-api-token': API_TOKEN},
        });
 
        // Step 3: Navigate to page and wait for signal
        const page = await browser.newPage();
        await page.goto("https://example.com", {waitUntil: "domcontentloaded"});
 
        const client = await page.createCDPSession();
 
        console.log('Waiting for example event...');
        const result = await client.send('Signal.wait', {
            event: 'example_event',
            timeout: 60000
        });
 
        console.log('Received example data:', result.data);
 
        await browser.close();
    } catch (error) {
        console.error('Error occurred:', error);
    }
})();

Scraping Browserリアルタイム信号システムは、自動化されたワークフローにおける多要素認証を処理するための堅牢で柔軟なフレームワークを提供します。CDPおよびHTTPインターフェースとインテリジェントなイベントキューシステムを組み合わせることで、セキュリティと信頼性を維持しつつ、外部検証システムとのシームレスな統合を可能にします。

単純な自動化スクリプトを構築する場合でも、複雑なマルチシステムオーケストレーションを行う場合でも、信号システムの非同期かつノンブロッキングなアーキテクチャにより、MFA検証が必要な場合でもワークフローが確実に完了することを保証します。