是否可以在Perl中编写一个打开不同URL的脚本并保存每个URL的截图?
答案 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)
另一种不需要使用浏览器的方法是使用ImageMagick和HTML2PS来转换图像。但要注意,这不是微不足道的,而且几乎不可能(最后我尝试过)让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/(缩略图)。