--- id: cdp_nav_back_go_browser name: cdp_nav_back kind: function lang: go domain: browser purity: impure version: 1.0.0 tested: false description: "Retrocede una entrada en el historial de navegación de la pestaña activa via Page.getNavigationHistory + Page.navigateToHistoryEntry. Equivalente a pulsar el botón Atrás del navegador." tags: [cdp, browser, navigation, navegator] signature: "func CdpNavBack(c *CDPConn) error" uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: error_go_core imports: [] file_path: "functions/browser/cdp_nav_back.go" example: | conn, _ := browser.CdpConnect(9222) defer browser.CdpClose(conn, 0) _ = browser.CdpNavigate(conn, "https://example.com/paso1") _ = browser.CdpNavigate(conn, "https://example.com/paso2") // Volver a /paso1 if err := browser.CdpNavBack(conn); err != nil { log.Println(err) } params: - name: c desc: "Conexión CDP activa obtenida de CdpConnect, apuntando a la pestaña que se quiere retroceder" output: "nil si navegó correctamente a la entrada anterior; error si ya estamos al inicio del historial, la conexión es nula o el cast de tipos falla (respuesta CDP malformada)" --- ## Ejemplo ```go conn, err := browser.CdpConnect(9222) if err != nil { log.Fatal(err) } defer browser.CdpClose(conn, 0) _ = browser.CdpNavigate(conn, "https://metabase.local/dashboard/1") _ = browser.CdpNavigate(conn, "https://metabase.local/question/42") // Volver al dashboard if err := browser.CdpNavBack(conn); err != nil { log.Printf("no se pudo retroceder: %v", err) } ``` ## Cuando usarla Cuando un flujo de automatización navega por varias páginas y necesita volver atrás sin conocer la URL anterior. Útil en scraping de paginaciones o en flujos de formularios multipaso donde la URL destino no es predecible. ## Gotchas - Navega dentro del historial de ESA pestaña CDP (sesión WS), no del perfil en disco ni del historial global de Chrome. - Si `currentIndex == 0` (primer elemento del historial), retorna error "ya en el inicio del historial" — no es un fallo de red, es estado válido. - Requiere que `Page` esté habilitado en la sesión; Chrome lo activa automáticamente con la mayoría de conexiones CDP, pero si usas una sesión muy restrictiva puede fallar. - No espera a que la página de destino cargue; encadenar con `CdpWaitLoad` o `CdpWaitIdle` si necesitas esperar la carga completa.