5b10b419a2
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
60 lines
2.9 KiB
Markdown
60 lines
2.9 KiB
Markdown
---
|
|
name: cdp_get_text
|
|
kind: function
|
|
lang: go
|
|
domain: browser
|
|
version: "1.0.0"
|
|
purity: impure
|
|
signature: "func CdpGetText(c *CDPConn, selector string, maxBytes int) (string, error)"
|
|
description: "Retorna el texto visible (innerText) de la pagina o de un elemento CSS, con truncado opcional. Alternativa compacta a cdp_get_html cuando solo se necesita el texto legible."
|
|
tags: [cdp, browser, read, perception, navegator]
|
|
uses_functions: [cdp_evaluate_go_browser]
|
|
uses_types: []
|
|
returns: []
|
|
returns_optional: false
|
|
error_type: "error_go_core"
|
|
imports: [encoding/json, fmt, unicode/utf8]
|
|
params:
|
|
- name: c
|
|
desc: "Conexion CDP activa a una tab de Chrome. Debe estar conectada a una tab tipo 'page'."
|
|
- name: selector
|
|
desc: "Selector CSS del elemento del que leer el innerText. Si es cadena vacia, lee document.body.innerText (toda la pagina)."
|
|
- name: maxBytes
|
|
desc: "Limite maximo de bytes del texto retornado. Si es <= 0 no hay limite. Si el texto supera el limite, se trunca con corte rune-safe y se añade un sufijo con el total original."
|
|
output: "Texto visible del elemento o de toda la pagina. Si maxBytes > 0 y el texto supera el limite, retorna el texto truncado con sufijo '…[truncado, total N bytes]'. Error si el selector no matchea ningun elemento o si la conexion falla."
|
|
tested: false
|
|
tests: []
|
|
test_file_path: ""
|
|
file_path: "functions/browser/cdp_get_text.go"
|
|
---
|
|
|
|
## Ejemplo
|
|
|
|
```go
|
|
// Leer todo el body con limite de 20000 bytes (apto para LLM)
|
|
text, err := CdpGetText(conn, "", 20000)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
fmt.Println(text)
|
|
|
|
// Leer un elemento concreto sin limite
|
|
price, err := CdpGetText(conn, ".product-price", 0)
|
|
if err != nil {
|
|
// err contiene "elemento no encontrado: .product-price" si no existe en el DOM
|
|
log.Fatal(err)
|
|
}
|
|
fmt.Println(price)
|
|
```
|
|
|
|
## Cuando usarla
|
|
|
|
Para que un LLM lea el contenido de una pagina sin reventar su ventana de contexto. Preferir sobre `cdp_get_html` cuando solo necesitas el texto — innerText es 5-50x mas compacto que el HTML crudo. Usar `selector` para acotar a la seccion relevante (articulo, tabla, formulario) y `maxBytes` para garantizar el presupuesto de tokens.
|
|
|
|
## Gotchas
|
|
|
|
- `innerText` solo devuelve el texto de nodos visibles: elementos con `display:none` o `visibility:hidden` quedan excluidos. Si necesitas leer contenido oculto usa `cdp_get_html` y parsea.
|
|
- El truncado corta en boundary de rune pero puede partir a media frase o a medio parrafo. Si necesitas preservar estructura semantica, ajusta `maxBytes` con margen o usa el selector para acotar la region.
|
|
- Requiere conexion activa a una tab de tipo `page` (no `background_page`, no `service_worker`). Tabs en estado de carga pueden devolver texto parcial; esperar con `cdp_wait_load` si el contenido es dinamico.
|
|
- El selector se escapa via `json.Marshal` — caracteres especiales como comillas simples, backslash o comillas dobles en el selector CSS son seguros.
|