26 điểm bởi GN⁺ 2024-03-25 | 3 bình luận | Chia sẻ qua WhatsApp
  • Đóng gói trang web thành một tệp HTML duy nhất
  • Khác với tính năng "Lưu trang" thông thường, monolith lưu kèm trong một lần không chỉ tài liệu đích mà còn cả CSS, hình ảnh và các tài nguyên JavaScript
  • Nhúng mọi tài nguyên dưới dạng data URL, cho phép kết xuất trang giống hệt như trên Internet ngay cả khi không có kết nối mạng
  • Được viết bằng Rust nên có thể cài đặt trên macOS/Windows/Linux: cargo/brew/choco/snap/apk..

Cách sử dụng

Tùy chọn

  • -a: loại trừ nguồn âm thanh
  • -b: dùng base URL tùy chỉnh
  • -B: cấm tìm nạp tài nguyên từ một miền cụ thể
  • -c: loại trừ CSS
  • -C: đọc cookie từ file
  • -d: chỉ cho phép tìm nạp tài nguyên từ domain(s) được chỉ định
  • -e: bỏ qua lỗi mạng
  • -E: lưu tài liệu với encoding tùy chỉnh
  • -f: bỏ qua frame
  • -F: loại trừ web font
  • -h: hiển thị thông tin trợ giúp
  • -i: xóa hình ảnh
  • -I: cô lập tài liệu
  • -j: loại trừ JavaScript
  • -k: chấp nhận chứng chỉ X.509 (TLS) không hợp lệ
  • -M: không thêm dấu thời gian và thông tin URL
  • -n: trích xuất nội dung của phần tử NOSCRIPT
  • -o: ghi đầu ra vào file (dùng “-” cho STDOUT)
  • -s: chế độ im lặng
  • -t: điều chỉnh network request timeout
  • -u: cung cấp User-Agent tùy chỉnh
  • -v: loại trừ video

Danh sách trắng và danh sách đen miền

  • Có thể kiểm soát các miền được phép tìm nạp tài nguyên thông qua các tùy chọn -d-B.

Nội dung động

  • Monolith không có engine JavaScript, nên các website tìm nạp và hiển thị dữ liệu sau lần tải đầu tiên có thể cần công cụ bổ sung.
  • Ví dụ, có thể dùng Chromium (Chrome) làm bộ tiền xử lý cho các trang như vậy.

Cấu hình proxy

  • Cần thiết lập các biến môi trường https_proxy, http_proxy, no_proxy.

Giấy phép

  • Creative Commons Zero v1.0 Universal
  • Trong phạm vi pháp lý cho phép, tác giả hiến tặng toàn bộ bản quyền và các quyền liên quan của phần mềm này vào phạm vi công cộng trên toàn thế giới

Ý kiến của GN⁺

  • monolith là một công cụ hiệu quả để lưu giữ trang web giống nguyên bản ngay cả khi ngoại tuyến, và có thể hữu ích cho các nhà nghiên cứu hoặc nhà phát triển.
  • Công cụ này có thể đặc biệt hấp dẫn với những người quan tâm đến lưu trữ web hoặc bảo tồn nội dung, vì nó cho phép xem lại trang web trong môi trường không có Internet.
  • Ở góc nhìn phê phán, nó có hạn chế là không xử lý được nội dung tải động, điều này có thể gây bất tiện vì người dùng phải dùng thêm công cụ khác.
  • Những dự án khác có chức năng tương tự gồm HTTrack và Wget, cũng có thể dùng để lưu website ngoại tuyến.
  • Trước khi dùng monolith, cần kiểm tra bản quyền và quyền sử dụng của trang web muốn lưu, đồng thời cẩn trọng để mục đích sử dụng nội dung đã lưu không gây ra vấn đề pháp lý.

3 bình luận

 
yangeok 2024-04-04

Trước giờ cứ bị lưu thành file bundle nên khá khó chịu, nếu lưu được thành 1 file thì đúng là quá tuyệt haha. Có vẻ sẽ rất hữu ích khi lưu trữ site tĩnh rồi đưa lên web server ^^

 
secret3056 2024-03-28

Tôi đã thử lưu trữ Bicycle - mọi thứ về nguyên lý hoạt động của xe đạp.
Trước đây tôi có dùng một tiện ích mở rộng trình duyệt tương tự là SingleFile - công cụ lưu trang web thành một tệp HTML duy nhất.

Cả hai công cụ đều không xử lý được webgl bình thường.
monolith thì hoàn toàn không tải mô hình xuống, còn
SingleFile có tải mô hình xuống và vẽ được đến hình ảnh đầu tiên, nhưng phần tương tác thì không hoạt động.

Kích thước của từng đầu ra là 2MB và 9MB. Khi hard refresh trong công cụ dành cho nhà phát triển thì tải xuống 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

Ý kiến Hacker News

  • Đã học được từ file README cách lấy tệp HTML của trang web trên macOS bằng Google Chrome sau khi JavaScript đã chạy xong. Chi tiết đã được ghi lại trong TIL, và công cụ của riêng họ là shot-scraper dùng Playwright Chromium cũng cung cấp tính năng tương tự.

    • /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \ --headless --incognito --dump-dom https://github.com > /tmp/github.html
  • Thích triển khai các trang dưới dạng một tệp duy nhất bất cứ khi nào có thể. Lý do là theo nguyên tắc, mọi thứ nên có thể xem được qua source view. Những trang như vậy có tính tự chứa, có thể dùng ngoại tuyến hoặc tải lên lại. Đã tạo một hệ thống build đơn giản để viết game bằng TypeScript rồi build thành một tệp HTML duy nhất. Khi trình duyệt hỗ trợ cú pháp TypeScript, sẽ không còn cần compiler hay bước build nữa.

  • So với SingleFile thì thế nào?

  • Thường xuyên dùng các dịch vụ lưu trang web để đọc sau, nhưng đến lúc thực sự muốn đọc thì trang đó nhiều khi đã không còn tồn tại nữa. Đang cân nhắc rằng chuyển sang phiên bản lưu trữ ngoại tuyến có thể là lựa chọn tốt hơn.

  • Hỏi về cách khôi phục toàn bộ một website từ Wayback Machine. Cơ sở dữ liệu của một trang web yêu thích đã bị xóa, nhưng toàn bộ nội dung vẫn còn trên Internet Archive. Có vẻ sẽ cần scraping thủ công và dùng Python để sửa các URL CSS, v.v.

  • Đã viết thứ tương tự vài năm trước, chủ yếu dùng khi tạo HTML từ chương trình Go. Dùng liên kết tới stylesheet và JavaScript bên ngoài, rồi xử lý chúng thành một tệp HTML duy nhất.

  • Có ý kiến rằng sẽ hay hơn nếu hỗ trợ tính năng đi theo các liên kết đến độ sâu được chỉ định. Có nhắc đến chức năng tương tự Httrack.

  • Có ý kiến cho rằng công cụ này khá thú vị, nhưng chỉ là giải pháp tạm thời cho vấn đề trong cách trình duyệt xử lý trang web. Thay vì lưu trang thành tệp "blah.html" và thư mục "blah_files", trình duyệt nên gói cả hai vào một thư mục để dễ di chuyển và sao chép hơn.

  • Giải thích cách dùng wget để tải xuống trang web và toàn bộ tài nguyên của nó, đồng thời cung cấp liên kết tài liệu.

  • Cung cấp liên kết liên quan tới bài đăng trên Hacker News vào tháng 8 năm 2019: "Show HN: CLI tool for saving web pages as a single file".