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