Files
fn_registry/functions/browser/cdp_set_file_input.md
T
Egutierrez 9798aed2cf feat(browser): cdp_collect_console + cdp_print_pdf + cdp_select_option + cdp_set_file_input
Cuatro primitivas CDP nuevas para el dominio browser, base de nuevas tools del
browser_mcp:
- cdp_collect_console: snapshot temporal de console + exceptions + log entries
- cdp_print_pdf: Page.printToPDF -> []byte
- cdp_select_option: selecciona <option> en un <select> y dispara input/change
- cdp_set_file_input: sube archivos a un <input type=file> via DOM.setFileInputFiles

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 20:21:46 +02:00

3.3 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path file_path
cdp_set_file_input function go browser 1.0.0 impure func CdpSetFileInput(c *CDPConn, selector string, paths []string) error Sube archivos a un <input type="file"> identificado por selector CSS, sin abrir el dialogo nativo de seleccion de archivos. Resuelve el nodo via DOM.getDocument + DOM.querySelector y asigna los archivos con DOM.setFileInputFiles. Valida con os.Stat que cada path exista en disco antes de tocar el DOM.
chrome
cdp
browser
automation
upload
file
input
form
dom
devtools
cdp_connect_go_browser
false error_go_core
fmt
os
name desc
c conexión CDP activa (*CDPConn)
name desc
selector selector CSS del <input type="file"> destino (ej. 'input[type=file]', '#avatar')
name desc
paths rutas absolutas de los archivos a subir; cada una debe existir y ser accesible por el proceso Chrome
error si algún path no existe, si el selector no coincide con ningún nodo, o si falla el comando CDP; nil si los archivos quedaron asignados al input false
functions/browser/cdp_set_file_input.go

Ejemplo

conn, _ := CdpConnect(9222)
CdpNavigate(conn, "https://example.com/upload")

// Subir un solo archivo
err := CdpSetFileInput(conn, "input[type=file]", []string{"/home/enmanuel/docs/cv.pdf"})
if err != nil {
    log.Fatal(err)
}

// Subir varios archivos a un input con multiple
err = CdpSetFileInput(conn, "#gallery", []string{
    "/home/enmanuel/fotos/1.jpg",
    "/home/enmanuel/fotos/2.jpg",
})
if err != nil {
    log.Fatal(err)
}

Cuando usarla

Cuando automatices un formulario web de subida de archivos y necesites rellenar un <input type="file"> sin poder interactuar con el dialogo nativo del sistema operativo (que CDP no puede manejar haciendo click). Llamala despues de navegar a la pagina y de que el input exista en el DOM; combina con CdpWaitElement si el input aparece de forma dinamica.

Gotchas

  • Los paths deben ser ABSOLUTOS y accesibles por el proceso de Chrome, no por este programa. Chrome lee los archivos desde su propio contexto/usuario; un path relativo o un archivo en un directorio que Chrome no puede leer fallara en el navegador aunque os.Stat pase localmente (caso tipico: Chrome corriendo en otro usuario, contenedor o maquina remota via CDP).
  • La validacion os.Stat se ejecuta en la maquina donde corre esta funcion. Si el Chrome del CDP esta en otra maquina/contenedor, que os.Stat pase NO garantiza que Chrome encuentre el archivo. En ese escenario los paths deben ser validos en el filesystem de Chrome.
  • El selector debe apuntar a un <input type="file"> real. Apuntar a un boton o label que dispara el dialogo nativo no funciona: hay que resolver el input subyacente.
  • Asignar mas de un archivo requiere que el input tenga el atributo multiple; si no lo tiene, Chrome puede rechazar o quedarse solo con el primero.
  • No dispara automaticamente el submit del formulario ni eventos change personalizados mas alla de los que el propio CDP emite al asignar los archivos; si la pagina depende de listeners adicionales, comprueba el comportamiento.