--- name: cdp_wait_load kind: function lang: go domain: browser version: "1.1.0" purity: impure signature: "func CdpWaitLoad(c *CDPConn, timeout time.Duration) error" description: "Espera a que la pagina actual termine de cargar completamente. Bloquea hasta recibir el evento CDP Page.loadEventFired (sin polling), con un fast path inicial de document.readyState: si ya esta complete, retorna de inmediato. Retorna error si se agota el timeout o si no logra habilitar el dominio Page." tags: [chrome, cdp, browser, automation, wait, event, devtools, readystate, load, loadeventfired, navegator] uses_functions: [cdp_evaluate_go_browser] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, time] params: - name: c desc: "conexión CDP activa" - name: timeout desc: "duración máxima de espera por carga completa" output: "error si document.readyState no llega a complete" tested: false tests: [] test_file_path: "" file_path: "functions/browser/cdp_wait_load.go" --- ## Ejemplo ```go conn, _ := CdpConnect(9222) CdpNavigate(conn, "https://example.com") // Esperar hasta 30 segundos a que la pagina cargue por completo if err := CdpWaitLoad(conn, 30*time.Second); err != nil { log.Fatal("Timeout esperando carga:", err) } html, _ := CdpGetHTML(conn) ``` ## Notas Bloquea esperando el evento CDP `Page.loadEventFired` (sin polling). Antes de esperar hace un fast path con `document.readyState`: si la página ya está `complete`, retorna de inmediato sin armar el handler. Tras suscribir el evento re-chequea `readyState` una vez más para no perder la carga por una carrera entre el fast path y el registro del handler. Habilita el dominio `Page` vía `ensurePage` (cacheado por conexión, idempotente). Si `timeout <= 0` usa 30s por defecto (mas largo que `CdpWaitElement` porque la carga completa de red puede tardar mas que la aparicion de un elemento DOM). ## Capability growth log - v1.1.0 (2026-06-13) — De polling de `document.readyState` cada 200ms a esperar el evento `Page.loadEventFired` (vía `OnEvent` + canal con timeout), con fast path inicial de `readyState`. Elimina los round-trips de polling y la cuantización de ±200ms: si la página ya está cargada retorna en microsegundos.