9798aed2cf
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>
3.3 KiB
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. |
|
|
false | error_go_core |
|
|
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.Statpase localmente (caso tipico: Chrome corriendo en otro usuario, contenedor o maquina remota via CDP). - La validacion
os.Statse ejecuta en la maquina donde corre esta funcion. Si el Chrome del CDP esta en otra maquina/contenedor, queos.Statpase 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
changepersonalizados mas alla de los que el propio CDP emite al asignar los archivos; si la pagina depende de listeners adicionales, comprueba el comportamiento.