ZaLinux.ru

Как в командной строке сделать скриншот сайта

Для того, чтобы сделать скриншот сайта или чтобы конвертировать HTML в картинку или в PDF можно воспользоваться программой wkhtmltopdf. Программа хорошо справляется, делая скриншоты из командной строки, но если попытаться запустить её на безголовой машине (без установленной графической оболочки), то программа потерпит неудачу.

По этой причине мне она не подошла, но я не мог не упомянуть её, поскольку это самый одни из самых простых способов сделать скриншот сайта не выходя из командной строки на домашнем настольном компьютере.

Если мы работаем с сайтами, то нам нужен движок рендерега. По-настоящему безголовый движок веб-рендерега я знаю один – PhantomJS. Им, давайте, и воспользуемся.

Для начала установите его, как описано в инструкции «Как установить PhantomJS на Linux».

Казалось бы, PhantomJS должен прекрасно справляться с тем, для чего он предназначен – рендерегим веб-приложений на безголовых серверах. При тестировании в графическом окружении рабочего стола всё именно так и было. Но при переносе на безголовый сервер, скриншоты стали выглядить странно: при использовании PhantomJS на картинках вместо букв отображались пустые места, квадратики, но только не буквы. Причина стала понятна довольно быстро – отсутствие шрифтов. Следующие наборы шрифтов были подобраны как максимально возможные, они могут быть избыточными, поскольку подбирались так, чтобы без проблем отображать восточные иероглифы, тайские буквы и буквы любого другого редкого алфавита.

Для производных Debian (Kali Linux, Linux Mint, Ubuntu) установите:

sudo apt-get install gsfonts fonts-arphic-uming fonts-linuxlibertine ttf-liberation fonts-thai-tlwg* fonts-tlwg-* fonts-tibetan-machine fonts-khmeros ttf-freefont fonts-beng-extra fonts-arphic-ukai

Для Arch Linux установите:

sudo pacman -S gsfonts ttf-arphic-uming ttf-ubuntu-font-family ttf-linux-libertine-g ttf-liberation ttf-tlwg ttf-tibetan-machine ttf-khmer ttf-freefont ttf-freebanglafont ttf-arphic-ukai

Как сохранить HTML в изображение

Нам нужен файл rasterize.js, найдём его расположение:

locate rasterize.js
/usr/share/phantomjs/examples/rasterize.js

Команда для создания скриншотов веб-сайтов из командной строки выглядит так:

phantomjs /usr/share/phantomjs/examples/rasterize.js https://mi-al.ru screenshot.png

Где:

  • /usr/share/phantomjs/examples/rasterize.js – путь до файла rasterize.js
  • https://mi-al.ru – адрес сайта, скриншот которого нам нужен, обязательно следует указывать протокол
  • screenshot.png – файл, в который мы хотим сохранить изображение

В принципе сработало, но скриншот выглядит так:

11

Т.е. сайт выдал свою мобильную версию, поскольку по умолчанию сайту передаётся ширина «браузера» как 600 пиксилей.

Нам нужно отключить строгий режим. Для этого отредактируем файл

vim phantomjs /usr/share/phantomjs/examples/rasterize.js

Закомментируя там самую верхнюю строчку

"use strict";

чтобы получилось так:

//"use strict";

Теперь в качестве дополнительного аргумента мы можем указывать желаемую высоту:

phantomjs /usr/share/phantomjs/examples/rasterize.js https://mi-al.ru screenshot.png 1920px

Теперь скриншот выглядит так:

12

Можно указывать ширину и высоту:

phantomjs /usr/share/phantomjs/examples/rasterize.js https://mi-al.ru screenshot.png 1920px*400px

Тогда скриншот может получиться обрезанным:

13

Как конвертировать HTML в PDF

Чтобы сделать скриншот любого сайта и сохранить его в PDF из командной строки, нужно набрать команду:

phantomjs /usr/share/phantomjs/examples/rasterize.js https://mi-al.ru screenshot.pdf

Где:

  • /usr/share/phantomjs/examples/rasterize.js – путь до файла rasterize.js
  • https://mi-al.ru – адрес сайта, скриншот которого нам нужен, обязательно следует указывать протокол
  • screenshot.pdf – PDF файл, в который мы сохраняем результат

Можно указать размер страницы:

phantomjs /usr/share/phantomjs/examples/rasterize.js https://mi-al.ru screenshot.pdf A4

Варианты размеров: "5in*7.5in", "10cm*20cm", "A4", "Letter".

Рекомендуемые статьи:

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *