Ir al contenido
  1. Posts/

Browser Use CLI: automatiza tu navegador desde la terminal (y sí, funciona con tus sesiones de Chrome)

·1597 palabras·8 mins
Tabla de contenido

Llevo años peleándome con scrapers que fallan en la mitad de las webs. Curl y wget para páginas estáticas, Playwright para las que necesitan JavaScript, Selenium para las que son especialmente cabronas… y siempre el mismo problema: login. Si la página necesita que estés autenticado, la cosa se complica bastante.

La semana pasada instalé browser-use CLI y cambió bastante el panorama. No es magia, pero es la herramienta más práctica que he encontrado para automatizar el navegador desde la terminal de una forma sencilla y que además puede usar tus sesiones reales de Chrome. Sin configurar credenciales. Sin gestionar cookies manualmente.

Qué es browser-use
#

browser-use es una librería Python que empezó como framework para agentes de IA que necesitan navegar por la web. La idea original era darle a los LLMs la capacidad de “usar el navegador” de forma autónoma. Pero lo que me interesa a mí no es tanto el modo agente como la CLI que viene con ella, que te permite controlar el navegador directamente desde scripts de bash.

Lo que lo diferencia de alternativas como Playwright o Puppeteer:

  1. Modo --browser real — usa tu Chrome instalado con todos tus perfiles y sesiones activas. No chromium headless de cero, sino tu navegador con tus cookies.
  2. Extracción via LLM — el comando extract usa un modelo de lenguaje para parsear el contenido de la página en lenguaje natural, no con selectores CSS frágiles.
  3. Interfaz de comandos simple — no hace falta escribir código Python para tareas básicas.

Instalación
#

1
2
3
pip install browser-use
# o si usas pipx (recomendado para no contaminar el entorno global)
pipx install browser-use

Una vez instalado:

1
2
3
4
5
6
7
8
# Verificar que todo está OK
browser-use doctor

# Instalar Chromium si no tienes Chrome real
browser-use install

# Ver todos los comandos disponibles
browser-use --help

Los 3 modos de navegador
#

Esto es lo más importante a entender:

--browser chromium (por defecto)
#

Arranca un Chromium limpio, sin sesiones, sin cookies previas. Útil para webs públicas que no requieren login.

1
browser-use open "https://example.com"

--browser real
#

Usa tu Chrome instalado (el que tienes en el sistema). Accede a tus perfiles reales.

1
2
browser-use --browser real open "https://x.com"
# Se abre con tu sesión de X activa

--browser remote
#

Se conecta a un Chrome que ya está corriendo con debugging habilitado. Útil para integraciones más complejas.

Los comandos que más uso
#

open — Navegar a una URL
#

1
2
3
4
5
6
7
browser-use open "https://example.com"

# Con navegador real y perfil específico
browser-use --browser real --profile "Default" open "https://x.com/home"

# Con interfaz visible (no headless)
browser-use --headed open "https://example.com"

extract — Extraer contenido con LLM
#

Este es el comando estrella. Le dices en lenguaje natural qué quieres extraer y lo hace.

1
2
3
4
5
# Necesita API key (Anthropic, OpenAI, etc.)
export ANTHROPIC_API_KEY="sk-..."

browser-use --browser real open "https://x.com/home"
browser-use --browser real extract "Los últimos 5 tweets del timeline con autor, texto y hora"

El resultado es texto estructurado, no HTML crudo. Mucho más útil para scripts.

screenshot — Captura de pantalla
#

1
2
browser-use screenshot
browser-use screenshot --output /tmp/captura.png

state — Estado actual del navegador
#

1
2
# Ver URL actual, título, y elementos interactivos
browser-use state

eval — Ejecutar JavaScript
#

1
2
browser-use eval "document.title"
browser-use eval "document.querySelectorAll('article').length"

click, type, scroll — Interacción directa
#

1
2
3
4
5
6
7
8
# Hacer click en un elemento por índice (que muestra 'state')
browser-use click 3

# Escribir texto
browser-use type "texto a escribir"

# Scroll
browser-use scroll down 500

run / task — Modo agente completo
#

1
2
# Delegar una tarea completa a un agente IA
browser-use --api-key $ANTHROPIC_API_KEY run "Ve a x.com, lee los últimos 10 tweets de @lexfridman y dame un resumen"

Ejemplo real: leer el timeline de X
#

Este es el caso que me motivó a instalarlo. X/Twitter bloquea scrapers, pero si tienes sesión activa en Chrome ya tienes todo lo que necesitas.

Caso básico — ver la página
#

1
2
3
4
5
# Abrir con tu sesión real de Chrome
browser-use --browser real open "https://x.com/home"

# Ver el estado (URLs, elementos)
browser-use --browser real state

Extraer los últimos tweets
#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/bin/bash
# Requiere ANTHROPIC_API_KEY exportada

browser-use --browser real open "https://x.com/home"
sleep 2  # Dar tiempo a que cargue el JS

browser-use --browser real extract "
Extrae los primeros 5 tweets del timeline con este formato para cada uno:
- Autor: @handle
- Texto: contenido del tweet
- Hora: cuándo se publicó
Devuelve los 5 en texto plano, uno por línea.
"

Ir al perfil de una persona específica
#

1
2
browser-use --browser real open "https://x.com/therealadamg"
browser-use --browser real extract "Los últimos 3 tweets de este perfil con fecha y texto"

Leer un tweet específico
#

