Tín hiệu thời gian thực
Tín hiệu thời gian thực là một hệ thống điều khiển theo sự kiện nâng cao để xử lý giao tiếp không đồng bộ trong các quy trình tự động hóa. Kiến trúc dựa trên tín hiệu này cho phép tương tác liền mạch giữa các tập lệnh tự động hóa và các hệ thống bên ngoài, với xử lý Xác thực đa yếu tố (MFA) là một trong những ứng dụng quan trọng nhất của nó.
Tổng quan
Hệ thống Tín hiệu thời gian thực cung cấp một khuôn khổ mạnh mẽ để quản lý các sự kiện không đồng bộ trong các quy trình tự động hóa. Mặc dù xác minh MFA là một trường hợp sử dụng chính, kiến trúc linh hoạt của hệ thống hỗ trợ nhiều kịch bản điều khiển theo sự kiện khác nhau.
Xác thực đa yếu tố (MFA) là một tính năng bảo mật quan trọng thường trở thành nút thắt cổ chai cho các quy trình tự động hóa, gây ra lỗi hoặc khóa tài khoản.
Tại sao xử lý MFA lại quan trọng đối với tự động hóa:
✅ Đảm bảo truy cập không bị gián đoạn: Xử lý các mã SMS, OTP email hoặc xác thực TOTP không mong muốn mà không làm gián đoạn quy trình làm việc
✅ Ngăn chặn sự cố quy trình làm việc: Tự động hóa truyền thống bị đóng băng khi lời nhắc MFA xuất hiện, trong khi Scraping Browser xử lý những điều này một cách trơn tru
✅ Duy trì các phiên ổn định: Các tác vụ chạy dài vẫn được đăng nhập với quản lý trạng thái xác minh an toàn
✅ Giảm rủi ro tài khoản: Hành vi xác minh giống con người làm giảm khả năng kích hoạt bảo mật
Ngoài MFA: Hệ thống sự kiện phổ quát
Hệ thống tín hiệu mở rộng ngoài xác thực để xử lý:
- Gửi biểu mẫu và cập nhật trạng thái
- Thông báo tiến độ tác vụ
- Gọi lại API và webhook
- Tương tác người dùng và thay đổi trạng thái
- Điều phối quy trình giữa các hệ thống
- Giám sát thời gian thực và cảnh báo
Giải pháp tín hiệu hoàn chỉnh:
- Xác minh MFA đáng tin cậy (trường hợp sử dụng chính)
- Xử lý sự kiện phổ quát cho nhu cầu tự động hóa
- Nhiều phương thức nhập cho mã và dữ liệu
- Xử lý không đồng bộ (không chặn)
- Hỗ trợ đầy đủ CDP và HTTP API
- Khả năng tương thích phổ quát với các luồng xác thực
API được hỗ trợ
Scrapeless hỗ trợ cả giao diện CDP và HTTP cho tín hiệu thời gian thực:
| API | Phương thức CDP | Điểm cuối HTTP | Mô tả |
|---|---|---|---|
| Gửi tín hiệu | Signal.send | POST /signal/send | Gửi dữ liệu đến một kênh sự kiện |
| Chờ tín hiệu | Signal.wait | GET /signal/wait | Chờ dữ liệu trên một kênh sự kiện |
| Liệt kê sự kiện | Signal.list | GET /signal/list | Liệt kê tất cả các tên sự kiện đang chờ xử lý |
| Lấy thống kê | Signal.stats | GET /signal/stats | Truy xuất thống kê hàng đợi |
| Xóa sự kiện | Signal.clear | DELETE /signal/clear | Xóa các sự kiện cụ thể hoặc tất cả các sự kiện |
API CDP
Signal.send
Gửi dữ liệu tín hiệu đến một kênh sự kiện được chỉ định.
Định dạng yêu cầu:
{
"method": "Signal.send",
"params": {
"event": "string",
"data": "object"
}
}Tham số:
| Tham số | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
| event | string | ✓ | Tên của kênh sự kiện |
| data | object | ✓ | Dữ liệu để gửi qua kênh |
Ví dụ:
await client.send('Signal.send', {
event: 'mfa_code',
data: { code: '123456', type: 'sms' }
});Signal.wait
Chờ dữ liệu tín hiệu trên một kênh sự kiện được chỉ định.
Định dạng yêu cầu:
{
"method": "Signal.wait",
"params": {
"event": "string",
"timeout": 60000
}
}Tham số:
| Tham số | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
| event | string | ✓ | Tên của kênh sự kiện để chờ |
| timeout | number | X | Thời gian chờ tối đa tính bằng mili giây (mặc định: 60000) |
Ví dụ:
const result = await client.send('Signal.wait', {
event: 'mfa_code',
timeout: 60000
});
console.log('Received MFA code:', result.data);Signal.list
Liệt kê tất cả các tên sự kiện đang chờ xử lý trong hàng đợi.
Định dạng yêu cầu:
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');
}Tham số: Không bắt buộc
Signal.stats
Truy xuất thống kê hàng đợi và thông tin người đăng ký.
Định dạng yêu cầu:
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);Trường phản hồi:
| Trường | Loại | Mô tả |
|---|---|---|
| events | number | Danh sách tất cả các tên sự kiện đang chờ xử lý |
| waiters | number | Thông tin về người đăng ký đang chờ |
Signal.clear
Xóa các sự kiện được chỉ định hoặc tất cả các sự kiện khỏi hàng đợi.
Định dạng yêu cầu:
{
"method": "Signal.clear",
"params": {
"event": "string (optional)"
}
}Tham số:
| Tham số | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
| event | string | X | Sự kiện cụ thể để xóa. Nếu bỏ qua, xóa tất cả các sự kiện |
API REST HTTP
Đối với các hệ thống bên ngoài, các điểm cuối HTTP REST cung cấp một giải pháp thay thế đơn giản hơn cho việc thiết lập kết nối CDP. Điều này loại bỏ nhu cầu thiết lập kết nối WebSocket cho mỗi lần truyền dữ liệu.
Tiền tố điểm cuối trình duyệt mặc định: https://browser.scrapeless.com/browser/{taskId}
POST /signal/send
Gửi tín hiệu qua HTTP.
Nội dung yêu cầu:
{
"event": "string",
"data": "object"
}Tham số:
| Tham số | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
| event | string | ✓ | Tên của kênh sự kiện |
| data | object | ✓ | Dữ liệu để gửi qua kênh |
GET /signal/wait
Chờ tín hiệu qua yêu cầu GET HTTP.
URL yêu cầu:
GET https://browser.scrapeless.com/browser/{taskId}/signal/wait?x-api-token={API_KEY}&event={event}&timeout={timeout}Tham số truy vấn:
| Tham số | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
| event | string | ✓ | Tên của kênh sự kiện để chờ |
| timeout | number | X | Thời gian chờ tối đa tính bằng mili giây (mặc định: 60000) |
GET /signal/list
Liệt kê tất cả các tên sự kiện đang chờ xử lý.
URL yêu cầu:
GET https://browser.scrapeless.com/browser/{taskId}/signal/list?x-api-token={API_KEY}GET /signal/stats
Truy xuất thống kê hàng đợi.
URL yêu cầu:
GET https://browser.scrapeless.com/browser/{taskId}/signal/stats?x-api-token={API_KEY}DELETE /signal/clear
Xóa các sự kiện khỏi hàng đợi.
Nội dung yêu cầu:
{
"event": "string (optional)"
}Tham số:
| Tham số | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
| event | string | X | Sự kiện cụ thể để xóa. Nếu bỏ qua, xóa tất cả các sự kiện |
Các phương pháp hay nhất
Sử dụng thời gian chờ thích hợp
Đặt giá trị thời gian chờ dựa trên độ trễ xác minh dự kiến. Thời gian gửi MFA điển hình dao động từ 10-60 giây.
Xử lý lỗi
Luôn kiểm tra mã trạng thái phản hồi (200, 408, 400) để xử lý các trường hợp thành công, hết thời gian chờ và lỗi một cách thích hợp.
Giám sát hàng đợi
Thường xuyên kiểm tra thống kê hàng đợi để phát hiện các điều kiện tồn đọng có thể cho thấy các vấn đề của hệ thống.
Đặt tên kênh sự kiện
Sử dụng tên kênh sự kiện mô tả (ví dụ: mfa_code, email_verification, totp_token) để tránh nhầm lẫn trong các kịch bản đa sự kiện.
Xử lý không đồng bộ
Tận dụng xử lý tín hiệu không đồng bộ để ngăn chặn tập lệnh bị chặn trong khi chờ nhập liệu của người dùng.
Dọn dẹp hàng đợi
Xóa các sự kiện lỗi thời khỏi hàng đợi để duy trì hiệu suất hệ thống và ngăn ngừa các vấn đề về bộ nhớ.
Hệ thống tín hiệu được thiết kế để hoạt động liền mạch với cả giao diện CDP và HTTP, cho phép bạn chọn phương pháp phù hợp nhất cho trường hợp sử dụng cụ thể của mình. CDP cung cấp giao tiếp thời gian thực, độ trễ thấp, trong khi các điểm cuối HTTP REST mang lại sự đơn giản cho các tích hợp bên ngoài.
Ví dụ hoàn chỉnh
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);
}
})();Hệ thống Tín hiệu thời gian thực của Scraping Browser cung cấp một khuôn khổ mạnh mẽ, linh hoạt để xử lý xác thực đa yếu tố trong các quy trình tự động hóa. Bằng cách kết hợp các giao diện CDP và HTTP với một hệ thống hàng đợi sự kiện thông minh, nó cho phép tích hợp liền mạch các hệ thống xác minh bên ngoài trong khi vẫn duy trì bảo mật và độ tin cậy.
Cho dù bạn đang xây dựng các tập lệnh tự động hóa đơn giản hay các dàn xếp đa hệ thống phức tạp, kiến trúc không đồng bộ, không chặn của hệ thống tín hiệu đảm bảo các quy trình làm việc của bạn hoàn thành đáng tin cậy—ngay cả khi cần xác minh MFA.