--- id: cdp_load_storage_state_go_browser name: cdp_load_storage_state kind: function lang: go domain: browser purity: impure version: 1.0.0 tested: false description: "Restaura cookies y localStorage desde un archivo JSON (generado por CdpSaveStorageState) en la pestaña activa, reanudando una sesión autenticada sin repetir el login." tags: [cdp, browser, storage, session, cookies, localStorage, auth, navegator] signature: "func CdpLoadStorageState(c *CDPConn, inPath string) error" uses_functions: - cdp_evaluate_go_browser uses_types: [] returns: [] returns_optional: false error_type: error_go_core imports: [] file_path: "functions/browser/cdp_load_storage_state.go" example: | conn, _ := CdpConnect(9222) defer CdpClose(conn) CdpNavigate(conn, "https://app.example.com") CdpLoadStorageState(conn, "/tmp/session.json") CdpNavigate(conn, "https://app.example.com") // reload para que la app lea el localStorage restaurado params: - name: c desc: "Conexión CDP activa apuntando a la pestaña donde se restaurará el estado." - name: inPath desc: "Ruta del archivo JSON producido previamente por CdpSaveStorageState." output: "nil si cookies y localStorage se restauraron correctamente; error con contexto si el archivo no existe, el JSON es inválido o falla algún comando CDP." --- ## Ejemplo ```go conn, err := CdpConnect(9222) if err != nil { log.Fatal(err) } defer CdpClose(conn) // 1. Navegar al origen correcto ANTES de restaurar CdpNavigate(conn, "https://app.example.com") // 2. Restaurar cookies + localStorage if err := CdpLoadStorageState(conn, "/tmp/session.json"); err != nil { log.Fatal(err) } // 3. Recargar para que la app lea el localStorage restaurado CdpNavigate(conn, "https://app.example.com") // A partir de aquí la sesión está activa — no se necesitó login ``` ## Cuando usarla Al inicio de un script de scraping autenticado, después de `CdpNavigate` al dominio objetivo y antes de cualquier interacción. Sustituye el flujo de login cuando ya existe un archivo de estado guardado con `CdpSaveStorageState`. ## Gotchas - **Orden obligatorio: navegar → load → reload**. El localStorage es por-origen: si llamas a esta función antes de navegar al dominio correcto, los `setItem` escriben en el origen equivocado (p.ej. `about:blank`) y la app no los ve. Secuencia correcta: `CdpNavigate(dominio)` → `CdpLoadStorageState(...)` → `CdpNavigate(dominio)` de nuevo. - **Cookies globales del perfil**: `Network.setCookies` restaura todas las cookies del archivo, que pueden ser de múltiples dominios. Esto es el comportamiento esperado y compatible con cómo las guardó `CdpSaveStorageState`. - **Archivo inexistente o corrupto**: la función devuelve error explícito; comprueba que el archivo existe antes de llamarla (por ejemplo con `os.Stat`) si quieres un fallback a login completo. - **Sesión expirada**: restaurar el estado no renueva tokens del servidor. Si la sesión expiró (cookies caducadas, JWT vencido), la app redirigirá a login igualmente. En ese caso re-autentícate y vuelve a guardar el estado.