8742cb25be
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
62 lines
3.3 KiB
Markdown
62 lines
3.3 KiB
Markdown
---
|
|
name: cdp_screenshot
|
|
kind: function
|
|
lang: go
|
|
domain: browser
|
|
version: "1.2.0"
|
|
purity: impure
|
|
signature: "func CdpScreenshot(c *CDPConn, outputPath string, opts CdpScreenshotOpts) error"
|
|
description: "Captura un screenshot de la pagina actual via Page.captureScreenshot y lo guarda en el archivo indicado. Soporta PNG y JPEG, viewport o pagina completa. En modo FullPage usa Page.getLayoutMetrics (cssContentSize) para construir un clip que cubre la altura real del documento. Crea el directorio destino si no existe. Compone sobre CdpScreenshotBytes para la captura a memoria."
|
|
tags: [chrome, cdp, browser, automation, screenshot, devtools, png, navegator]
|
|
uses_functions: [cdp_screenshot_bytes_go_browser]
|
|
uses_types: []
|
|
returns: []
|
|
returns_optional: false
|
|
error_type: "error_go_core"
|
|
imports: [encoding/base64, fmt, os, path/filepath]
|
|
params:
|
|
- name: c
|
|
desc: "conexión CDP activa"
|
|
- name: outputPath
|
|
desc: "ruta del archivo PNG/JPEG de salida"
|
|
- name: opts
|
|
desc: "opciones de captura (FullPage, Quality, Format)"
|
|
output: "error si falla la captura o la escritura del archivo"
|
|
tested: true
|
|
tests: ["TestBuildFullPageClip", "TestCdpScreenshot"]
|
|
test_file_path: "functions/browser/cdp_screenshot_test.go"
|
|
file_path: "functions/browser/cdp_screenshot.go"
|
|
---
|
|
|
|
## Ejemplo
|
|
|
|
```go
|
|
conn, _ := CdpConnect(9222)
|
|
CdpNavigate(conn, "https://example.com")
|
|
|
|
err := CdpScreenshot(conn, "/tmp/page.png", CdpScreenshotOpts{
|
|
FullPage: true,
|
|
Format: "png",
|
|
})
|
|
```
|
|
|
|
## Cuando usarla
|
|
|
|
Para guardar evidencia visual de una página tras navegar o ejecutar acciones. Usa `FullPage: true` cuando necesites toda la altura del documento (capturas de auditoría, scraping visual de páginas largas); `false` (default) para capturar solo el viewport visible, más rápido.
|
|
|
|
## Gotchas
|
|
|
|
- **FullPage usa el tamaño real del documento**: consulta `Page.getLayoutMetrics` y construye el clip desde `cssContentSize` (CSS pixels). Si Chrome no devuelve dimensiones válidas, cae a captura normal con `captureBeyondViewport=true` en vez de fallar.
|
|
- **Páginas con lazy-loading**: el `cssContentSize` refleja el DOM en el instante de la captura. Si la página carga contenido al hacer scroll, haz scroll + `CdpWaitIdle` antes para que la altura sea la final.
|
|
- **Formato según extensión**: la función no infiere el formato de la extensión del `outputPath`; pásalo explícito en `opts.Format` ("png" o "jpeg"). El default es "png".
|
|
- **JPEG quality**: solo aplica si `Format == "jpeg"`; el default es 80.
|
|
|
|
## Notas
|
|
|
|
El struct `CdpScreenshotOpts` tiene campos: `FullPage bool`, `Quality int` (JPEG), `Format string` ("png" o "jpeg"). Chrome retorna la imagen como base64 que se decodifica y escribe al disco.
|
|
|
|
## Capability growth log
|
|
|
|
- v1.2.0 (2026-06-06) — refactor a composición: toda la lógica de captura (enable/clip FullPage/captureScreenshot/decode base64) se extrae a `CdpScreenshotBytes` (`cdp_screenshot_bytes_go_browser`), que devuelve bytes + mimeType en memoria. `CdpScreenshot` ahora compone sobre ella + crea el directorio + escribe el archivo. Firma pública y comportamiento observable intactos.
|
|
- v1.1.0 (2026-06-06) — FullPage implementado de verdad: clip desde Page.getLayoutMetrics (cssContentSize) vía función pura `buildFullPageClip`, en vez del código muerto que calculaba scrollHeight y lo descartaba.
|