DocumentaciónNavegador y CrawlAgent BrowserSeñalización en tiempo real (MFA)

Señalización en tiempo real

La Señalización en tiempo real es un sistema avanzado basado en eventos para manejar la comunicación asincrónica en flujos de trabajo automatizados. Esta arquitectura basada en señales permite una interacción perfecta entre scripts de automatización y sistemas externos, siendo el manejo de la autenticación multifactor (MFA) una de sus aplicaciones más críticas.

Descripción general

El sistema de Señalización en Tiempo Real proporciona un marco robusto para gestionar eventos asíncronos en flujos de trabajo de automatización. Aunque la verificación MFA es un caso de uso principal, la arquitectura flexible del sistema admite diversos escenarios basados en eventos.

La autenticación multifactor (MFA) es una característica de seguridad crítica que a menudo se convierte en un cuello de botella para los flujos de trabajo automatizados, provocando fallos o bloqueos de cuentas.

Por qué la gestión de MFA es crítica para la automatización:

✅ Garantizar acceso ininterrumpido: Gestionar códigos SMS inesperados, contraseñas de un solo uso por correo electrónico o autenticación TOTP sin interrumpir el flujo de trabajo

✅ Evitar fallos del flujo de trabajo: La automatización tradicional se bloquea cuando aparecen solicitudes de MFA, mientras que Agent Browser las maneja sin problemas

✅ Mantener sesiones estables: Las tareas de larga duración permanecen conectadas gracias a una gestión segura del estado de verificación

✅ Reducir el riesgo en cuentas: Un comportamiento de verificación similar al humano disminuye la probabilidad de activar alertas de seguridad

Más allá de MFA: Sistema universal de eventos

El sistema de señalización se extiende más allá de la autenticación para gestionar:

  • Envíos de formularios y actualizaciones de estado
  • Progreso de la tarea notificaciones
  • Llamadas de retorno de API y webhooks
  • Interacciones del usuario y cambios de estado
  • Coordinación de procesos entre sistemas
  • Supervisión en tiempo real y alertas

Solución completa de señalización:

  • Verificación confiable de MFA (caso de uso principal)
  • Gestión universal de eventos para necesidades de automatización
  • Múltiples métodos de entrada para códigos y datos
  • Procesamiento asíncrono (sin bloqueos)
  • Soporte completo para CDP y API HTTP
  • Compatibilidad universal con flujos de autenticación

APIs compatibles

Scrapeless admite interfaces CDP y HTTP para señalización en tiempo real:

APIMétodo CDPEndpoint HTTPDescripción
Enviar señalSignal.sendPOST /signal/sendEnviar datos a un canal de eventos
Esperar señalSignal.waitGET /signal/waitEsperar datos en un canal de eventos
Listar eventosSignal.listGET /signal/listListar todos los nombres de eventos pendientes
Obtener estadísticasSignal.statsGET /signal/statsRecuperar estadísticas de la cola
Limpiar eventosSignal.clearDELETE /signal/clearLimpiar eventos específicos o todos los eventos

CDP APIs

Las APIs de señal CDP permiten enviar y recibir señales a través de canales de eventos en flujos de trabajo de automatización de navegadores. Más información

Signal.send

Envía datos de señal a un canal de evento especificado.

Formato de solicitud:

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

Parámetros:

ParámetroTipoRequeridoDescripción
eventstring✓Nombre del canal de evento
dataobject✓Datos que se enviarán a través del canal

Ejemplo:

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

Signal.wait

Espera datos de señal en un canal de evento especificado.

Formato de solicitud:

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

Parámetros:

ParámetroTipoRequeridoDescripción
eventstring✓Nombre del canal de evento en el que esperar
timeoutnumberXTiempo máximo de espera en milisegundos (predeterminado: 60000)

Ejemplo:

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

Signal.list

Lista todos los nombres de eventos pendientes en la cola.

Formato de solicitud:

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

Parámetros: Ninguno requerido

Ejemplo:

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

Recupera estadísticas de la cola e información sobre suscriptores.

