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:
- 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. - Extracción via LLM — el comando
extractusa un modelo de lenguaje para parsear el contenido de la página en lenguaje natural, no con selectores CSS frágiles. - Interfaz de comandos simple — no hace falta escribir código Python para tareas básicas.
Instalación#
| |
Una vez instalado:
| |
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.
| |
--browser real#
Usa tu Chrome instalado (el que tienes en el sistema). Accede a tus perfiles reales.
| |
--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#
| |
extract — Extraer contenido con LLM#
Este es el comando estrella. Le dices en lenguaje natural qué quieres extraer y lo hace.
| |
El resultado es texto estructurado, no HTML crudo. Mucho más útil para scripts.
screenshot — Captura de pantalla#
| |
state — Estado actual del navegador#
| |
eval — Ejecutar JavaScript#
| |
click, type, scroll — Interacción directa#
| |
run / task — Modo agente completo#
| |
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#
| |
Extraer los últimos tweets#
| |
Ir al perfil de una persona específica#
| |
Leer un tweet específico#
| |
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:
| |
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#
| |
Desde un heartbeat de Alfred#
Cuando Alfred necesita leer algo de una web que requiere login, puede llamar a browser-use directamente:
| |
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:
| |
Casos de uso prácticos en el homelab#
Monitorización de precios#
| |
Leer newsletters que solo están en web#
| |
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:
| |
Morning briefing desde la terminal#
Tengo un script (/Users/luis/clawd/scripts/morning-briefing.sh) que:
- Abre X con mi sesión real
- Extrae los últimos 5 tweets del timeline
- Revisa alguna otra fuente
- Manda el resumen a Telegram via Alfred
Todo automatizable desde un cron o un heartbeat.
Cuándo usar browser-use vs otras herramientas#
| Situación | Herramienta recomendada |
|---|---|
| Web pública estática | web_fetch (más rápido) |
| Web pública con JS | browser-use chromium |
| Web con login activo | browser-use --browser real |
| Tarea compleja multi-paso | browser-use run (modo agente) |
| Automatización UI macOS | Peekaboo |
| Screenshots para análisis | browser-use screenshot + análisis imagen |
| APIs disponibles | API 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
realpuede 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#
| |
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.