ae841ceedb
Cinco funciones nuevas (dominio browser, grupo navegator) que cierran los gaps de gestión de perfiles, más un pipeline que las orquesta: - backup_chrome_bookmarks / restore_chrome_bookmarks: backup y restore de los archivos Bookmarks (copia byte a byte verbatim para preservar el checksum interno; en Chromium 148 los bookmarks no están bajo el super_mac de Secure Preferences). Guard por user-data-dir (no global). - delete_chrome_profile: borra la carpeta del perfil + limpia su entrada en Local State (info_cache, profiles_order, last_active_profiles, last_used). - create_chrome_profile: lanza chromium headless (vía systemd-run) para que la managed policy instale la whitelist de extensiones, y asigna el nombre legible en Local State. Mata todo el árbol de chromium del udd antes de editar Local State (los hijos zygote/gpu no repiten --user-data-dir pero referencian la ruta). - list_chrome_profile_extensions (Go): lista extensiones de un perfil con ID/name/version/location/enabled/fromPolicy. 7 unit tests. - reset_chrome_profiles (pipeline): backup -> cerrar chromium -> delete -> create -> restore -> verify. Destructivo (--yes), --dry-run seguro. Validado: unit tests Go verdes, backup/restore byte-idéntico, delete limpia Local State, create instala la forcelist global (uBlock + web_proxy) en perfiles nuevos.
5.9 KiB
5.9 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path, params, output
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | tested | tests | test_file_path | file_path | params | output | |||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| create_chrome_profile | function | bash | browser | 1.0.0 | impure | create_chrome_profile --user-data-dir <dir> --profile <dir-name> --name <legible> [--port N] [--chrome-path <path>] [--no-launch] [--timeout-sec N] [--dry-run] | Crea un perfil Chrome/Chromium nuevo en un user-data-dir: opcionalmente lanza chromium headless vía systemd-run para que la managed policy instale las extensiones forzadas (uBlock, web_proxy) y luego edita Local State para asignar el nombre legible al perfil. Con --no-launch crea solo la estructura de carpetas y la entrada en Local State sin arrancar Chrome. |
|
false | error_go_core | false | bash/functions/browser/create_chrome_profile.sh |
|
JSON en stdout: {"profile":"<dir-name>","name":"<legible>","launched":true|false,"preferences_created":true|false}. En dry-run añade "dry_run":true. Exit 0 en éxito. |
Ejemplo
source $HOME/fn_registry/bash/functions/browser/create_chrome_profile.sh
# Modo offline (no lanza Chrome, solo CRUD de Local State — seguro para tests)
create_chrome_profile \
--user-data-dir /tmp/test_udd \
--profile "Automation" \
--name "Aurgi Bot" \
--no-launch
# Salida: {"profile":"Automation","name":"Aurgi Bot","launched":false,"preferences_created":false}
# Modo normal: lanza headless para que la policy instale uBlock y web_proxy,
# luego asigna nombre en Local State
create_chrome_profile \
--user-data-dir "$HOME/.local/share/web_scraping/profiles" \
--profile "Profile 1" \
--name "Work" \
--port 9250
# Salida: {"profile":"Profile 1","name":"Work","launched":true,"preferences_created":true}
# Dry-run: describe acciones sin ejecutar nada
create_chrome_profile \
--user-data-dir "$HOME/.local/share/web_scraping/profiles" \
--profile "Default" \
--name "Scraping" \
--dry-run
Cuando usarla
Úsala para aprovisionar perfiles nuevos en un user-data-dir de automatización antes de lanzar sesiones CDP con script-navegador o funciones del grupo navegator. En modo normal (sin --no-launch) la managed policy instala automáticamente uBlock y la extensión web_proxy en el perfil nuevo; en --no-launch sirve para tests unitarios o para crear la entrada de Local State sin depender de Chrome.
Gotchas
- Lanzar chromium desde Bash tool de Claude da exit-144: la función usa
systemd-run --user --collectpara aislar el proceso en su propio cgroup, evitando que el harness del agente lo mate. Esto es obligatorio; lanzar con&/setsiddaría exit-144 en el contexto del agente. - La managed policy instala las extensiones al arrancar el perfil: NO pasar
--disable-extensions— rompería la forcelist. Las extensiones force-listed (ExtensionInstallForcelisten/etc/chromium/policies/managed/extensions.json) se instalan en el perfil durante el primer arranque; en el headless inicial puede no completar la descarga si no hay red o si el timeout es corto. - Dos chromium NO pueden compartir el mismo user-data-dir: si ya hay un chromium corriendo sobre
--user-data-dir, la función detectaSingletonLocky sale con exit 2 antes de lanzar. Para perfiles de automatización paralela, usa un--user-data-dirdedicado por perfil. - Local State debe editarse con Chrome muerto: la función para el unit de systemd y espera la desaparición de
SingletonLockantes de editarLocal State. Si se edita mientras Chrome está vivo, Chrome sobreescribe el archivo desde memoria al salir y los cambios de nombre se pierden. --remote-allow-origins=*necesita comillas en zsh: el glob*se expande si no va entre comillas. La función pasa el flag correctamente internamente, pero si lo pasas tú en otros scripts acuérdate de las comillas.- Perfil diario en
~/.config/chromium-cdp: en este equipo el fragmento/etc/chromium.d/cdpredirige el user-data-dir global a~/.config/chromium-cdp. Para automatización usar siempre un--user-data-dirdedicado fuera de~/.config/. - Timeout corto puede dar
preferences_created: false: el perfil headless tarda entre 2-8 segundos en crearPreferencessegún la carga del sistema. Si se aumenta--timeout-seca 45-60 en máquinas lentas se evitan falsos timeouts.
Exit codes
| Código | Significado |
|---|---|
| 0 | Éxito |
| 1 | Argumento obligatorio faltante o binario no encontrado |
| 2 | Lock: ya hay un chromium usando el mismo user-data-dir |
| 3 | Timeout esperando a que Preferences se cree |
| 4 | Error editando Local State (JSON inválido tras escritura) |