Browser功能Real-time Signaling (MFA)

实时信令

实时信令是一个先进的事件驱动系统,用于处理自动化工作流中的异步通信。这种基于信令的架构实现了自动化脚本与外部系统之间的无缝交互,其中多因素认证 (MFA) 处理是其最关键的应用之一。

概述

实时信令系统为自动化工作流中的异步事件管理提供了一个强大的框架。虽然 MFA 验证是其主要用例,但该系统灵活的架构支持各种事件驱动场景。

多因素认证 (MFA) 是一项关键的安全功能,但它常常成为自动化工作流的瓶颈,导致失败或账户锁定。

为什么 MFA 处理对自动化至关重要:

确保不间断访问:处理意外的短信验证码、电子邮件 OTP 或 TOTP 认证,而不会中断工作流

防止工作流崩溃:当 MFA 提示出现时,传统自动化会冻结,而 Scraping Browser 可以平稳处理这些情况

保持会话稳定:通过安全验证状态管理,长时间运行的任务可以保持登录状态

降低账户风险:类似人类的验证行为降低了触发安全警报的可能性

超越 MFA:通用事件系统

信令系统除了认证之外,还可以处理:

  • 表单提交和状态更新
  • 任务进度通知
  • API 回调和 Webhook
  • 用户交互和状态变化
  • 跨系统流程协调
  • 实时监控和警报

完整的信令解决方案:

  • 可靠的 MFA 验证(主要用例)
  • 通用事件处理,满足自动化需求
  • 多种输入方法,用于验证码和数据
  • 异步处理(非阻塞)
  • 完整的 CDP 和 HTTP API 支持
  • 与认证流程的通用兼容性

支持的 API

Scrapeless 支持 CDPHTTP 接口进行实时信令:

APICDP 方法HTTP 端点描述
发送信令Signal.sendPOST /signal/send向事件通道发送数据
等待信令Signal.waitGET /signal/wait在事件通道上等待数据
列出事件Signal.listGET /signal/list列出所有待处理的事件名称
获取统计信息Signal.statsGET /signal/stats检索队列统计信息
清除事件Signal.clearDELETE /signal/clear清除特定或所有事件

CDP API

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

列出队列中所有待处理的事件名称。

请求格式:

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

检索队列统计信息和订阅者信息。

请求格式:

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);

响应字段:

字段类型描述
eventsnumber所有待处理事件名称的列表
waitersnumber关于等待订阅者的信息

Signal.clear

从队列中清除指定或所有事件。

请求格式:

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

参数:

参数类型必需描述
eventstringX要清除的特定事件。如果省略,则清除所有事件

HTTP REST API

对于外部系统,HTTP REST 端点提供了一种比 CDP 连接设置更简单的替代方案。这消除了为每次数据传输建立 WebSocket 连接的需要。

默认浏览器端点前缀: https://browser.scrapeless.com/browser/{taskId}

POST /signal/send

通过 HTTP 发送信令。

请求体:

{
  "event": "string",
  "data": "object"
}

参数:

参数类型必需描述
eventstring事件通道的名称
dataobject要通过通道发送的数据

GET /signal/wait

通过 HTTP GET 请求等待信令。

请求 URL:

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

查询参数:

参数类型必需描述
eventstring要等待的事件通道的名称
timeoutnumberX最长等待时间(毫秒)(默认值:60000)

GET /signal/list

列出所有待处理的事件名称。

请求 URL:

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

GET /signal/stats

检索队列统计信息。

请求 URL:

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

DELETE /signal/clear

从队列中清除事件。

请求体:

{
  "event": "string (optional)"
}

参数:

参数类型必需描述
eventstringX要清除的特定事件。如果省略,则清除所有事件

最佳实践

使用适当的超时

根据预期的验证延迟设置超时值。典型的 MFA 交付时间为 10-60 秒。

错误处理

始终检查响应状态码(200、408、400),以适当处理成功、超时和错误情况。

队列监控

定期检查队列统计信息,以检测可能表明系统问题的积压情况。

事件通道命名

使用描述性的事件通道名称(例如,mfa_codeemail_verificationtotp_token),以避免在多事件场景中造成混淆。

异步处理

利用异步信令处理来防止脚本在等待用户输入时阻塞。

队列清理

清除队列中过时的事件,以保持系统性能并防止内存问题。

集成提示

信令系统旨在与 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 ID 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 via WebSocket
        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 验证。