实时信令
实时信令是一个先进的事件驱动系统,用于处理自动化工作流中的异步通信。这种基于信令的架构实现了自动化脚本与外部系统之间的无缝交互,其中多因素认证 (MFA) 处理是其最关键的应用之一。
概述
实时信令系统为自动化工作流中的异步事件管理提供了一个强大的框架。虽然 MFA 验证是其主要用例,但该系统灵活的架构支持各种事件驱动场景。
多因素认证 (MFA) 是一项关键的安全功能,但它常常成为自动化工作流的瓶颈,导致失败或账户锁定。
为什么 MFA 处理对自动化至关重要:
✅ 确保不间断访问:处理意外的短信验证码、电子邮件 OTP 或 TOTP 认证,而不会中断工作流
✅ 防止工作流崩溃:当 MFA 提示出现时,传统自动化会冻结,而 Scraping Browser 可以平稳处理这些情况
✅ 保持会话稳定:通过安全验证状态管理,长时间运行的任务可以保持登录状态
✅ 降低账户风险:类似人类的验证行为降低了触发安全警报的可能性
超越 MFA:通用事件系统
信令系统除了认证之外,还可以处理:
- 表单提交和状态更新
- 任务进度通知
- API 回调和 Webhook
- 用户交互和状态变化
- 跨系统流程协调
- 实时监控和警报
完整的信令解决方案:
- 可靠的 MFA 验证(主要用例)
- 通用事件处理,满足自动化需求
- 多种输入方法,用于验证码和数据
- 异步处理(非阻塞)
- 完整的 CDP 和 HTTP API 支持
- 与认证流程的通用兼容性
支持的 API
Scrapeless 支持 CDP 和 HTTP 接口进行实时信令:
| API | CDP 方法 | HTTP 端点 | 描述 |
|---|---|---|---|
| 发送信令 | Signal.send | POST /signal/send | 向事件通道发送数据 |
| 等待信令 | Signal.wait | GET /signal/wait | 在事件通道上等待数据 |
| 列出事件 | Signal.list | GET /signal/list | 列出所有待处理的事件名称 |
| 获取统计信息 | Signal.stats | GET /signal/stats | 检索队列统计信息 |
| 清除事件 | Signal.clear | DELETE /signal/clear | 清除特定或所有事件 |
CDP API
Signal.send
将信令数据发送到指定的事件通道。
请求格式:
{
"method": "Signal.send",
"params": {
"event": "string",
"data": "object"
}
}参数:
| 参数 | 类型 | 必需 | 描述 |
|---|---|---|---|
| event | string | ✓ | 事件通道的名称 |
| data | object | ✓ | 要通过通道发送的数据 |
示例:
await client.send('Signal.send', {
event: 'mfa_code',
data: { code: '123456', type: 'sms' }
});Signal.wait
在指定的事件通道上等待信令数据。
请求格式:
{
"method": "Signal.wait",
"params": {
"event": "string",
"timeout": 60000
}
}参数:
| 参数 | 类型 | 必需 | 描述 |
|---|---|---|---|
| event | string | ✓ | 要等待的事件通道的名称 |
| timeout | number | X | 最长等待时间(毫秒)(默认值: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);响应字段:
| 字段 | 类型 | 描述 |
|---|---|---|
| events | number | 所有待处理事件名称的列表 |
| waiters | number | 关于等待订阅者的信息 |
Signal.clear
从队列中清除指定或所有事件。
请求格式:
{
"method": "Signal.clear",
"params": {
"event": "string (optional)"
}
}参数:
| 参数 | 类型 | 必需 | 描述 |
|---|---|---|---|
| event | string | X | 要清除的特定事件。如果省略,则清除所有事件 |
HTTP REST API
对于外部系统,HTTP REST 端点提供了一种比 CDP 连接设置更简单的替代方案。这消除了为每次数据传输建立 WebSocket 连接的需要。
默认浏览器端点前缀: https://browser.scrapeless.com/browser/{taskId}
POST /signal/send
通过 HTTP 发送信令。
请求体:
{
"event": "string",
"data": "object"
}参数:
| 参数 | 类型 | 必需 | 描述 |
|---|---|---|---|
| event | string | ✓ | 事件通道的名称 |
| data | object | ✓ | 要通过通道发送的数据 |
GET /signal/wait
通过 HTTP GET 请求等待信令。
请求 URL:
GET https://browser.scrapeless.com/browser/{taskId}/signal/wait?x-api-token={API_KEY}&event={event}&timeout={timeout}查询参数:
| 参数 | 类型 | 必需 | 描述 |
|---|---|---|---|
| event | string | ✓ | 要等待的事件通道的名称 |
| timeout | number | X | 最长等待时间(毫秒)(默认值: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)"
}参数:
| 参数 | 类型 | 必需 | 描述 |
|---|---|---|---|
| event | string | X | 要清除的特定事件。如果省略,则清除所有事件 |
最佳实践
使用适当的超时
根据预期的验证延迟设置超时值。典型的 MFA 交付时间为 10-60 秒。
错误处理
始终检查响应状态码(200、408、400),以适当处理成功、超时和错误情况。
队列监控
定期检查队列统计信息,以检测可能表明系统问题的积压情况。
事件通道命名
使用描述性的事件通道名称(例如,mfa_code、email_verification、totp_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 验证。