Создание скриншотов сайта из командной строки Linux
Для создания скриншота веб-сайта из командной строки в Linux вы можете использовать различные инструменты. Один из наиболее популярных - это wkhtmltoimage, который является частью набора инструментов wkhtmltopdf. Он преобразует HTML-страницы в изображения или PDF. Но wkhtmltoimage при установке тянет за собой еще 161 пакет зависимостей, поэтому нужно найти для нашей задачи что-то более простое или упакованное в Docker, например screenshoter.
Кроме wkhtmltoimage, существуют и другие инструменты, такие как
- Puppeteer Node.js для автоматизации действия браузера Chrome
- CutyCapt
- Webscreenie
- PhantomJs
- PythonWebkit2Png
Мой выбор для простых сайтов с 200 ответом это Headless Chrome. Для сложных сайтов используйте или специализированные сервисы или настраивайте Puppeteer.
wkhtmltoimage
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
Docker контейнер screenshoter
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
Безголовый (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: Отправка Сообщений, Файлов, Фотографий
📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!
7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Китайский VPN Shadowsocks простая установка и настройка
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах