GN⁺: Monolith - 웹 페이지를 단일 HTML 파일로 저장하는 CLI 도구
(github.com/Y2Z)- 웹 페이지를 단일 HTML 파일로 번들링
- 기존의 "페이지 저장" 기능과 달리,
monolith
는 대상 문서뿐만 아니라 CSS, 이미지, 자바스크립트 애셋을 한 번에 포함시켜 저장 - 모든 애셋을 데이터 URL로 내장하여, 네트워크 연결이 없는 상태에서도 인터넷에서와 똑같이 페이지를 렌더링할 수 있게 함
- Rust로 작성되어 맥/윈/리눅스 모두 설치 가능: cargo/brew/choco/snap/apk..
사용 방법
- 명령어 예시:
monolith https://lyrics.github.io/db/P/Portishead/Dummy/Roads/ -o portishead-roads-lyrics.html
- 파이프를 통한 사용 예시:
cat index.html | monolith -aIiFfcMv -b https://original.site/ - > result.html
옵션
-
-a
: 오디오 소스 제외 -
-b
: 사용자 정의base URL
사용 -
-B
: 특정 도메인에서 자산 검색 금지 -
-c
: CSS 제외 -
-C
:file
에서 쿠키 읽기 -
-d
: 지정된domain(s)
에서만 자산 검색 허용 -
-e
: 네트워크 오류 무시 -
-E
: 사용자 정의encoding
으로 문서 저장 -
-f
: 프레임 생략 -
-F
: 웹 폰트 제외 -
-h
: 도움말 정보 출력 -
-i
: 이미지 제거 -
-I
: 문서 격리 -
-j
: 자바스크립트 제외 -
-k
: 유효하지 않은 X.509 (TLS) 인증서 수락 -
-M
: 타임스탬프 및 URL 정보 추가 안 함 -
-n
: NOSCRIPT 요소의 내용 추출 -
-o
: 출력을file
로 작성 (STDOUT을 위해 “-” 사용) -
-s
: 조용한 모드 -
-t
:network request timeout
조정 -
-u
: 사용자 정의User-Agent
제공 -
-v
: 비디오 제외
도메인 화이트리스팅 및 블랙리스팅
-
-d
및-B
옵션을 통해 애셋을 검색할 수 있는 도메인을 제어할 수 있음.
동적 콘텐츠
- Monolith에는 자바스크립트 엔진이 없어 초기 로드 후 데이터를 검색하고 표시하는 웹사이트는 추가 도구가 필요할 수 있음.
- 예를 들어, Chromium(Chrome)을 사용하여 이러한 페이지에 대한 사전 처리기로 작동시킬 수 있음.
프록시 설정
-
https_proxy
,http_proxy
,no_proxy
환경 변수를 설정해야 함.
라이선스
- Creative Commons Zero v1.0 Universal
- 저자는 가능한 법적 범위 내에서 이 소프트웨어의 모든 저작권 및 인접 권리를 전 세계적으로 퍼블릭 도메인에 헌정함
GN⁺의 의견
-
monolith
는 웹 페이지를 오프라인에서도 원본과 동일하게 보존할 수 있는 효과적인 도구로, 연구자나 개발자들에게 유용할 수 있음. - 이 도구는 웹 아카이빙이나 콘텐츠 보존에 관심이 있는 사람들에게 특히 매력적일 수 있으며, 인터넷이 연결되지 않은 환경에서도 웹 페이지를 검토할 수 있는 능력을 제공함.
- 비판적인 시각에서 볼 때, 동적으로 로드되는 콘텐츠를 처리하지 못하는 한계가 있으며, 이는 사용자가 추가적인 도구를 사용해야 하는 번거로움을 초래할 수 있음.
- 비슷한 기능을 제공하는 다른 프로젝트로는 HTTrack이나 Wget이 있으며, 이들도 웹사이트를 오프라인으로 저장하는 데 사용될 수 있음.
-
monolith
를 사용하기 전에, 저장하려는 웹 페이지의 저작권 및 사용 권한을 확인하는 것이 중요하며, 저장된 콘텐츠의 사용 목적이 법적인 문제를 야기하지 않도록 주의해야 함.
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
Hacker News 의견
-
macOS에서 Google Chrome을 사용하여 JavaScript가 실행된 후의 웹 페이지 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과의 비교해서 어떤지?
-
나중에 읽기 위해 웹 페이지를 저장하는 서비스를 자주 사용하지만, 실제로 읽으려 할 때 페이지가 더 이상 존재하지 않는 경우가 많음. 오프라인 아카이브 버전으로 이동하는 것이 더 나은 옵션일 수 있음을 고려 중.
-
Wayback Machine에서 전체 웹사이트를 복원하는 방법에 대한 질문. 사랑하는 웹사이트의 데이터베이스가 삭제되었으나, 모든 내용이 인터넷 아카이브에 존재함. 수동 스크래핑과 파이썬을 사용한 CSS URL 수정 등이 필요할 것으로 보임.
-
몇 년 전에 비슷한 것을 작성했으며, 주로 Go 프로그램에서 HTML을 생성할 때 사용함. 외부 스타일시트와 자바스크립트에 링크를 사용하고, 이를 단일 HTML 파일로 처리함.
-
지정된 깊이까지 링크를 따라가는 기능에 대한 지원이 있으면 좋겠다는 의견. Httrack과 유사한 기능을 언급.
-
이 도구는 흥미롭지만, 브라우저가 웹 페이지를 처리하는 방식에 대한 문제를 해결하기 위한 임시방편이라는 의견. 브라우저가 페이지를 "blah.html" 파일과 "blah_files" 폴더로 저장하는 대신, 둘을 하나의 폴더로 묶어서 쉽게 이동하고 복사할 수 있게 해야 한다고 주장함.
-
wget을 사용하여 웹 페이지와 모든 자산을 다운로드하는 방법에 대한 설명과 문서 링크 제공.
-
2019년 8월에 해커뉴스에 게시된 "Show HN: CLI tool for saving web pages as a single file"에 대한 관련 링크 제공.