Есть ли другие способы?
Возможно, вы захотите использовать Chrome в режиме --headless
(без графического интерфейса) (доступно с версии 59+). Firefox имеет аналогичную функцию с версии 56+.
В сочетании с параметром --headless
в Chrome (или -headless
в Firefox) вы можете использовать параметр --screenshot
(начиная с Firefox 57), чтобы делать снимки экрана веб-сайта из командной строки. Эти функции должны поддерживаться как в Windows, так и в MacOS, при условии, что вы используете текущие версии каждого браузера.
Chrome на Windows
В качестве примера использования Chrome в Windows для захвата веб-страницы вы можете использовать следующую команду, чтобы сделать снимок экрана, например, http://example.com:
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --headless --disable-gpu --enable-logging --screenshot="C:\path\to\screenshot.png" http://example.com/
Chrome на MacOS
Точно так же вы должны быть в состоянии использовать аналогичную команду с Chrome на MacOS:
chrome --headless --disable-gpu --enable-logging --screenshot http://example.com/
Обратите внимание, что простое использование chrome
(см. Выше), как правило, зависит от наличия соответствующего alias
например:
alias chrome="/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome"
Дополнительные опции
--print-to-pdf - создает версию веб-страницы в .pdf
например --print-to-pdf="C:\path\to\output.pdf"
--window-size - указать точный размер окна для отображения скриншотов и т. д., например, --window-size=1366,768
--hide-scrollbars - удаляет все полосы прокрутки, которые в противном случае могли бы отображаться на скриншоте и т. д. (из-за небольшого окна просмотра).
Обновленный список дополнительных переключателей доступен здесь.
Безголовые хромовые ловушки
В Windows Chrome кажется очень требовательным к путям. Чтобы избежать странного поведения (или прямых сбоев), всегда указывайте полный путь + имя файла. Это относится, в частности, к --screenshot
и --print-to-pdf
, но даже включение Chrome в путь / путь Windows и простое использование chrome
(например, MacOS) может вызвать проблемы (особенно в пакетных файлах).
Отдельные страницы требуют отдельного времени для рендеринга. Например, снимок экрана https://example.com был создан почти мгновенно в моей тестовой системе, в то время как https://superuser.com постоянно занимал около тридцати секунд или дольше для визуализации.
Использование --screenshot
без --headless
может вызвать проблемы с захватом нескольких снимков экрана.
Снимки экрана записываются в виде файлов .png
, независимо от расширения изображения (т.е. без файлов .jpg
).
Если есть контент, который вы хотите захватить, который не был захвачен, попробуйте настроить параметр --window-size
. Тем не менее, обратите внимание, что захват "полных" (прокручиваемых) веб-страниц может быть проблематичным (по крайней мере, теоретически), поэтому вам, возможно, придется искать более сложные решения позже в зависимости от обстоятельств.
Захват скриншотов лучше всего работает с более "традиционными" веб-страницами. «Веб-приложения» могут привести к нежелательным результатам.
Я не смог найти расширение Chrome, которое принимает список URL-адресов. Я нашел только расширения, которые сохраняют скриншот одной открытой страницы, а не пакета.
К сожалению, использование режимов --headless
и --screenshot
не позволяет вам напрямую указывать несколько URL для захвата (насколько мне известно). Скорее всего, вам понадобится создать какой-нибудь сценарий для достижения этой цели.
Например, как метод грубой силы в Windows, вы можете просто сохранить варианты соответствующей команды в пакетном (.bat
) файле, например:
ECHO off
REM A batch file to automate downloading website screenshots
ECHO on
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --headless --disable-gpu --enable-logging --screenshot="C:\path\to\screenshot1.png" http://website1.com/
REM More commands here [...]
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --headless --disable-gpu --enable-logging --screenshot="C:\path\to\screenshot20.png" http://website20.com/
Подобный подход с использованием сценариев оболочки, вероятно, будет работать и в MacOS.
Конечно, вы могли бы создать скрипт, который на самом деле считывал бы список URL (скажем, из текстового файла), например, с помощью Batch (Windows), Powershell (Windows), Shell Scripting (MacOS), Python (Windows и MacOS) или любым другим варианты доступны.
Мне нужно сохранить скриншоты размером с миниатюру примерно на 20 страницах интранета [...] Я исключил установку приложения, потому что мой офис использует как Windows, так и Mac OS. Я не хотел полагаться на приложение, которое некоторые из нас не могут установить.
Я не думаю, что вы сможете обойти стороннее приложение для этого шага. Опять же, режим --headless
с --screenshot
не поддерживает фактическое изменение размера изображений (только область просмотра, то есть размер окна). Кроме того, Windows не поставляется со встроенным инструментом для изменения размера изображений (за пределами MS Paint).
В качестве рекомендации, возможно, стоит обратить внимание на ImageMagick, поскольку он поддерживает как Windows, так и MacOS. После установки вы можете просто использовать, например:
convert screenshot1.png -resize 50% thumbnail-screenshot1.png
изменить размер изображения (хотя есть много других возможных вариантов). Вы можете сделать это (или любые аналогичные команды) частью скрипта, который захватывает сами скриншоты, или частью отдельного скрипта постобработки.