如何使用Perl截取网页截图?

时间:2010-02-22 17:45:23

标签: perl

是否可以在Perl中编写一个打开不同URL的脚本并保存每个URL的截图?

5 个答案:

答案 0 :(得分:25)

您可以使用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();

答案 1 :(得分:9)

使用WWW::Selenium模块,您需要启动并运行Selenium Remote Control会话。

capture_entire_page_screenshot()方法可以让您启动并运行。

来自CPAN的WWW::Selenium

  

$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;

答案 2 :(得分:8)

另一种不需要使用浏览器的方法是使用ImageMagickHTML2PS来转换图像。但要注意,这不是微不足道的,而且几乎不可能(最后我尝试过)让Windows正常工作。

安装ImageMagick后,最简单的方法是只对ImageMagick安装的convert程序运行系统调用。如果您想要一种不那么强硬的方法,可以使用PerlMagick ImageMagick API。

您可以在PerlMonks上找到关于此方法的精彩讨论。

答案 3 :(得分:4)

您还可以使用Win32::IE::Mechanize使用IE呈现网页,然后使用Win32::Screenshot来捕获网页。你可能需要做一些工作来弄清楚截图的位置,但这不应该太难以理解。

当然,这只是一个Windows平台解决方案,但可能就足够了。

答案 4 :(得分:3)

使用第三方网络服务API,例如http://webshotspro.com/(屏幕截图)或http://www.thumbalizr.com/(缩略图)。