- รวมหน้าเว็บเป็นไฟล์ 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 ความคิดเห็น
เคยหงุดหงิดที่มันเซฟเป็นไฟล์แบบ bundle เหมือนกัน แต่ถ้าเซฟได้เป็นไฟล์เดียวก็คงขอบคุณมากเลย 555 น่าจะมีประโยชน์ตอนทำ archive ของ static site แล้วอัปขึ้นเว็บเซิร์ฟเวอร์นะครับ ^^
ผมลองเก็บถาวร Bicycle - ทุกอย่างเกี่ยวกับหลักการที่ทำให้จักรยานเคลื่อนที่ ดูแล้วครับ
ก่อนหน้านี้มีส่วนขยายเบราว์เซอร์ที่คล้ายกันซึ่งผมใช้อยู่คือ SingleFile - เครื่องมือสำหรับบันทึกหน้าเว็บเป็นไฟล์ HTML ไฟล์เดียว
เครื่องมือทั้งสองตัวไม่สามารถทำให้ webgl ทำงานได้อย่างสมบูรณ์
สำหรับ monolith นั้น ตัวโมเดลไม่ได้ถูกดาวน์โหลดเลย
ส่วน SingleFile ดาวน์โหลดโมเดลและแสดงผลได้ถึงภาพแรก แต่การทำงานแบบโต้ตอบนั้นใช้ไม่ได้
ขนาดของไฟล์ผลลัพธ์แต่ละอันคือ 2MB และ 9MB ส่วนตอน hard refresh ในเครื่องมือนักพัฒนาจะดาวน์โหลด 3MB
ความคิดเห็นจาก 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"