Сохранение веб-страницы и её содержимого в одном html-файле

Введение

Идея сохранения любой веб-страницы в виде одного файла со всеми вложенными ресурсами не нова, и существует немало альтернатив. Например, веб-браузер Safari позволяет сохранять отдельные веб-страницы для просмотра в автономном режиме, сохраняя все элементы страницы в веб-архиве (расширение файла .webarchive). Есть также MHTML, формат веб-архива, который аналогичным образом сохраняет веб-страницы в одном файле. Есть даже оффлайн-браузеры (привет модемные подключения и ночные дозвоны до провайдера!) со своими собственными форматами хранения данных (хотя они немного сложнее чем просто сохранение страниц, там они целые сайты сохраняли)

Но у всех описанных выше средств есть некоторые ограничения, такие как требование использования определенного браузера или стороннего клиента для просмотра полученного результата. Например, вы можете сохранять и просматривать файлы .webarchive только с помощью веб-браузера Safari и некоторых сторонних решений. Что касается MHTML, он больше не поддерживается для просмотра в Firefox, да и Google Chrome недавно удалил пользовательский флаг # save-page-as-mhtml, который ранее позволял сохранять веб-страницы как MHTML (возможно есть некоторые расширения, которые возвращают эту функциональность, я не проверял).

Так как же сохранить файлы чтобы было удобно и не было так неряшливо как куча файлов и директорий?

Решение

Есть программа Monolith, это инструмент командной строки для сохранения любой веб-страницы в виде одного HTML-файла, который будет содержать в себе всё необходимое для локального отображения веб-страницы, без необходимости подключения к Интернету, и вы можете использовать любой веб-браузер для их просмотра. Это означает, что вы не полагаетесь на какие-либо сторонние решения, и вам не нужны веб-браузеры, чтобы продолжать поддерживать формат веб-архива, обеспечивая защиту ваших локально сохраненных веб-страниц в будущем.

Эта программа может вам пригодиться чтобы сохранять веб-страницы содержащие документацию, вики-статьи и всё-всё что вас заинтересует, для локального / автономного использования. Поскольку веб-страницы сохраняются в обычном формате HTML, вы сможете использовать обычные инструменты поиска в файлах, чтобы быстро найти нужную веб-страницу.

Обычная опция «Сохранить страницу как» (или Ctrl + s) (предоставляемая веб-браузерами для сохранения веб-страниц на вашем компьютере) сохраняет ресурсы веб-страниц в папке рядом с сохраненной веб-страницей. Monolith же извлекает активное содержимое веб-страницы и преобразует его в данные закодированные base64, подставляя их затем в документе вместо обычных URL-адресов. В результате ресурсы страницы, такие как Javascript, CSS или изображения, встроены в HTML-код страницы, поэтому все, что вам нужно, — это веб-браузер для доступа к локально сохраненной веб-странице.

Инструмент также предоставляет 2 полезных параметра: -i для удаления изображений с сохраненных веб-страниц и -j для исключения JavaScript.

Изначально Monolith использовал Node.js, но совсем недавно был переписан на Rust. В настоящее время он неплохо работает для большинства страниц, но есть еще несколько вещей, которые требуют доработки.

Недостатки

Например, встраивание импорта CSS и веб-шрифтов в настоящее время не поддерживается, хотя похоже что разработчик планирует реализовать это в ближайшее время.

Так же не работает пока сохранение веб-страниц, требующих аутентификации. Кроме того, не работает сохранение встроенных видео, но это в любом случае не может быть осуществимо, поскольку встраивание видео в виде base64-данных приведет к созданию очень большого HTML-файла, и если вы захотите отредактировать HTML-файл, это будет боль.

Стоит также отметить, что Monolith сохраняет то, что находится на веб-странице, когда она загружается, поэтому он не будет хорошо работать с веб-сайтами, которые реализуют бесконечную прокрутку. Во первых это  реализуется по-разному, в зависимости от веб-сайта (когда я тестировал — сохранялось только начало, как если бы прокрутку никто не трогал). Это, видимо, везде где реализована ленивая загрузка данных.

Установка

Для установки Monolith мы будем использовать Cargo — систему сборки Rust и менеджер пакетов. Вам также необходимо установить OpenSSL (devel), чтобы собрать Monolith. Установите это всё в Linux, используя:

Debian / Ubuntu / Linux Mint / Pop!_OS, etc.:

Fedora:

Arch Linux, Manjaro:

openSUSE:

Solus OS:

Теперь получаем исходники Monolith через Git и устанавливаем:

Выполняемый файл Monolith устанавливается по пути ~/.cargo/bin, который отсутствует в переменной $PATH по-умолчанию. Вы можете добавить этот путь в PATH (чтобы запускать программу просто набрав «monolith» без указания до него полного пути) через добавление export PATH=»$PATH:$HOME/.cargo/bin в ваш ~/.bashrc или ~/.zsh file (смотря что вы используете):

Для Bash:

Для Zsh:

И затем запустите

или

Для того чтобы командная оболочка перечитала файл.

Внимание, выполняйте команду «echo» один раз, потому что она добавляет PATH=»$PATH:$HOME/.cargo/bin в ~/.bashrc / ~/.zsh  каждый раз при запуске.

Использование

Теперь можно использовать Monolith для сохранения веб-страниц вместе с ресурсными файлами встроенными в один HTML-файл. Например, давайте сохраним страницу GitHub самого Monolith (https://github.com/Y2Z/monolith) локально и назовем файл monolith.html:

Хотите удалить из страницы весь javascript? Добавьте опцию -j, например:

Таким же образом используйте опцию -i для удаления картинок в сохраняемой странице.

Автор: Mirivlad

Скромный труженик консоли и окошек.