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

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

Ответы [ 5 ]

25 голосов
/ 22 февраля 2010

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

my $fh = file( 'test.png' )->open( '> :raw' );
print $fh $mech->content_as_png();
9 голосов
/ 22 февраля 2010

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

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

С WWW :: Selenium на 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;
8 голосов
/ 22 февраля 2010

Другой подход, который не требует использования браузера, заключается в использовании ImageMagick и HTML2PS для преобразования изображения. Имейте в виду, однако, что это не тривиально, и почти невозможно (в последний раз я пытался) заставить это работать на Windows должным образом.

После установки ImageMagick самый простой подход - просто запустить системный вызов программы convert, которую устанавливает ImageMagick . Если вам нужен менее хакерский подход, вы можете использовать PerlMagick ImageMagick API.

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

4 голосов
/ 22 февраля 2010

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

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

3 голосов
/ 23 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...