Kage - Herramienta para eliminar JavaScript de sitios web y archivarlos sin conexión
(github.com/tamnd)- Genera una copia estática funcional sin código renderizando la página con Chrome sin interfaz para capturar una instantánea del DOM final que vería una persona, luego elimina todo el JavaScript y descarga CSS, imágenes y fuentes a rutas locales
- Resuelve el problema de las páginas guardadas con "Save As" que con el tiempo se rompen y terminan en una pantalla en blanco, un spinner congelado o intentando conectarse a servidores de analytics que ya no existen
- Proporciona archivos
.htmlque se abren directamente desde el disco, sin rastreo, llamadas de red ni comportamientos inesperados
- Proporciona archivos
- Usa rastreo en amplitud para leer
robots.txt, tomar puntos de inicio desdesitemap.xmly mantenerse dentro del host semilla- Gracias a su carácter idempotente, obtiene cada página solo una vez sin importar si usa http o https ni si tiene o no trailing slash
- Guarda la posición al presionar Ctrl-C y continúa al volver a ejecutarse;
--refreshvuelve a renderizar y--forceinicia desde cero
- Ofrece flags para controlar el alcance y comportamiento del rastreo como
--max-pages,--max-depth,--scope-prefix,--subdomains,--scrolly--workers - Con
kage packcomprime la copia en un solo archivo, con opción de archivo ZIM o ejecutable autónomo que funciona como el propio sitio- ZIM es compatible con el ecosistema Kiwix, por lo que también puede verse en
kiwix-serveo en las apps de escritorio y móviles de Kiwix - El binario autónomo no requiere que quien lo reciba instale nada, y con
--basepuede crear un visor para otro sistema operativo (aprox. 13 MiB + el tamaño del sitio)
- ZIM es compatible con el ecosistema Kiwix, por lo que también puede verse en
- El empaquetado determinista garantiza que una misma copia siempre produzca archivos idénticos byte por byte, y el UUID del archivo se deriva del contenido, por lo que es seguro para checksums y caché
- Al compilar con la etiqueta
webview, usa el WebView del sistema operativo (WKWebView, WebView2, WebKitGTK) para abrirse en su propia ventana en lugar de una pestaña del navegador - Flujo de procesamiento: URL semilla → renderizado con Chrome sin interfaz → instantánea del DOM final → eliminación de JS → localización de recursos → guardado en disco
- Licencia MIT
1 comentarios
Comentarios de Hacker News
Me dio curiosidad ver cómo se generó el GIF de demostración del README: https://github.com/tamnd/kage/blob/01e75b87ecc893bbba7943c63...
Resulta que usa otro proyecto del mismo autor: https://github.com/tamnd/ascii-gif
El script usado en la demo está en https://github.com/tamnd/kage/blob/01e75b87ecc893bbba7943c63..., y también incluye comentarios sobre cómo ejecutarlo:
ascii-gif render docs/demo/kage.tape -o docs/static/demo.gifParece una especie de wrapper muy opinionado alrededor de https://github.com/charmbracelet/vhs
$HOME/bin/. Cosas comodelete-all-npm,clean-rust-cache,download-youtube-playlist,get-markdown; está bueno no tener que memorizar comandosA veces incluso un agente de código encuentra por su cuenta cómo invocar estas herramientas
Esto podría servir cuando quieras que la wiki de la empresa sea fácil de consultar también sin conexión. Por ejemplo, podría haber documentación útil en la wiki para trabajo de campo donde no hay señal en el celular
Está genial que se pueda empaquetar todo un sitio en un solo binario, pero me gustaría todavía más una versión que no necesite un proceso de serving aparte
También parece posible algo como un shim con un único punto de entrada HTML que archive el contenido del sitio y, de ser posible de forma embebida, incluya un poco de JavaScript para buscarlo
Ya tengo en mente un script/programa que convierte HTML a Markdown, así que en realidad incluso podría guardar todo como una carpeta de archivos Markdown en disco y luego hacer commit a un repositorio Git
Esto está excelente. Quería poder tomar un prototipo hecho por alguien en algo como Lovable como copia offline, para versionarlo y compartirlo en un formato más fácil
El enfoque que tomamos está escrito aquí: https://productnow.ai/blogs/extracting-html-from-ai-prototyp...
Ahora voy a revisar esto para ver si puedo adaptar alguna parte. Me gusta la idea del mirror offline, y simplifica mucho más los casos de uso colaborativos
Dice
kage serve $HOME/data/kage/paulgraham.com, pero si el resultado es estático, no entiendo por qué hace falta un servidor. ¿No se puede hacer para que simplemente se abra en el navegador?Por ejemplo, si fuera posible algo como
$ firefox $HOME/data/kage/paulgraham.com, se podría usar el resultado incluso en una máquina sin kage instaladopython -m http.server. No lo he probado todavía, pero da la impresión de que funcionaríaEn realidad Kage tiene dos partes. Una es el crawler que, después del renderizado de Chrome/Chromium, captura el DOM, recorre las páginas y las convierte en HTML limpio; la otra es el componente de pack/serve que empaqueta el resultado como archivo ZIM para Kiwix o como ejecutable
Creo que SingleFile [0] es una versión mucho más sólida de esto
También elimina todo el JavaScript, pero empaqueta todo en un solo archivo HTML fácil de transferir. Los recursos binarios como fuentes web o imágenes se incluyen como cadenas en base64
También ofrece un CLI basado en Puppeteer [1]
[0]: https://github.com/gildas-lormeau/singlefile
[1]: https://github.com/gildas-lormeau/single-file-cli
Lo que se está implementando aquí es mirroring de un sitio web completo, incluyendo subpáginas, para poder navegarlo entero sin conexión. Por ejemplo, todos los ensayos de paulgraham.com
Pero si Kage puede combinar la calidad de reproducción de SingleFile con un enfoque de rastreo estilo HTTPTrack, se ve prometedor. Las aplicaciones de una sola página son algo difíciles de archivar, así que tengo curiosidad por ver qué tan bien las maneja Kage
File -> Save asen cualquier navegador web de la computadora?Intenté clonar un sitio HTTP, o sea, no HTTPS, pero me salió
navigation failed: net::ERR_NAME_NOT_RESOLVED. Incluso especificando el protocolo conhttp://pasó lo mismoHe usado httrack(https://www.httrack.com) para bajar wikis y leerlas en el avión. No es perfecto, pero me funcionó mejor que otras cosas que había encontrado antes
También voy a probar esto, y si da buenos resultados me pondría muy contento
https://wiki.openzim.org/wiki/Build_your_ZIM_file
EDIT: https://get.kiwix.org/en/solutions/applications/kiwix-reader...
Durante años he reunido bastantes archivos de sitios web antiguos. Lo interesante es que los volcados HTML feos resultaron más útiles que los archivos “perfectos”
Esa es una de las razones por las que con el tiempo me ha gustado más RSS. A menudo, un feed de hace unos 10 años hoy es más fácil de usar que un sitio web tipo aplicación cuidadosamente preservado
Planeo ordenarlo un poco y publicarlo como código abierto pronto
Parece que esto podría generar una carga bastante grande en los sitios. ¿Hay alguna opción para controlar la velocidad de clonación o evitar imágenes y video?
También me pregunto si hay alguna forma de traer solo una parte del sitio web
Proyecto limpio, y me gusta la idea
Leyéndolo rápido, veo que ejecuta Chrome con
--no-sandbox; ¿hay alguna razón para eso? Desde el punto de vista de seguridad, probablemente no sea una buena idea. Si no hay una razón, recomendaría dejar activado el sandboxDe todos modos, gran trabajo
--no-sandboxes necesario en Docker. ¿Será que asumieron que la mayoría lo iba a ejecutar en Docker?