【问题标题】:How can I take screenshots of webpages with Perl?如何使用 Perl 截取网页截图?
【发布时间】:2011-01-19 17:59:13
【问题描述】:

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

【问题讨论】:

  • 那很难,Perl 不能为它渲染一个网页来保存屏幕截图。
  • Python 或任何其他脚本语言?
  • @Murali :这并不意味着您不能使用 Perl。请参阅下面的帖子。
  • 您只是保存屏幕截图,还是打算对图像进行处理?

标签: perl


【解决方案1】:

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

【讨论】:

【解决方案2】:

使用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;

【讨论】:

    【解决方案3】:

    另一种不需要使用浏览器的方法是使用ImageMagick 和HTML2PS 转换图像。但是请注意,这并非微不足道,而且几乎不可能(我上次尝试过)让它在 Windows 上正常工作。

    一旦安装了ImageMagick,最简单的方法就是对ImageMagick 安装的convert 程序运行系统调用。如果您想要一种不那么骇人听闻的方法,可以使用PerlMagick ImageMagick API。

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

    【讨论】:

      【解决方案4】:

      您也可以使用Win32::IE::Mechanize 使用IE 呈现网页,然后使用Win32::Screenshot 捕获页面。您可能需要做一些工作才能确定在哪里截取屏幕截图,但这应该不会太难。

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

      【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-25
        • 1970-01-01
        • 2022-10-14
        • 2010-09-08
        • 2013-06-15
        • 2015-09-25
        相关资源
        最近更新 更多