ccfa5bc78b
Funciones nuevas del dominio browser (grupo navegator): - cdp_move_mouse_human / cdp_click_human: movimiento de raton con curva de Bezier cubica, easing y micro-jitter para imitar comportamiento humano y reducir deteccion de automatizacion. - cdp_wait_idle: espera network-idle contando requests en vuelo via eventos CDP Network.*; inmune a extensiones que mutan el DOM (Dark Reader, uBlock) y a animaciones JS. - list_chrome_profiles: lista perfiles de un user-data-dir (extensiones, nombre legible, preferencias). - prepare_chrome_profile (bash): clona un user-data-dir conservando solo una whitelist de extensiones (default uBlock Origin Lite). Modificadas: - chrome_launch: Linux-first (chromium/google-chrome/brave antes que chrome.exe), KeepExtensions y Setpgid para matar el arbol con cdp_close. - cdp_close: kill por grupo de proceso. Todas con tests verdes (go test ./functions/browser ok).
3.1 KiB
3.1 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 | |||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| list_chrome_profiles | function | go | browser | 1.0.0 | impure | func ListChromeProfiles(userDataDir string) ([]ChromeProfile, error) | Lista los perfiles de un user-data-dir de Chrome/Chromium. Devuelve Dir (nombre del directorio para --profile-directory), Name (nombre legible de Local State), Extensions (nº de carpetas en Extensions excl. Temp) y HasPreferences. Si userDataDir es vacío usa ~/.config/chromium. |
|
false | error_go_core |
|
|
Slice de ChromeProfile ordenado por Dir. Error si userDataDir no existe o no es legible. | true |
|
functions/browser/list_chrome_profiles_test.go | functions/browser/list_chrome_profiles.go |
Ejemplo
// Lista todos los perfiles del Chromium del usuario
profiles, err := browser.ListChromeProfiles("")
if err != nil {
log.Fatal(err)
}
for _, p := range profiles {
fmt.Printf("--profile-directory=%q name=%q extensions=%d\n",
p.Dir, p.Name, p.Extensions)
}
// Output:
// --profile-directory="Automation" name="Automation" extensions=1
// --profile-directory="Default" name="Personal" extensions=12
// --profile-directory="Profile 1" name="Work" extensions=4
// Con ruta explícita (ej. Chrome en ubicación no estándar)
profiles, err = browser.ListChromeProfiles("/home/user/.config/google-chrome")
Cuando usarla
Antes de lanzar Chrome/Chromium con chrome_launch_go_browser cuando hay múltiples perfiles y quieres pasar --profile-directory al proceso. Sin elegir perfil, Chrome queda bloqueado en el selector de cuentas.
Gotchas
- Conteo de extensiones es de carpetas, no de extensiones activas. Las carpetas de extensiones deshabilitadas o desinstaladas permanecen en disco (cache de Chrome) y se cuentan igualmente. El número es un indicador aproximado de actividad del perfil, no una lista exacta de extensiones habilitadas.
- Local State puede no existir si el perfil es nuevo o fue creado manualmente. En ese caso
Namecae al valor deDir(sin error). - Profile Directory ≠ Profile Name. El argumento
--profile-directorydel binario Chrome acepta el valor deChromeProfile.Dir(ej."Profile 1"), no elNamelegible. - "System Profile" existe en Chrome pero no es un perfil de usuario; siempre se excluye.
- En Chrome (Google) el default suele ser
~/.config/google-chrome; en Chromium~/.config/chromium. Pasar ruta explícita si se usa Google Chrome.