Подтвердить что ты не робот

Как сделать скриншоты веб-страниц с помощью Perl?

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

4b9b3361

Ответ 1

Вы можете использовать WWW::Mechanize::Firefox для управления экземпляром Firefox и сбросить отображаемую страницу с помощью $mech->content_as_png.

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

Если все работает так, как ожидалось, вы можете просто использовать script, как это, чтобы сбрасывать изображения на нужные веб-сайты, но вы должны запустить 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();</code></pre>

Ответ 2

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

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

Сохраняет все содержимое текущего холста окна в файл PNG...


Типичный script:

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;

Ответ 3

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

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

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

Ответ 4

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

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