Pull to refresh

Скриншоты сайтов своими руками

Website development *
Проблема создания скриншотов web-страниц прямо на сервере встает достаточно редко, но, как говорится, метко. Хватишься иной раз, так гугль дает ссылки на какой-нибудь парсер уже существующего сервиса. Но, господа, это же не наш метод!

Покопавшись, можно найти что-нибудь типа связки xvfb (виртуальный фреймбуффер) с каким-нибудь браузером, например xvfb+opera, или khtml2png, который тянет за собой фигову тучу kde'шных либ. А ведь так хочется какого-нибудь легкого standalone скриптика...

Решив посвятить немного времени изучению вопроса, обстоятельно исследовал имеющийся инструментарий.

Итак, первое что мне попалось на глаза: webkit2png. Для работы скрипта необходим собственно Safari, который в свою очередь стоит на… Mac OS. Ну, может кому и пригодится...

Но, мир полон энтузиастов, и я нашел порт этого скрипта на нормальные никсы с использованием Qt и Python — webkit2png.py. Для работы нам потребуются всего 2 библиотеки: libqt4-webkit и python-qt4.
Скрипт имеет следующие аргументы:

-x, --xvfb
Стартует xvfb. По умолчанию, не используется.

-g, --geometry
Задает размеры окна виртуального браузера. По умолчанию, выставлен параметр 0, что означает autodetect.

-o, --output
Записывает полученный скриншот в указанный файл.

-f, --format
Формат изображения. По умолчанию, png.

--scale
Ресайз изображения.

--aspect-ratio
Задает пропорции. Из возможных значений: «ignore» (по умолчанию), «keep», «expand».

-t, --timeout
Выставляет таймаут запроса. По умолчанию, не используется.

--debug
Позволяет проследить процесс создания изображения. По умолчанию, не используется.

Пример вызова:
python webkit2png.py http://habrahabr.ru -o habra.png -g 1024 768


В процессе поиска скриптов, нашлись еще два (mozgrab и html2jpg), написанные на perl и использующие mozilla. Они оказались довольно старыми и, на мой взгляд, неудобными. Дальнейшие поиски решено было бросить, так как уже найдено оптимальное решение.
Tags:
Hubs:
Total votes 106: ↑95 and ↓11 +84
Views 12K
Comments Comments 34