--- 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.