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.0 KiB
3.0 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_select_option | function | go | browser | 1.0.0 | impure | func CdpSelectOption(c *CDPConn, selector string, value string) error | Selecciona la <option> de un <select> (localizado por selector CSS) cuyo value coincide con el valor dado; si ningun value coincide, busca por texto visible de la option. Tras setear select.value despacha los eventos 'input' y 'change' con bubbles:true para que frameworks (React/Vue) reaccionen al cambio. Via Runtime.evaluate, reusa CdpEvaluate. |
|
|
false | error_go_core |
|
|
error si el select no existe ("select not found") o ninguna option coincide por value ni por texto ("option not found"); nil si la selección y los eventos se despacharon correctamente | false | functions/browser/cdp_select_option.go |
Ejemplo
conn, _ := CdpConnect(9222)
CdpNavigate(conn, "https://example.com/form")
// Seleccionar por value
if err := CdpSelectOption(conn, "#country", "ES"); err != nil {
log.Fatal(err)
}
// Seleccionar por texto visible cuando no se conoce el value interno
if err := CdpSelectOption(conn, "select[name=lang]", "Español"); err != nil {
log.Fatal(err)
}
Cuando usarla
Usala cuando necesites elegir una opcion de un <select> nativo en un formulario
web y quieras que un framework (React, Vue, Angular) reaccione al cambio. Es la
forma robusta de rellenar dropdowns durante automatizacion/scraping: a diferencia
de un click sobre la option, setea select.value y dispara input+change, que
es lo que los frameworks escuchan. Combinala con CdpClick para enviar el
formulario despues.
Gotchas
- Solo funciona con
<select>nativos (HTML). Dropdowns custom hechos con<div>- JS (ej. react-select, headlessui) NO son
<select>reales: para esos hay que clickar y elegir la opcion del menu desplegado, no usar esta funcion.
- JS (ej. react-select, headlessui) NO son
- El match por value es exacto (
===); el fallback por texto comparatextContenttrimeado de forma exacta tras.trim()(no substring, no case-insensitive). - No hace scroll ni verifica visibilidad: opera sobre el DOM directamente. Si el
<select>esta deshabilitado (disabled), el value se setea igual pero la UI puede ignorarlo segun el framework. - Para
<select multiple>solo selecciona una opcion (la que coincide) y resetea el resto, porque seteaselect.value(no añade aselectedOptions). - Si el elemento aun no existe (carga dinamica), retorna "select not found" sin
esperar — combinar con
CdpWaitElementpara elementos diferidos.