Formato de solicitud:

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

Parámetros: Ninguno requerido

Campos de respuesta:

CampoTipoDescripción
eventsnumberLista de todos los nombres de eventos pendientes
waitersnumberInformación sobre suscriptores en espera

Ejemplo:

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

Borra eventos especificados o todos los eventos de la cola.

Formato de solicitud:

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

Parámetros:

ParámetroTipoRequeridoDescripción
eventstringXEvento específico que se borrará. Si se omite, borra todos los eventos

HTTP REST APIs

Para sistemas externos, los endpoints REST HTTP proporcionan una alternativa más sencilla a la configuración de conexión CDP. Esto elimina la necesidad de establecer conexiones WebSocket para cada transmisión de datos. Más información

Prefijo predeterminado del endpoint del navegador: https://browser.scrapeless.com/browser/{taskId}

POST /signal/send

Envía una señal mediante HTTP.

Formato de solicitud:

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

Parámetros:

ParámetroTipoRequeridoDescripción
eventstring✓Nombre del canal de evento
dataobject✓Datos que se enviarán a través del canal

Ejemplo:

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

Espera una señal mediante una solicitud HTTP GET.

Formato de solicitud:

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

Parámetros:

ParámetroTipoRequeridoDescripción
eventstring✓Nombre del canal de evento en el que esperar
timeoutnumberXTiempo máximo de espera en milisegundos (predeterminado: 60000)

Ejemplo:

# 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

Lista todos los nombres de eventos pendientes.

Formato de solicitud:

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

Parámetros: Ninguno requerido

Ejemplo:

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

GET /signal/stats

Recupera estadísticas de la cola.

Formato de solicitud:

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

Parámetros: Ninguno requerido

Ejemplo:

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

DELETE /signal/clear

Borra eventos de la cola.

Formato de solicitud:

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

Parámetros:

ParámetroTipoRequeridoDescripción
eventstringXEvento específico que se borrará. Si se omite, borra todos los eventos

Ejemplo:

# 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}'

Mejores prácticas

Utilice tiempos de espera adecuados

Establezca valores de tiempo de espera según los retrasos esperados de verificación. Los tiempos típicos de entrega de autenticación multifactor (MFA) oscilan entre 10 y 60 segundos.

Manejo de errores

Verifique siempre los códigos de estado de la respuesta (200, 408, 400) para gestionar adecuadamente los casos de éxito, tiempo de espera y errores.

Supervisión de colas

Revise regularmente las estadísticas de la cola para detectar acumulaciones que puedan indicar problemas del sistema.

Nomenclatura de canales de eventos

Utilice nombres descriptivos para los canales de eventos (por ejemplo, mfa_code, email_verification, totp_token) para evitar confusiones en escenarios con múltiples eventos.

Procesamiento asincrónico

Aproveche el manejo de señales asincrónicas para evitar bloqueos del script mientras espera la entrada del usuario.

Limpieza de cola

Elimine los eventos obsoletos de la cola para mantener el rendimiento del sistema y prevenir problemas de memoria.

Integration Tip

El sistema de señales está diseñado para funcionar perfectamente con interfaces CDP y HTTP, lo que le permite elegir el método más adecuado para su caso de uso específico. CDP proporciona comunicación en tiempo real y baja latencia, mientras que los endpoints REST HTTP ofrecen simplicidad para integraciones externas.

Ejemplo completo

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

El sistema de señalización en tiempo real de Scrapeless Agent Browser proporciona un marco robusto y flexible para gestionar la autenticación multifactor en flujos de trabajo automatizados. Al combinar interfaces CDP y HTTP con un sistema de cola de eventos inteligente, permite una integración perfecta de sistemas externos de verificación, manteniendo la seguridad y la fiabilidad.

Ya sea que esté desarrollando scripts de automatización simples o orquestaciones complejas de múltiples sistemas, la arquitectura asincrónica y no bloqueante del sistema de señales garantiza que sus flujos de trabajo se completen de manera confiable, incluso cuando se requiere verificación MFA.