26 คะแนน โดย GN⁺ 2024-03-25 | 3 ความคิดเห็น | แชร์ทาง WhatsApp
  • รวมหน้าเว็บเป็นไฟล์ HTML เดียว
  • ต่างจากฟังก์ชัน "บันทึกหน้า" แบบเดิม monolith จะบันทึกโดยรวมทั้งเอกสารเป้าหมาย รวมถึง CSS รูปภาพ และ JavaScript assets ในครั้งเดียว
  • ฝัง assets ทั้งหมดเป็น data URL ทำให้สามารถเรนเดอร์หน้าเว็บได้เหมือนบนอินเทอร์เน็ตแม้ไม่มีการเชื่อมต่อเครือข่าย
  • เขียนด้วย Rust และติดตั้งได้ทั้งบน Mac/Windows/Linux: cargo/brew/choco/snap/apk..

วิธีใช้งาน

ตัวเลือก

  • -a: ไม่รวมแหล่งเสียง
  • -b: ใช้ base URL แบบกำหนดเอง
  • -B: ห้ามค้นหา assets จากโดเมนที่ระบุ
  • -c: ไม่รวม CSS
  • -C: อ่านคุกกี้จาก file
  • -d: อนุญาตให้ค้นหา assets ได้เฉพาะจาก domain(s) ที่กำหนด
  • -e: ไม่สนใจข้อผิดพลาดเครือข่าย
  • -E: บันทึกเอกสารด้วย encoding แบบกำหนดเอง
  • -f: ละเว้นเฟรม
  • -F: ไม่รวมเว็บฟอนต์
  • -h: แสดงข้อมูลช่วยเหลือ
  • -i: ลบรูปภาพ
  • -I: แยกเอกสาร
  • -j: ไม่รวม JavaScript
  • -k: ยอมรับใบรับรอง X.509 (TLS) ที่ไม่ถูกต้อง
  • -M: ไม่เพิ่มข้อมูล timestamp และ URL
  • -n: ดึงเนื้อหาจากองค์ประกอบ NOSCRIPT
  • -o: เขียนผลลัพธ์ไปยัง file (ใช้ “-” สำหรับ STDOUT)
  • -s: โหมดเงียบ
  • -t: ปรับ network request timeout
  • -u: กำหนด User-Agent แบบกำหนดเอง
  • -v: ไม่รวมวิดีโอ

การทำ whitelist และ blacklist ของโดเมน

  • สามารถควบคุมโดเมนที่อนุญาตให้ค้นหา assets ได้ผ่านตัวเลือก -d และ -B

คอนเทนต์แบบไดนามิก

  • Monolith ไม่มี JavaScript engine ดังนั้นเว็บไซต์ที่ดึงและแสดงข้อมูลหลังการโหลดเริ่มต้นอาจต้องใช้เครื่องมือเพิ่มเติม
  • ตัวอย่างเช่น สามารถใช้ Chromium (Chrome) เป็นตัว preprocessor สำหรับหน้าเว็บลักษณะนี้ได้

การตั้งค่า proxy

  • ต้องตั้งค่าตัวแปรสภาพแวดล้อม https_proxy, http_proxy, no_proxy

สัญญาอนุญาต

  • Creative Commons Zero v1.0 Universal
  • ผู้เขียนอุทิศลิขสิทธิ์และสิทธิข้างเคียงทั้งหมดของซอฟต์แวร์นี้ให้เป็นสาธารณสมบัติทั่วโลก ภายในขอบเขตทางกฎหมายที่ทำได้

ความเห็นจาก GN⁺

  • monolith เป็นเครื่องมือที่มีประสิทธิภาพสำหรับเก็บรักษาหน้าเว็บให้เหมือนต้นฉบับแม้ใช้งานแบบออฟไลน์ จึงอาจมีประโยชน์สำหรับนักวิจัยหรือนักพัฒนา
  • เครื่องมือนี้อาจดึงดูดผู้ที่สนใจ web archiving หรือการเก็บรักษาคอนเทนต์เป็นพิเศษ และช่วยให้ตรวจดูหน้าเว็บได้แม้อยู่ในสภาพแวดล้อมที่ไม่มีอินเทอร์เน็ต
  • ในอีกมุมหนึ่ง มันมีข้อจำกัดตรงที่ไม่สามารถจัดการคอนเทนต์ที่โหลดแบบไดนามิกได้ ซึ่งอาจทำให้ผู้ใช้ต้องยุ่งยากกับการใช้เครื่องมือเพิ่มเติม
  • โครงการอื่นที่มีความสามารถคล้ายกันได้แก่ HTTrack หรือ Wget ซึ่งก็สามารถใช้บันทึกเว็บไซต์ไว้ดูแบบออฟไลน์ได้เช่นกัน
  • ก่อนใช้ monolith ควรตรวจสอบลิขสิทธิ์และสิทธิการใช้งานของหน้าเว็บที่ต้องการบันทึก และระวังไม่ให้วัตถุประสงค์การใช้คอนเทนต์ที่บันทึกไว้ก่อให้เกิดปัญหาทางกฎหมาย

