Создание скриншотов сайта из командной строки Linux

Для создания скриншота веб-сайта из командной строки в Linux вы можете использовать различные инструменты. Один из наиболее популярных - это wkhtmltoimage, который является частью набора инструментов wkhtmltopdf. Он преобразует HTML-страницы в изображения или PDF. Но wkhtmltoimage при установке тянет за собой еще 161 пакет зависимостей, поэтому нужно найти для нашей задачи что-то более простое или упакованное в Docker, например screenshoter.

Кроме wkhtmltoimage, существуют и другие инструменты, такие как

Мой выбор для простых сайтов с 200 ответом это Headless Chrome. Для сложных сайтов используйте или специализированные сервисы или настраивайте Puppeteer.

wkhtmltopdf и wkhtmltoimage — это инструменты командной строки с открытым исходным кодом (LGPLv3) для рендеринга HTML в PDF и различные форматы изображений с использованием механизма рендеринга Qt WebKit.

1. Установка wkhtmltoimage. Обычно этот инструмент можно установить через менеджер пакетов вашего дистрибутива. Например, в Debian или Ubuntu вы можете установить его, используя команду:

apt install wkhtmltopdf

2. Использование wkhtmltoimage. После установки вы можете создать скриншот веб-страницы, используя следующую команду:

wkhtmltoimage --width 1000 --height 1000 --crop-w 1000 --crop-h 1000 --format png --quality 80 http://example.com /tmp/screenshot.png

Здесь example.com - это адрес веб-сайта, а screenshot.png - имя файла, в который будет сохранён скриншот.

Создание PDF файла:

wkhtmltopdf https://google.com google.pdf

Screenshoter это контейнер библиотека Google Puppeteer для Node.js. Предполагаем, что докер у вас уже установлен, если нет вам нужно изучить установка пакетов Docker в Debian, Ubuntu.

docker pull mingalevme/screenshoter
docker run -d --restart always -p 8080:8080 --name screenshoter mingalevme/screenshoter

Теперь, чтобы сделать скриншот сайта достаточно обратится к API через HTTP. Просто выполните команду curl:

curl "http://localhost:8080/screenshot?url=https://dieg.info" > /tmp/screenshot.png

С указанием размеров создать скриншот

curl "http://localhost:8080/screenshot?url=https://dieg.info&viewport-width=1920&viewport-height=1080" > /tmp/screenshot.png

У screenshoter довольно много параметров, можно указать user-agent, cookies, device-scale-factor, transparency и многое другое. Полный список параметров screenshoter доступен на странице проекта на GitHub.

Безголовый (Headless) Chrome это способ запуска браузера Chrome в автономной среде. По сути, запуск Chrome без Chrome! Он переносит все современные функции веб-платформы , предоставляемые Chromium и механизмом рендеринга Blink, в командную строку. Безголовый браузер — отличный инструмент для автоматического тестирования и серверных сред, где вам не нужна видимая оболочка пользовательского интерфейса. Например, вы можете провести несколько тестов на реальной веб-странице, создать ее PDF-файл или просто проверить, как браузер отображает URL-адрес.

Скачиваем браузер для вашего диcтрибутива, в моем случае Ubuntu 22. Альтернативной установкой является использование неофициального Chrome PPA (это вариант можно найти в интернет).

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
dpkg -i google-chrome-stable_current_amd64.deb

Если у вас не будет хватать зависимостей, установите их используя apt и снова запустите установку бразуера:

root@z:~# apt install -f
 
root@z:~# dpkg -i google-chrome-stable_current_amd64.deb
(Reading database ... 133579 files and directories currently installed.)
Preparing to unpack google-chrome-stable_current_amd64.deb ...
Unpacking google-chrome-stable (120.0.6099.109-1) over (120.0.6099.109-1) ...
Setting up google-chrome-stable (120.0.6099.109-1) ...
Processing triggers for mailcap (3.70+nmu1ubuntu1) ...
Processing triggers for man-db (2.10.2-1) ...
root@z:~#

После завершения установки вы можете запустить Google Chrome либо из терминала с помощью команды google-chrome (официальная документация).

Пример создания скриншота:

google-chrome --headless --disable-gpu --screenshot=/tmp/screenshot.png --window-size=1280,1696 https://dieg.info

Теперь вы самостоятельно можете запустить сервис для создания скриншотов. Например для докера screenshoter достаточно настроить обратное проксирование в Nginx и сервис будет работать из браузера.

Сервисов для создания скриншотов достаточно много, но из 7 проверенных, стоит упомянуть пожалуй только 2:

  • thumbalizr.com. Сервис с платным доступом, но действительно работает для проверки динамических сайтов (задержка на обработку js). В бесплатном тарифе, thumbalizr на готовое изображение накладывается watermark, ограничивает выбор размера и качества.
  • Puppeteer, wait until the page is ready! также есть бесплатный тариф.

Для автоматизации отправки скриншотов в телеграм, используйте статью: Как Использовать Telegram API с Bash: Отправка Сообщений, Файлов, Фотографий

PQ VPS сервера в 28+ странах.