Ir al contenido

Refactor de act:evaluate con CDP

¿Te ha pasado que una pestaña del navegador se queda “congelada” sin motivo aparente? Muchas veces, el culpable es un script de evaluate que tarda demasiado. Como Playwright organiza los comandos en una cola por página, un solo proceso lento puede detener todas las acciones siguientes, como clicks o escritura de texto.

Para solucionar esto, estamos moviendo act:evaluate a una implementación directa con CDP. Esto separa la ejecución del código de la cola principal de Playwright, lo que ayuda a que tus automatizaciones sean más fiables y no se queden atascadas.

  • Tener activado el gate browser.evaluateEnabled.
  • Acceso al CDP endpoint del navegador.

Sigue estos pasos para implementar el nuevo flujo de ejecución aislado en 5 minutos:

  1. Define un presupuesto de tiempo único: Usa una función de ayuda para que el timeout sea consistente en todo el proceso.
    // Ejemplo de lógica para el presupuesto
    const budget = createBudget({ timeoutMs, signal });
    // Usa budget.remainingMs() y budget.signal en tus llamadas
  2. Conecta vía CDP: Crea un módulo cdp-evaluate.ts que se conecte al socket del navegador y use Target.attachToTarget para obtener una sessionId independiente.
  3. Ejecuta el código: Usa Runtime.evaluate para scripts globales o Runtime.callFunctionOn si necesitas interactuar con un elemento específico.
  4. Configura el fallback: Si el mapeo de elementos falla, el sistema debe usar automáticamente el path de Playwright para asegurar que la acción se complete.
  • El mapeo de elementos falla: Si no se encuentra un backendDOMNodeId para un ref, act:evaluate usará Playwright como respaldo. Esto es normal y mantiene la compatibilidad.
  • Efectos secundarios tras un timeout: Runtime.terminateExecution intenta detener el script, pero puede dejar rastro en la página. Revisa los logs para confirmar cuándo se activa esta terminación.
  • La cola de Playwright sigue bloqueada: Verifica que estás usando la conexión CDP independiente y no la sesión compartida de Playwright.
  • Timeouts inconsistentes: Asegúrate de propagar el mismo AbortSignal a todas las funciones internas para que la cancelación sea total.

¿Necesitas ayuda para configurar tu entorno? Prueba nuestro AI Setup Assistant.

OpenClaw

OpenClaw Expert

Sigues atascado?

Si esta pagina no resolvio tu caso, pregunta a OpenClaw Expert para pasos concretos.