26 ポイント 投稿者 GN⁺ 2024-03-25 | 3件のコメント | WhatsAppで共有
  • Webページを単一のHTMLファイルにバンドル
  • 既存の「ページを保存」機能とは異なり、monolithは対象ドキュメントだけでなく、CSS、画像、JavaScriptアセットを一度に含めて保存
  • すべてのアセットをデータURLとして埋め込み、ネットワーク接続がない状態でもインターネット上とまったく同じようにページをレンダリングできるようにする
  • Rustで書かれており、macOS/Windows/Linuxのすべてでインストール可能: cargo/brew/choco/snap/apk..

使い方

オプション

  • -a: オーディオソースを除外
  • -b: カスタムのbase URLを使用
  • -B: 特定ドメインからのアセット取得を禁止
  • -c: CSSを除外
  • -C: fileからCookieを読み込む
  • -d: 指定したdomain(s)からのみアセット取得を許可
  • -e: ネットワークエラーを無視
  • -E: カスタムencodingでドキュメントを保存
  • -f: フレームを省略
  • -F: Webフォントを除外
  • -h: ヘルプ情報を表示
  • -i: 画像を削除
  • -I: ドキュメントを分離
  • -j: JavaScriptを除外
  • -k: 無効なX.509 (TLS) 証明書を許可
  • -M: タイムスタンプおよびURL情報を追加しない
  • -n: NOSCRIPT要素の内容を抽出
  • -o: 出力をfileに書き込む(STDOUTには“-”を使用)
  • -s: サイレントモード
  • -t: network request timeoutを調整
  • -u: カスタムUser-Agentを指定
  • -v: 動画を除外

ドメインのホワイトリストとブラックリスト

  • -dおよび-Bオプションを通じて、アセットを取得できるドメインを制御できる。

動的コンテンツ

  • MonolithにはJavaScriptエンジンがないため、初期ロード後にデータを取得して表示するWebサイトでは追加ツールが必要になる場合がある。
  • たとえば、Chromium (Chrome) を使って、そのようなページ向けの前処理ツールとして動作させることができる。

プロキシ設定

  • https_proxy, http_proxy, no_proxy環境変数を設定する必要がある。

ライセンス

  • Creative Commons Zero v1.0 Universal
  • 作者は、可能な法的範囲内で、このソフトウェアに関するすべての著作権および著作隣接権を全世界でパブリックドメインに捧げている

GN⁺の意見

  • monolithは、Webページをオフラインでも元の状態と同じように保存できる効果的なツールであり、研究者や開発者にとって有用となりうる。
  • このツールは、Webアーカイブやコンテンツ保存に関心のある人々にとって特に魅力的であり、インターネットに接続されていない環境でもWebページを確認できる能力を提供する。
  • 批判的な観点では、動的に読み込まれるコンテンツを処理できないという限界があり、これはユーザーが追加のツールを使わなければならない手間につながる可能性がある。
  • 似た機能を提供する別のプロジェクトとしてはHTTrackやWgetがあり、これらもWebサイトをオフライン保存するために使うことができる。
  • monolithを使う前に、保存しようとしているWebページの著作権および利用権限を確認し、保存したコンテンツの利用目的が法的問題を引き起こさないよう注意することが重要である。

3件のコメント

 
yangeok 2024-04-04

バンドルファイルで保存されてイライラしていましたが、1ファイルで保存できるならありがたいですね(笑)。静的サイトをアーカイブしてWebサーバーに上げるときに便利そうです^^

 
secret3056 2024-03-28

Bicycle - 自転車が動く仕組みについてのすべてをアーカイブしてみました。
以前使っていた似たようなブラウザー拡張として、SingleFile - Webページを1つのHTMLファイルとして保存してくれるツールがありました。

どちらのツールも正常な WebGL の動作はしませんでした。
monolith はモデルをまったくダウンロードせず、
SingleFile はモデルをダウンロードして最初の画像までは描画してくれるものの、そのインタラクティブな動作はしません。

各出力物のサイズは 2MB と 9MB です。開発者ツールで hard refresh したときは 3MB をダウンロードします。

chrome.exe `  
--headless `  
--incognito `  
--virtual-time-budget=50000 `  
--dump-dom https://ciechanow.ski/bicycle/ | monolith `  
- `  
-I `  
-b https://ciechanow.ski/bicycle/ `  
-o bicycle.html  
 
GN⁺ 2024-03-25

Hacker Newsの意見

  • macOSでGoogle Chromeを使い、JavaScriptの実行後のWebページのHTMLファイルを取得する方法をREADMEで知った。詳しくはTILにまとめており、Playwright Chromiumを使う自身のツール shot-scraper でも似た機能を提供している。

    • /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \ --headless --incognito --dump-dom https://github.com > /tmp/github.html
  • 可能な限り単一ファイルのページを配布するのを好む。ソース表示ですべて確認できるべきだという原則があるため。こうしたページは自己完結しており、オフラインで使ったり再アップロードしたりできる。TypeScriptを使ってゲームを書き、それを単一のHTMLファイルにビルドするシンプルなビルドシステムを作った。ブラウザがTypeScript構文をサポートするようになれば、コンパイラやビルド工程は不要になるはず。

  • SingleFileと比べてどうなのか?

  • 後で読むためにWebページを保存するサービスをよく使うが、いざ読もうとするとそのページがすでに存在しないことが多い。オフラインのアーカイブ版へ移るほうが良い選択肢かもしれないと考えている。

  • Wayback MachineからWebサイト全体を復元する方法についての質問。愛用していたWebサイトのデータベースが削除されたが、内容はすべて Internet Archive に残っている。手動スクレイピングや、PythonでのCSS URL修正などが必要になりそうだという話。

  • 数年前に似たものを書き、主にGoプログラムでHTMLを生成するときに使っている。外部スタイルシートやJavaScriptへのリンクを使い、それらを単一のHTMLファイルとして処理する。

  • 指定した深さまでリンクをたどる機能があるとよい、という意見。Httrackに似た機能に言及している。

  • このツールは興味深いが、ブラウザのWebページ処理の問題を解決するための応急処置にすぎないという意見。ブラウザはページを "blah.html" ファイルと "blah_files" フォルダとして保存するのではなく、両方を1つのフォルダにまとめて簡単に移動・コピーできるようにすべきだと主張している。

  • wgetを使ってWebページとすべてのアセットをダウンロードする方法の説明と、ドキュメントへのリンクの案内。

  • 2019年8月にHacker Newsへ投稿された「Show HN: CLI tool for saving web pages as a single file」への関連リンクの案内。