1
2
browser-use --browser real open "https://x.com/therealadamg/status/2035183670944842172"
browser-use --browser real extract "El texto completo del tweet principal y las respuestas más relevantes"

Esto es exactamente lo que no puedo hacer con curl o web_fetch. El tweet necesita login, y browser-use con --browser real lo tiene.

Trabajar con perfiles de Chrome
#

Si tienes varios perfiles de Chrome (trabajo, personal, etc.) puedes especificar cuál usar:

1
2
3
4
5
6
# Ver los perfiles disponibles
browser-use profile list

# Usar un perfil específico
browser-use --browser real --profile "Trabajo" open "https://gmail.com"
browser-use --browser real --profile "Default" open "https://x.com"

Los perfiles están en ~/Library/Application Support/Google/Chrome/ en macOS.

Integración con scripts de automatización
#

Script básico de extracción
#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#!/bin/bash
# /Users/luis/clawd/scripts/extract-web.sh

URL="${1}"
QUERY="${2:-Extrae el contenido principal de esta página}"

if [ -z "$URL" ]; then
  echo "Uso: $0 <url> [query]"
  exit 1
fi

browser-use --browser real open "$URL"
sleep 2
browser-use --browser real extract "$QUERY"

Desde un heartbeat de Alfred
#

Cuando Alfred necesita leer algo de una web que requiere login, puede llamar a browser-use directamente:

1
2
3
4
# En cualquier script de Alfred
browser-use --browser real open "https://x.com/home"
CONTENT=$(browser-use --browser real extract "Los últimos 5 tweets del timeline")
echo "$CONTENT"

Modo headless vs headed
#

Por defecto browser-use corre en modo headless (sin ventana visible). Si estás debuggeando o quieres ver qué hace, usa --headed:

1
browser-use --headed --browser real open "https://x.com/home"

Casos de uso prácticos en el homelab
#

Monitorización de precios
#

1
2
browser-use open "https://www.pccomponentes.com/producto"
browser-use extract "El precio actual del producto y si hay oferta"

Leer newsletters que solo están en web
#

1
2
browser-use --browser real open "https://substack.com"
browser-use --browser real extract "Los últimos 3 artículos con título, autor y resumen"

Automatizar login en paneles sin API
#

Hay algunos servicios en el homelab sin API decente (algunos dashboards, paneles de facturación…). Con browser-use puedo interactuar:

1
2
3
4
5
6
7
browser-use open "https://panel.ejemplo.com/login"
browser-use type "[email protected]"
browser-use click 2  # botón siguiente
browser-use type "contraseña"
browser-use click 3  # botón login
sleep 1
browser-use extract "Estado de la cuenta y próxima factura"

Morning briefing desde la terminal
#

Tengo un script (/Users/luis/clawd/scripts/morning-briefing.sh) que:

  1. Abre X con mi sesión real
  2. Extrae los últimos 5 tweets del timeline
  3. Revisa alguna otra fuente
  4. Manda el resumen a Telegram via Alfred

Todo automatizable desde un cron o un heartbeat.

Cuándo usar browser-use vs otras herramientas
#

SituaciónHerramienta recomendada
Web pública estáticaweb_fetch (más rápido)
Web pública con JSbrowser-use chromium
Web con login activobrowser-use --browser real
Tarea compleja multi-pasobrowser-use run (modo agente)
Automatización UI macOSPeekaboo
Screenshots para análisisbrowser-use screenshot + análisis imagen
APIs disponiblesAPI directamente (siempre mejor)

La regla general: si la web tiene API, úsala. Si no tiene API pero es pública, web_fetch es más rápido y fiable. Si necesitas sesión activa o interacción compleja, browser-use --browser real es la mejor opción.

Limitaciones que he encontrado
#

Siendo honesto, tiene sus cosas:

  • El modo agente necesita API key y consume tokens. Para extracción simple a veces es excesivo.
  • El modo real puede interferir con el Chrome que tienes abierto si está usando el mismo perfil.
  • No es el más rápido. Arrancar Chromium tiene overhead. Para scraping masivo hay mejores opciones.
  • La extracción LLM no es determinista. El mismo prompt puede dar resultados ligeramente distintos.

Para tareas de una sola extracción puntual, funciona muy bien. Para cosas que corren 100 veces al día, buscaría alternativas más ligeras.

Instalación y configuración completa
#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Instalar
pipx install browser-use

# Instalar Chromium si no tienes Chrome real
browser-use install

# Configurar API key por defecto (para modo run/extract)
# En ~/.zshrc o ~/.bashrc:
export ANTHROPIC_API_KEY="sk-ant-..."
# O para OpenAI:
export OPENAI_API_KEY="sk-..."

# Verificar instalación
browser-use doctor

Conclusión
#

browser-use resuelve un problema real: automatizar webs que necesitan login activo sin tener que gestionar credenciales manualmente. El truco de --browser real es lo que lo diferencia de Playwright y similares.

No va a reemplazar a herramientas especializadas para casos intensivos, pero para automatizaciones puntuales en el homelab (morning briefing, monitorización de precios, leer contenido de webs con login) es exactamente lo que necesitaba.

Lo tengo ya integrado en mis scripts de Alfred y en el pipeline de morning briefing. El siguiente paso es probarlo para leer métricas de dashboards que no tienen API y mandárselas a Telegram directamente.


¿Lo has probado? ¿Tienes algún caso de uso interesante? Cuéntamelo en los comentarios.