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).
4.6 KiB
4.6 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 | ||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| prepare_chrome_profile | function | bash | browser | 1.0.0 | impure | prepare_chrome_profile --src <user-data-dir> --dst <user-data-dir> [--keep <ext_id>]... [--force] | Clona un user-data-dir de Chrome/Chromium creando un perfil de scraping limpio: conserva solo las extensiones de una lista blanca (por defecto uBlock Origin Lite) y excluye caché, locks y sesiones antiguas. |
|
false | error_go_core | false | bash/functions/browser/prepare_chrome_profile.sh |
|
JSON en stdout: {dst, kept: [id...], removed: [id...]}. Exit 0 en éxito. |
Ejemplo
source $HOME/fn_registry/bash/functions/browser/prepare_chrome_profile.sh
prepare_chrome_profile \
--src "$HOME/.config/chromium" \
--dst "$HOME/.local/share/web_scraping/chrome-profile"
# Con extensión adicional conservada
prepare_chrome_profile \
--src "$HOME/.config/chromium" \
--dst "$HOME/.local/share/web_scraping/chrome-profile" \
--keep "ddkjiahejlhfcafbddmgiahcphecmpfh" \
--keep "cjpalhdlnbpafiamejdnhcphjbkeiagm" \
--force
# Salida esperada (ejemplo):
# {"dst":"/home/enmanuel/.local/share/web_scraping/chrome-profile","kept":["ddkjiahejlhfcafbddmgiahcphecmpfh"],"removed":["abcdefghijklmnopabcdefghijklmnop","dark-reader-id"]}
Cuando usarla
Úsala antes de lanzar una sesión de scraping/automatización para partir de un perfil aislado: con uBlock Origin Lite activo (menos anuncios/trackers = DOM más limpio, respuestas más rápidas) pero sin extensiones que interfieren (Dark Reader muta colores del DOM, NoScript bloquea JS, OneTab modifica tabs). También sirve para aislar sesiones de diferentes proyectos de scraping sin contaminar el perfil personal.
Gotchas
- Chrome debe estar CERRADO sobre
--srcantes de ejecutar. Los archivos SQLite (Cookies,History,Login Data, etc.) estarán bloqueados si Chrome está abierto, yrsynccopiará versiones inconsistentes. Verificar conpgrep -x chromiumopgrep -x chrome. - HMAC de Secure Preferences: el archivo
Local Statecontiene la semilla HMAC que Chrome usa para verificarPreferencesySecure Preferences. Si no se copia (o se copia entre máquinas distintas con distinto binding), Chrome puede invalidar las extensiones al arrancar y resetear configuraciones. La función copiaLocal Stateautomáticamente, pero la copia entre máquinas puede seguir produciendo resets de extensiones — esto es comportamiento esperado de Chrome, no un bug de esta función. - Purga de referencias en Preferences: tras borrar las carpetas de extensiones fuera de la whitelist, la función también elimina con
python3las entradasextensions.settings.<id>deDefault/PreferencesyDefault/Secure Preferences, los IDs deextensions.pinned_extensionsy las clavesprotection.macs.extensions.settings.<id>. Sin esta limpieza Chrome detecta las entradas en Preferences (confrom_webstore/install_source) y vuelve a descargar la extensión del Web Store al arrancar, deshaciendo el filtrado (caso real: Dark Reader reaparece y oscurece páginas rompiendo screenshots). Sipython3falla al procesar un Preferences concreto se emite un warning a stderr pero la función no aborta — el borrado de carpetas ya es el efecto principal. --forceborra--dstcompletamente: si--dstes un perfil con datos que quieres conservar, no uses--forcesin antes hacer backup.- Extensiones instaladas desde Web Store vs unpacked: esta función opera sobre la carpeta
Extensions/física. Las extensiones instaladas desde la Web Store tienen IDs de 32 caracteres en minúsculas. Las extensiones unpacked (--load-extension) no viven enExtensions/y no se ven afectadas.
Exit codes
| Código | Significado |
|---|---|
| 0 | Éxito |
| 1 | Argumento inválido o --src/Default no existe |
| 2 | --dst ya existe y no se pasó --force |
| 3 | --src y --dst resuelven al mismo path real |
| 4 | Error durante rsync |