3 ความคิดเห็น

 
yangeok 2024-04-04

เคยหงุดหงิดที่มันเซฟเป็นไฟล์แบบ bundle เหมือนกัน แต่ถ้าเซฟได้เป็นไฟล์เดียวก็คงขอบคุณมากเลย 555 น่าจะมีประโยชน์ตอนทำ archive ของ static site แล้วอัปขึ้นเว็บเซิร์ฟเวอร์นะครับ ^^

 
secret3056 2024-03-28

ผมลองเก็บถาวร Bicycle - ทุกอย่างเกี่ยวกับหลักการที่ทำให้จักรยานเคลื่อนที่ ดูแล้วครับ
ก่อนหน้านี้มีส่วนขยายเบราว์เซอร์ที่คล้ายกันซึ่งผมใช้อยู่คือ SingleFile - เครื่องมือสำหรับบันทึกหน้าเว็บเป็นไฟล์ 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

  • ได้เรียนรู้จาก README ว่าจะดึงไฟล์ HTML ของเว็บเพจหลังจากที่ JavaScript รันเสร็จแล้วด้วย Google Chrome บน macOS ได้อย่างไร รายละเอียดเพิ่มเติมถูกสรุปไว้ใน TIL และเครื่องมือของตัวเองชื่อ shot-scraper ที่ใช้ Playwright Chromium ก็มีความสามารถคล้ายกัน

    • /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \ --headless --incognito --dump-dom https://github.com > /tmp/github.html
  • ชอบเผยแพร่หน้าแบบไฟล์เดียวให้มากที่สุด เพราะยึดหลักว่าควรดูทุกอย่างได้ผ่านการดูซอร์ส หน้าแบบนี้เป็น self-contained ใช้งานออฟไลน์หรืออัปโหลดขึ้นใหม่ได้ เคยทำระบบบิลด์แบบง่ายเพื่อเขียนเกมด้วย TypeScript แล้วบิลด์ออกมาเป็นไฟล์ HTML เดียว หากเบราว์เซอร์รองรับไวยากรณ์ TypeScript ในอนาคต ก็จะไม่ต้องมีคอมไพเลอร์หรือขั้นตอนบิลด์อีก

  • เมื่อเทียบกับ SingleFile แล้วเป็นอย่างไร?

  • ใช้บริการบันทึกเว็บเพจไว้อ่านภายหลังบ่อยมาก แต่พอจะกลับไปอ่านจริง ๆ ก็มักเจอว่าหน้านั้นหายไปแล้ว เลยกำลังคิดว่าการเก็บเป็นเวอร์ชัน archive แบบออฟไลน์อาจเป็นทางเลือกที่ดีกว่า

  • มีคำถามเกี่ยวกับวิธีกู้คืนทั้งเว็บไซต์จาก Wayback Machine เว็บไซต์ที่รักถูกลบฐานข้อมูลไปแล้ว แต่เนื้อหาทั้งหมดยังอยู่ใน Internet Archive ดูเหมือนว่าจะต้องสครัปแบบแมนนวลและใช้ Python แก้ URL ของ CSS เป็นต้น

  • เคยเขียนของคล้าย ๆ กันเมื่อหลายปีก่อน โดยใช้หลัก ๆ ตอนสร้าง HTML จากโปรแกรม Go ใช้ลิงก์ไปยัง stylesheet ภายนอกและ JavaScript แล้วประมวลผลให้กลายเป็นไฟล์ HTML เดียว

  • อยากให้รองรับความสามารถในการตามลิงก์ไปจนถึงระดับความลึกที่กำหนดได้ คล้ายกับ Httrack

  • มองว่าเครื่องมือนี้น่าสนใจ แต่ก็เป็นเพียงวิธีแก้ขัดสำหรับปัญหาเรื่องวิธีที่เบราว์เซอร์จัดการเว็บเพจ ควรให้เบราว์เซอร์บันทึกหน้าเป็นโฟลเดอร์เดียวที่รวมทั้งไฟล์ "blah.html" และโฟลเดอร์ "blah_files" ไว้ด้วยกัน เพื่อให้ย้ายและคัดลอกได้ง่าย แทนที่จะเก็บแยกกัน

  • มีคำอธิบายเกี่ยวกับวิธีใช้ wget เพื่อดาวน์โหลดเว็บเพจพร้อม asset ทั้งหมด และมีลิงก์เอกสารประกอบ

  • มีลิงก์ที่เกี่ยวข้องไปยังโพสต์บน Hacker News เมื่อเดือนสิงหาคม 2019: "Show HN: CLI tool for saving web pages as a single file"