Создание скриншотов сайтов с помощью Headless Chrome
Создание скриншотов сайтов с помощью Headless Chrome
Ранее я рассказывал о сервисах для создания скриншотов сайтов, но время не стоит на месте. Если у вас в распоряжении есть свой сервер, то вы легко сможете организовать собственный сервис для создания скриншотов сайтов. Начиная с версии 59, браузер Chrome может работать в так называемом "безголовом" режиме, то есть он реально не отрисовывает содержимое web-страницы, а все формирует в памяти. При этом он работает из командной строки и может быть установлен на сервер.
Начнем с установки. У нас рабочий сервер крутится на CentOS 7, поэтому команды установки будут следующими:
wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
yum install -y ./google-chrome-stable_current_*.rpm
Для других версий Linux используйте соответствующие команды. Если все сделано правильно, то Chrome будет доступен для запуска из командной строки. На самом деле Chrome поддерживает великое множество параметров, но нас интересуют только те, с помощью которых мы будем делать скриншот сайтов. Например, делаем скриншот главной страницы Яндекса:
/opt/google/chrome/chrome --no-sandbox --headless --disable-gpu --screenshot https://www.yandex.ru
После выполнения команды будет создан скриншот главной страницы Яндекса и сохранен в текущей папке в файл screenshot.png. Усложняем задачу. Если надо сделать скриншот не всей страницы, то можно задать размеры рабочего окна:
/opt/google/chrome/chrome --no-sandbox --headless --disable-gpu --window-size=1200,2000 --screenshot https://www.yandex.ru
UPD: после обновлений Chrome до версии 110, а может быть и раньше, перестал работать параметр --window-size, все скриншоты делаются размером 600х600 пикселов без вариантов. Баг признан разработчиками, но до сих пор (14.04.2023) не исправлен.
В некоторых случаях может потребоваться доступ через прокси, для этого в командую строку добавляются два параметра (в приведенном примере прокси с авторизацией):
/opt/google/chrome/chrome --no-sandbox --headless --disable-gpu --proxy-server=socks5://ip:port@login:password --proxy-bypass-list=* --window-size=1200,2000 --screenshot https://www.yandex.ru
Чтобы не было конфликтов с именами файлов, особенно при многопоточном создании скриншотов, а также чтобы на диске был порядок, можно и нужно указывать, куда и под каким именем сохранять скриншот. Делается это в настройке параметра --screenshot:
/opt/google/chrome/chrome --no-sandbox --headless --disable-gpu --proxy-server=socks5://ip:port@login:password --proxy-bypass-list=* --window-size=1200,2000 --screenshot=/images/my_screenshot_100500.png https://www.yandex.ru
В этом случае скриншот будет сохранен в папку /images под именем my_screenshot_100500.png. Под Linux может понадобиться коррекция прав доступа к свежесозданному скриншоту, по крайней мере у нас приходится дополнительно запускать команду chmod 0644, чтобы PHP-скрипты могли с ним дальше работать.
Пользователи Windows-версии Chrome, в том числе и его форков, также могут запускать свой браузер в "безголовом" режиме, все перечисленные параметры работают и для него.
Просмотров: 2413 | Комментариев: 7
Метки: оформление сайта
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(01.04.2020 в 10:13):
ТАК не делается. Так делается лишь превью страницы без возможности хотя бы минимально ее настроить. Поэтому низачот.
Neo
(01.04.2020 в 06:30):
Делается так: https://www.googleapis.com/pag...eenshot=true
ManHunter
(23.01.2020 в 12:01):
Ну вот когда лиса или канонiчныйЪ lynx будут также успешно фигачить скриншоты сайтов из командной строки, то я с радостью перейду на них. А пока или поднимать виндовый сервер с IECore и ActiveX или использовать безголовый Chrome.
A1eksandr1
(05.12.2019 в 22:13):
Видимо сарказм был в хромоножках.
Типа юзать нужно лису или ещё чего
Типа юзать нужно лису или ещё чего
ManHunter
(04.12.2019 в 07:15):
Не понял сарказма или шутку юмора или чо это было.
дегенерат
(04.12.2019 в 03:03):
А я думал такой олдскульный кулхакир браузером пользуется
Добавить комментарий
Заполните форму для добавления комментария
если из json из камента выше брать, то это отдельно парсер этого джсона надо и еще проверять, что гугль на 5-7-9 ответе не включит каптчу