Probé el navegador del que todo el mundo habla contra mi propia web (y esto pasó)
La avalancha
Con la IA ahora sale algo nuevo cada mañana. Frameworks, agentes, motores, "esto lo cambia todo". Es literalmente imposible verlo todo, y el que diga que está al día de absolutamente todo, miente o no duerme.
Esta herramienta la miré por una razón muy simple: un compañero de trabajo me la soltó esta mañana. "Oye, mira esto, un navegador headless para agentes que se come el Chrome en RAM". Y como yo hago backend de web y el front es una parte clave de lo que toco, me piqué. Así que en lugar de tragarme el hype o ignorarlo, hice lo único sensato: probarlo contra mi propio caso real. Mi propia web, que casualmente es justo el tipo de bicho donde estas cosas se caen: una SPA.
Spoiler: merece la pena estar atento, pero a día de hoy es hype.
Qué es Obscura
Obscura se vende como "el navegador headless open source para agentes de IA y scraping". Escrito en Rust, compatible con el Chrome DevTools Protocol (CDP), o sea drop-in de Chrome headless para Puppeteer y Playwright. Sus números de folleto son de los que llaman la atención:
- Arranca sesiones en menos de 50 ms.
- ~30 MB de RAM frente a los +200 MB de Chrome.
- Aislamiento total entre sesiones, "10x más ligero".
Encima está en racha: casi 20.000 estrellas en GitHub en tres semanas. Apache 2.0, el código fuente entero en Rust a la vista, imagen Docker distroless. Sobre el papel, un caramelo para lanzar mil sesiones headless (tests, scraping, pre-render) sin fundir la máquina.
Por qué no me fié a la primera
Que un proyecto pase de cero a 20k estrellas en tres semanas, con un autor anónimo detrás y una nube de repos clon con cuentas raras alrededor, es exactamente el caldo de cultivo del typosquatting y el malware de cadena de suministro. Y un binario que ejecuta JavaScript arbitrario con modo "anti-detección" es la superficie de ataque soñada si alguien mete mano.
Así que no lo instalé en mi máquina a pelo. Lo metí en una jaula.
Catarlo sin abrir la puerta de casa
La regla fue simple: probarlo de verdad sin darle acceso a nada que importe.
- Contenedor Docker efímero, nada de montar credenciales, llaves ni datos.
- Sin privilegios: se le quitan todas las capabilities, no puede escalar, root fuera, sistema de ficheros de solo lectura, límites de CPU y RAM.
- Red controlada: una red aislada que puede salir a internet por NAT pero tiene cortado por firewall el acceso a la red local y a la VPN. Que pueda abrir una web, pero no ver a sus vecinos.
- Al terminar, se borra todo: contenedor, red y reglas. Ni rastro.
Con esa jaula, el peor caso de un binario travieso se reduce a "gasta CPU y sale a internet". Asumible para una cata.
Lo que sí funciona (y bien)
Primera prueba, una web estática de toda la vida (example.com), conectando con Playwright por CDP,
que es justo como lo usaría en el trabajo:
TITLE :: Example Domain
H1 :: Example Domain
RAM :: 28 MB con la página cargada (2,4 MB en reposo)
Funciona. Playwright se conecta, navega, renderiza el DOM y saca el título y el contenido. Y sí: en reposo se come 2,4 MB de RAM. Chrome headless con Playwright se te va a 150-300 MB fácil. La diferencia es brutal.
Lo que NO funciona: mi propia web
Aquí está la prueba de fuego. Mi web (esta misma) es una SPA: si pides el HTML en crudo, sin ejecutar JavaScript, no hay nada. Todo lo monta el JS en el navegador. Justo el escenario donde un navegador headless de verdad se gana el sueldo.
Le tiré Obscura, esperando de sobra a que el JavaScript montara la página:
htmlLen: 492 <- el HTML entero: 492 caracteres (el cascarón vacío)
bodyChildren: 1 <- solo el <div root>, vacío
rootHTML: 0 <- el #root NO tiene nada dentro
scripts: 2 <- hay scripts... pero no montaron la app
hasReact: False
Pilló el título de la pestaña, pero el contenido no apareció. El
#root se quedó a cero. Obscura cargó el
cascarón de la SPA y se quedó en la puerta: el JavaScript que construye
la aplicación no llegó a ejecutarse de verdad.
Con HTML estático, perfecto. Con una SPA real, no monta nada.
El truco de la ligereza
Y aquí cae la ficha. Esos "2,4 MB, 10x más ligero que Chrome" tienen trampa: es ligero porque hace mucho menos. No está ejecutando un motor completo que renderiza tu aplicación de JavaScript; se queda mucho antes. No es magia, es que no llega. Un navegador que de verdad renderiza una SPA moderna no cabe en 3 MB, y punto.
Que quede claro: no dudo de que en su versión 0.1.x vaya mejorando. Pero hoy, el número bonito
de RAM es bonito precisamente porque no está haciendo el trabajo
duro.
Veredicto
- Para scraping de HTML estático o SSR, extraer metadatos, chequeos rápidos: interesante de verdad. Ligero, rápido, compatible con Playwright, se contiene sin problema.
- Para front / SPAs con JavaScript de verdad (lo mío, y probablemente lo tuyo): hoy no. Se queda corto donde más falta hace.
- Como proyecto: prometedor y a seguir de cerca. Rust, licencia limpia, código a la vista. En unas cuantas versiones puede ser otra cosa.
Estar atento, sí. Cambiar tu stack hoy, no.
La moraleja, que es lo que de verdad importa
Con la que está cayendo en IA, el filtro no es leer treinta hilos ni contar estrellas de GitHub. El filtro es probarlo tú contra tu caso real. Diez minutos metiéndolo en una jaula y tirándole a mi propia web me dijeron más que todo el hype junto: para lo mío, todavía no.
Gracias al compañero por el chivatazo igualmente. Estar atento a lo nuevo está bien. Tragárselo entero, no. Y probar antes de creer, siempre.
Comentarios (0)
Sin comentarios todavia. Se el primero!
Deja un comentario