Kage - Alat untuk menghapus JavaScript dari situs web dan mengarsipkannya secara offline
(github.com/tamnd)- Merender halaman dengan Headless Chrome untuk mengambil snapshot DOM final seperti yang dilihat manusia, lalu menghapus semua JavaScript dan mengunduh CSS, gambar, serta font ke jalur lokal guna membuat salinan statis yang berfungsi tanpa kode
- Menyelesaikan masalah halaman yang disimpan dengan "Save As" lalu rusak seiring waktu menjadi layar kosong, spinner macet, atau mencoba menghubungi server analytics yang sudah hilang
- Menyediakan file
.htmlyang bisa langsung dibuka dari disk tanpa pelacakan, panggilan jaringan, atau perilaku tak terduga
- Menyediakan file
- Menggunakan crawling breadth-first, membaca
robots.txt, menentukan titik awal darisitemap.xml, dan tetap berada di host seed- Memiliki sifat idempotent, sehingga halaman yang sama hanya diambil sekali, terlepas dari http·https atau ada tidaknya trailing slash
- Menyimpan posisi saat Ctrl-C dan melanjutkan saat dijalankan ulang, merender ulang dengan
--refresh, dan memulai baru dengan--force
- Menyediakan flag untuk mengatur cakupan dan perilaku crawling seperti
--max-pages,--max-depth,--scope-prefix,--subdomains,--scroll,--workers - Dengan
kage pack, salinan dapat dikemas menjadi satu file, dengan pilihan arsip ZIM atau file eksekusi mandiri yang juga berfungsi sebagai situs itu sendiri- ZIM kompatibel dengan ekosistem Kiwix sehingga dapat dibuka lewat
kiwix-servemaupun aplikasi desktop dan seluler Kiwix - Biner mandiri membuat penerima tidak perlu memasang apa pun, dan
--basedapat digunakan untuk membuat viewer untuk OS lain (sekitar 13 MiB + ukuran situs)
- ZIM kompatibel dengan ekosistem Kiwix sehingga dapat dibuka lewat
- Packing deterministik memastikan salinan yang sama selalu menghasilkan file yang identik byte demi byte, dengan UUID arsip diturunkan dari konten sehingga aman untuk checksum dan cache
- Jika dibangun dengan tag
webview, menggunakan WebView OS (WKWebView·WebView2·WebKitGTK) agar terbuka di jendela aplikasi sendiri, bukan tab browser - Pipeline pemrosesan: URL seed → render Headless Chrome → snapshot DOM final → hapus JS → lokalkan aset → simpan ke disk
- Lisensi MIT
1 komentar
Komentar Hacker News
Saya penasaran bagaimana GIF demo di README dibuat, jadi saya lihat: https://github.com/tamnd/kage/blob/01e75b87ecc893bbba7943c63...
Ternyata menggunakan proyek lain dari penulis yang sama, yaitu https://github.com/tamnd/ascii-gif
Skrip yang dipakai untuk demo ada di https://github.com/tamnd/kage/blob/01e75b87ecc893bbba7943c63..., dan cara menjalankannya juga ditulis sebagai komentar:
ascii-gif render docs/demo/kage.tape -o docs/static/demo.gifIni terlihat seperti wrapper yang sangat opinionated untuk https://github.com/charmbracelet/vhs
$HOME/bin/saya juga ada cukup banyak binary pribadi seperti ini. Misalnyadelete-all-npm,clean-rust-cache,download-youtube-playlist,get-markdown; enak karena tidak perlu menghafal perintahKadang agen coding juga bisa mencari sendiri bagaimana cara memanggil alat-alat seperti ini
Saya bisa melihat ini dipakai saat ingin membuat wiki perusahaan mudah diakses bahkan secara offline. Misalnya ada dokumentasi berguna di wiki yang diperlukan di lapangan saat sinyal ponsel tidak ada
Keren bahwa seluruh situs bisa dibundel menjadi satu binary, tetapi versi yang tidak memerlukan proses serving terpisah akan terasa sangat menarik
Tampaknya juga mungkin dibuat seperti shim titik masuk HTML tunggal dengan sedikit JavaScript untuk menelusuri arsip konten situs, idealnya dalam bentuk yang tertanam
Di kepala saya sudah ada skrip/program yang mengubah HTML menjadi Markdown, jadi secara praktis saya bahkan bisa menyimpan semuanya ke disk sebagai folder file Markdown lalu meng-commit-nya ke repositori Git
Ini luar biasa. Saya ingin mengambil prototipe buatan seseorang dari tempat seperti Lovable sebagai salinan offline, lalu mengelola versi dan membagikannya dalam format yang lebih mudah
Pendekatan yang kami ambil kami tulis di sini: https://productnow.ai/blogs/extracting-html-from-ai-prototyp...
Sekarang saya akan melihat ini dan mencoba apakah sebagian bisa diubah. Saya suka gagasan mirror offline, dan use case terkait kolaborasi jadi jauh lebih sederhana
Di situ tertulis
kage serve $HOME/data/kage/paulgraham.com, tetapi kalau hasilnya statis saya tidak paham kenapa perlu server. Tidak bisakah dibuat agar bisa langsung dibuka di browser?Misalnya kalau bisa seperti
$ firefox $HOME/data/kage/paulgraham.com, hasilnya akan bisa dipakai bahkan di mesin yang tidak memasang kagepython -m http.server. Saya belum mencobanya, tetapi sepertinya akan bekerjaSebenarnya Kage terdiri dari dua bagian. Satu adalah crawler yang merayapi halaman dan mengubahnya menjadi HTML bersih dengan menangkap DOM setelah dirender oleh Chrome/Chromium, dan yang lain adalah komponen pack/serve yang mengemas hasilnya menjadi file ZIM untuk Kiwix atau executable
Menurut saya SingleFile [0] adalah versi yang jauh lebih kokoh dari ini
JavaScript juga dihapus seluruhnya, tetapi semuanya dibundel menjadi satu file HTML yang mudah dibagikan. Aset biner seperti web font atau gambar dimasukkan sebagai string base64
Juga menyediakan CLI berbasis Puppeteer [1]
[0]: https://github.com/gildas-lormeau/singlefile
[1]: https://github.com/gildas-lormeau/single-file-cli
Yang sedang diimplementasikan di sini adalah pencerminan seluruh situs web termasuk subhalaman, jadi semuanya tetap bisa dijelajahi saat offline. Misalnya seperti semua esai di paulgraham.com
Namun jika Kage bisa menggabungkan kualitas reproduksi setingkat SingleFile dengan pendekatan perayapan ala HTTPTrack, ini tampak menjanjikan. Aplikasi satu halaman agak rumit untuk diarsipkan, jadi saya penasaran seberapa baik Kage akan menanganinya
File -> Save asdi browser web mana pun di komputer?Saya mencoba menggandakan situs HTTP, yaitu bukan HTTPS, tetapi muncul
navigation failed: net::ERR_NAME_NOT_RESOLVED. Bahkan saat protokolnya dinyatakan eksplisit denganhttp://, hasilnya tetap samaSaya biasa memakai httrack(https://www.httrack.com) saat mengunduh wiki untuk dibaca di pesawat. Tidak sempurna, tetapi lebih baik daripada hal-hal lain yang pernah saya temukan sebelumnya
Saya juga akan mencoba ini, dan akan sangat senang kalau hasilnya bagus
https://wiki.openzim.org/wiki/Build_your_ZIM_file
EDIT: https://get.kiwix.org/en/solutions/applications/kiwix-reader...
Selama bertahun-tahun saya mengumpulkan cukup banyak arsip situs web lama. Yang menarik, dump HTML yang jelek justru lebih berguna daripada arsip yang “sempurna”
Itu juga salah satu alasan saya makin menyukai RSS seiring waktu. Feed yang berusia sekitar 10 tahun sering kali lebih mudah dipakai hari ini daripada situs web berbentuk aplikasi yang diawetkan dengan susah payah
Setelah sedikit dirapikan, saya berencana segera merilisnya sebagai open source
Ini tampaknya berpotensi memberi beban yang cukup besar pada situs. Apakah ada pengaturan untuk mengendalikan kecepatan penyalinan atau menghindari gambar/video?
Saya juga penasaran apakah ada cara mengambil hanya sebagian dari situs web
Proyek yang rapi dan saya suka idenya
Sekilas saya lihat Chrome dijalankan dengan
--no-sandbox, apakah ada alasan khusus untuk itu? Dari sisi keamanan, itu kemungkinan bukan ide yang baik. Kalau tidak ada alasan, saya sarankan sandbox tetap diaktifkanBagaimanapun juga, kerja yang keren
--no-sandboxdiperlukan di Docker. Mungkin diasumsikan bahwa ini kebanyakan dijalankan di Docker?