Как я могу сделать скриншоты веб-страниц с Perl?

Можно ли написать скрипт на Perl, который открывает разные URL и сохраняет скриншот каждого из них?

5 ответов

Решение

Вы можете использовать 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://www.stackru.com/');

my $fh = file( 'test.png' )->open( '> :raw' );
print $fh $mech->content_as_png();

Использовать WWW::Selenium модуль, для которого вам нужно будет запустить сеанс Selenium Remote Control.

capture_entire_page_screenshot() метод должен заставить вас работать.

Из WWW:: Селен на CPAN:

$sel->capture_entire_page_screenshot($filename, $kwargs)

Сохраняет все содержимое текущего оконного холста в файл 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. Если вы хотите менее хакерский подход, вы можете использовать PerlMagick ImageMagick API.

Существует прекрасное обсуждение этого подхода, которое вы можете найти на PerlMonks.

Вы также можете использовать Win32:: IE:: Mechanize для рендеринга веб-страницы с помощью IE, а затем Win32:: Screenshot для захвата страницы. Вероятно, вам придется проделать небольшую работу, чтобы выяснить, где делать снимок экрана, но это не должно быть слишком невероятно сложно.

Конечно, это будет решение только для платформы Windows, но этого может быть достаточно.

Используйте сторонний API веб-службы, такой как http://webshotspro.com/ (скриншоты) или http://www.thumbalizr.com/ (миниатюры).

Другие вопросы по тегам