Как сделать скриншоты веб-страниц с помощью Perl?
Можно ли написать скрипт в Perl, который открывает разные URL-адреса и сохраняет скриншот каждого из них?
- Какие псевдооператоры существуют в Perl 5?
- Подсчет количества вхождений строки внутри другой (Perl)
- Perl demonize с дочерними демонами
- Почему современный Perl избегает UTF-8 по умолчанию?
- Как я могу запускать и забывать процесс в Perl?
- Признавательная способность «современных» регулярных выражений
- Как создается построение Perl's @INC? (ака Какие способы повлиять на поиск модhive Perl?)
- В Perl, как мне изменить, удалить или вставить строку в файл или добавить к началу файла?
Вы можете использовать WWW :: Mechanize :: Firefox для управления экземпляром Firefox и сбрасывать отображаемую страницу с помощью $mech->content_as_png
.
Имейте в виду, что его настройка может представлять собой довольно сложную задачу.
Если все работает так, как ожидалось, вы можете просто использовать сценарий, подобный этому, чтобы сбрасывать изображения желаемых сайтов, но вы должны запустить Firefox и изменить его размер до нужной ширины вручную (высота не имеет значения, WWW :: Mechanize :: Firefox всегда выгружает всю страницу).
use WWW::Mechanize::Firefox; use Path::Class qw/file/; my $mech = WWW::Mechanize::Firefox->new( bufsize => 10_000_000, # PNGs might become huge ); $mech->get('http://sofru.miximages.com/perl/'); my $fh = file( 'test.png' )->open( '> :raw' ); print $fh $mech->content_as_png();
Используйте модуль WWW::Selenium
, для которого вам понадобится сеанс удаленного управления Selenium .
Метод capture_entire_page_screenshot()
должен запускаться и запускаться.
Из WWW :: Selenium on CPAN:
$sel->capture_entire_page_screenshot($filename, $kwargs)
Сохраняет все содержимое текущего windows canvas в PNG-файле …
Типичный сценарий:
use strict; use warnings; use WWW::Selenium; my $sel = WWW::Selenium->new( host => "localhost", port => 4444, browser => "*iexplore", browser_url => "http://www.google.com", ); $sel->start; $sel->open("http://www.google.com"); $sel->capture_entire_page_screenshot("screenshot.png"); $sel->close;
Другой подход, который не требует использования браузера, заключается в использовании ImageMagick и HTML2PS для преобразования изображения. Однако будьте осторожны, это не тривиально, и почти невозможно (последнее, что я пробовал), чтобы это нормально работало на Windows.
Как только ImageMagick установлен, самый простой подход – просто запустить системный вызов программы convert
которую устанавливает ImageMagick . Если вам нужен менее хакерский подход, вы можете использовать API PerlMagick ImageMagick .
Существует прекрасная дискуссия об этом подходе, который вы можете найти на PerlMonks .
Вы также можете использовать Win32 :: IE :: Mechanize для рендеринга веб-страницы с помощью IE, а затем Win32 :: Screenshot для захвата страницы. Вам, вероятно, придется немного поработать, чтобы выяснить, где взять скриншот, но это не должно быть слишком невероятно сложно.
Конечно, это будет решение для платформы Windows, но может быть достаточно.
Используйте сторонний API веб-сервисов, например http://webshotspro.com/ (скриншоты) или http://www.thumbalizr.com/ (миниатюры).