Files
fn_registry/functions/browser/chrome_launch.md
T

3.8 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
chrome_launch function go browser 1.1.0 impure func ChromeLaunch(opts ChromeLaunchOpts) (int, error) Lanza Google Chrome con remote debugging habilitado en el puerto indicado. Busca chrome.exe en PATH (WSL2) o en rutas conocidas de Windows. En WSL2+chrome.exe, traduce UserDataDir a ruta Windows via wslpath e inyecta --remote-debugging-address=0.0.0.0 automaticamente. Espera hasta 15s a que el puerto CDP este listo antes de retornar. Retorna el PID del proceso.
chrome
cdp
browser
automation
wsl2
headless
navegator
false error_go_core
fmt
net
os
os/exec
regexp
strings
time
name desc
opts opciones de lanzamiento: Port (defecto 9222), UserDataDir (defecto /tmp/chrome-cdp-profile en Linux, C:\Users<USER>\AppData\Local\fn-chrome-cdp-profile en WSL2+exe), Headless, ChromePath, ExtraArgs
int: PID del proceso Chrome lanzado true
TestIsWSL2
TestTranslateUserDataDirForWindows
TestIsWindowsExe
TestFindChrome
TestChromeLaunchAndConnect
functions/browser/chrome_launch_test.go functions/browser/chrome_launch.go

Ejemplo

// Linux nativo (sin WSL2 o con Linux Chrome)
pid, err := ChromeLaunch(ChromeLaunchOpts{
    Port:     9222,
    Headless: true,
})
if err != nil {
    log.Fatal(err)
}
defer CdpClose(nil, pid)
// WSL2 → chrome.exe Windows: cero configuracion, todo automatico
// ChromeLaunch detecta WSL2+.exe, traduce user-data-dir y bind 0.0.0.0
pid, err := ChromeLaunch(ChromeLaunchOpts{})
if err != nil {
    log.Fatal(err)
}
// CDP listo en 127.0.0.1:9222 desde WSL2
conn, err := CdpConnect(9222)

Cuando usarla

Cuando necesites lanzar Chrome con CDP desde Go para automatizacion (scraping, tests, capturas). Usar antes de CdpConnect / CdpNavigate / CdpScreenshot. Funciona tanto en Linux nativo como en WSL2 apuntando al chrome.exe de Windows.

Gotchas

  • WSL2 + chrome.exe: la funcion detecta automaticamente WSL2 (/proc/version contiene "microsoft"/"WSL") y que el ejecutable es .exe. En ese caso:
    • UserDataDir vacio o con prefijo /tmp/ o /home/ se traduce via wslpath -w a ruta Windows. Por defecto: C:\Users\<USER>\AppData\Local\fn-chrome-cdp-profile.
    • Se inyecta --remote-debugging-address=0.0.0.0 para que Chrome sea accesible desde WSL2 vía 127.0.0.1:<port>.
    • waitCDPReady siempre espera usando 127.0.0.1 (WSL networking reenvía localhost → Windows).
  • wslpath debe estar disponible: se invoca como subproceso. Si falla, ChromeLaunch retorna error. wslpath es estándar en WSL2 desde Windows 10 1903+.
  • Chrome no cierra solo: el PID devuelto es el proceso Chrome. Usar CdpClose(nil, pid) o os.FindProcess(pid).Kill() para terminarlo.
  • Puerto ocupado: si el puerto ya está en uso por otra instancia de Chrome, waitCDPReady puede conectar al proceso previo. Usar puertos distintos por sesión.
  • Headless en Windows via WSL2: --headless=new --disable-gpu funciona bien con chrome.exe.

Notas

Busca Chrome en este orden:

  1. chrome.exe en PATH (disponible en WSL2 si Windows lo tiene en PATH)
  2. google-chrome / chromium-browser / chromium (Linux nativo)
  3. /mnt/c/Program Files/Google/Chrome/Application/chrome.exe
  4. /mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe

Los flags aplicados desactivan funcionalidades de red y actualizacion en segundo plano para entornos de automatizacion. En modo headless se agrega --headless=new --disable-gpu.

El struct ChromeLaunchOpts se define en el mismo archivo.

Capability growth log

  • v1.1.0 (2026-05-16) — auto-handle WSL2→Windows chrome.exe: translate user-data-dir via wslpath + inject --remote-debugging-address=0.0.0.0