Kage - Web sitelerinden JavaScript'i kaldırıp çevrimdışı arşivleyen araç
(github.com/tamnd)- Sayfayı headless Chrome ile render edip kullanıcının gördüğü son DOM'un anlık görüntüsünü alıyor; ardından tüm JavaScript'i kaldırıp CSS, görselleri ve fontları yerel yollara indirerek kod olmadan çalışan statik bir kopya oluşturuyor
- "Save As" ile kaydedilen sayfaların zamanla boş ekran, takılı spinner veya kaybolmuş analytics sunucusuna bağlanma girişimleri yüzünden bozulması sorununu çözüyor
- izleme, ağ çağrıları veya beklenmedik davranışlar olmadan diskten doğrudan açılabilen
.htmldosyaları sunuyor
- izleme, ağ çağrıları veya beklenmedik davranışlar olmadan diskten doğrudan açılabilen
- breadth-first crawling ile
robots.txtdosyasını okuyor, başlangıç noktalarınısitemap.xmliçinden alıyor ve seed host üzerinde kalıyor- idempotent yapısı sayesinde http/https fark etmeksizin veya sondaki slash olsun olmasın aynı sayfayı yalnızca bir kez alıyor
- Ctrl-C ile bulunduğu yeri kaydediyor ve yeniden çalıştırıldığında devam ediyor;
--refreshile yeniden render ediyor,--forceile baştan başlıyor
--max-pages,--max-depth,--scope-prefix,--subdomains,--scroll,--workersgibi crawl kapsamı ve davranışını kontrol eden flag'ler sunuyorkage packile kopyayı tek dosyada paketliyor; ZIM arşivi veya sitenin kendisi gibi çalışan bağımsız yürütülebilir dosya seçenekleri sunuyor- ZIM, Kiwix ekosistemiyle uyumlu; bu nedenle
kiwix-serveya da Kiwix masaüstü ve mobil uygulamalarında da görüntülenebiliyor - bağımsız binary sayesinde alıcının hiçbir şey kurması gerekmiyor ve
--baseile başka işletim sistemleri için viewer üretilebiliyor (yaklaşık 13 MiB + site boyutu)
- ZIM, Kiwix ekosistemiyle uyumlu; bu nedenle
- deterministik paketleme ile aynı kopyadan her zaman byte-identical dosyalar üretiyor; archive UUID'si içerikten türetildiği için checksum ve cache açısından güvenli
webviewetiketiyle build edildiğinde OS WebView'ını (WKWebView, WebView2, WebKitGTK) kullanarak tarayıcı sekmesi yerine kendi penceresinde açılıyor- İşleme hattı: seed URL → headless Chrome render → son DOM anlık görüntüsü → JS kaldırma → varlıkları yerelleştirme → diske kaydetme
- MIT lisansı
1 yorum
Hacker News görüşleri
README’deki demo GIF’in nasıl üretildiğini merak edip baktım: https://github.com/tamnd/kage/blob/01e75b87ecc893bbba7943c63...
Meğerse aynı yazarın başka bir projesi olan https://github.com/tamnd/ascii-gif kullanılmış.
Demoda kullanılan script de https://github.com/tamnd/kage/blob/01e75b87ecc893bbba7943c63... içinde ve çalıştırma yöntemi de yorum olarak eklenmiş:
ascii-gif render docs/demo/kage.tape -o docs/static/demo.gifhttps://github.com/charmbracelet/vhs için oldukça opinionated bir wrapper gibi görünüyor.
$HOME/bin/içinde de bu tarz epey kişisel binary var.delete-all-npm,clean-rust-cache,download-youtube-playlist,get-markdowngibi şeyler; komutları ezberlemek gerekmiyor, güzel yanı bu.Bazen kodlama ajanı bu araçların nasıl çağrılacağını da kendi kendine buluyor.
Şirket wikisine offline durumda da kolay erişim sağlamak istediğinizde bu işe yarayabilir. Mesela telefon sinyalinin çekmediği bir sahada, yararlı belgeler wikide olabilir.
Tüm siteyi tek bir binary içinde paketleyebilmesi çok hoş, ama özellikle ayrı bir serving process gerektirmeyen bir sürümü olsa daha da iyi olurdu.
Site içeriği arşivini, mümkünse gömülü şekilde, biraz JavaScript içeren tek bir HTML giriş noktası shim’i olarak sunmak da mümkün görünüyor.
Aklımda zaten HTML’i Markdown’a dönüştüren bir script/program var; yani pratikte her şeyi diskte Markdown dosyaları klasörü olarak saklayıp sonra bir Git deposuna commit etmek de mümkün olabilir.
Bu harika. Lovable gibi bir yerde yapılmış birinin prototipini offline bir kopya olarak indirip daha kolay bir biçimde sürümlemek ve paylaşmak istemiştim.
Bizim nasıl yaklaştığımızı burada yazmıştım: https://productnow.ai/blogs/extracting-html-from-ai-prototyp...
Şimdi buna bakıp bazı kısımları değiştirip değiştiremeyeceğime bakacağım. Offline mirror fikri hoşuma gitti ve işbirliğiyle ilgili kullanım senaryoları çok daha basit hale geliyor.
kage serve $HOME/data/kage/paulgraham.comyazıyor ama çıktı statikse neden bir sunucuya ihtiyaç var, anlamadım. Bunu tarayıcıda doğrudan açılabilir hale getiremez miyiz?Mesela
$ firefox $HOME/data/kage/paulgraham.comgibi çalışabilse, kage’in kurulu olmadığı makinelerde de çıktı kullanılabilir.python -m http.serverkullanılabilir gibi görünüyor. Henüz denemedim ama çalışması muhtemel.Aslında Kage iki parçadan oluşuyor. Biri, Chrome/Chromium render’ından sonra DOM’u yakalayıp sayfayı crawl eden ve temiz HTML’e dönüştüren crawler; diğeri ise sonucu Kiwix için ZIM dosyası ya da çalıştırılabilir dosya olarak paketleyen pack/serve bileşeni.
SingleFile [0] bunun çok daha sağlam bir sürümü gibi görünüyor
JavaScript’i de tamamen kaldırıyor ama her şeyi paylaşması kolay tek bir HTML dosyası içinde paketliyor. Web fontları veya görseller gibi ikili varlıklar base64 dizgeleri olarak gömülüyor
Puppeteer tabanlı bir CLI da sunuyor [1]
[0]: https://github.com/gildas-lormeau/singlefile
[1]: https://github.com/gildas-lormeau/single-file-cli
Burada yapılan şey ise alt sayfalar da dahil tüm web sitesini yansıtmak; yani çevrimdışıyken bile her yeri gezebiliyorsunuz. Örneğin paulgraham.com’daki tüm denemeler gibi
Ama Kage, SingleFile düzeyindeki yeniden üretim kalitesiyle HTTPTrack tarzı örümcek yaklaşımını birleştirebilirse umut verici görünüyor. Tek sayfa uygulamaları arşivlemek biraz zor; Kage’nin bunu ne kadar iyi ele alacağını merak ediyorum
File -> Save asyapmakla farkı ne?HTTP, yani HTTPS olmayan bir siteyi kopyalamayı denedim ama
navigation failed: net::ERR_NAME_NOT_RESOLVEDhatasını aldım. Protokolühttp://ile açıkça belirtince de aynı şey olduUçakta okumak için bir vikiyi indirirken httrack(https://www.httrack.com) kullanıyordum. Mükemmel değil ama daha önce bulduklarımdan daha iyiydi
Bunu da deneyeceğim; iyi sonuç verirse gerçekten çok sevinirim
https://wiki.openzim.org/wiki/Build_your_ZIM_file
DÜZENLEME: https://get.kiwix.org/en/solutions/applications/kiwix-reader...
Yıllar boyunca epey eski web sitesi arşivi biriktirdim. İlginç olan şu ki çirkin HTML dökümleri, “mükemmel” arşivlerden daha kullanışlı çıktı
Zamanla RSS’i daha çok sevmemin sebeplerinden biri de bu. Yaklaşık 10 yıllık feed’ler, özenle korunmuş uygulama benzeri web sitelerinden bugün çoğu zaman daha kolay kullanılabiliyor
Biraz toparladıktan sonra yakında açık kaynak olarak yayımlamayı planlıyorum
Bu, site üzerinde epey büyük bir yük oluşturma potansiyeline sahip gibi görünüyor. Kopyalama hızını ayarlamak veya görsel/video indirmemek için bir ayar var mı?
Web sitesinin yalnızca bir kısmını alma yöntemi olup olmadığını da merak ediyorum
Temiz bir proje ve fikrini beğendim
Hızlıca bakınca Chrome’u
--no-sandboxile çalıştırdığını gördüm; bunun özel bir nedeni var mı? Güvenlik açısından bu iyi bir fikir olmayabilir. Özel bir gerekçe yoksa sandbox’ı açık bırakmanı öneririmHer hâlükârda harika iş
--no-sandboxDocker’da gerekli. Muhtemelen çoğunlukla Docker içinde çalıştırılacağını varsaydın, değil mi?