2010-02-22 73 views
17

是否可以在Perl中編寫腳本來打開不同的URL並保存每個腳本的屏幕截圖?如何使用Perl截取網頁截圖?

+0

這很難,Perl無法渲染一個網頁來保存屏幕截圖。 – 2010-02-22 17:48:46

+0

Python或任何其他腳本語言? – fixxxer 2010-02-22 17:54:11

+10

@Murali:這並不意味着你不能使用Perl。看到我的帖子下面。 – Zaid 2010-02-22 18:50:57

回答

24

您可以使用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();</code></pre> 
+0

我爲PerlTricks寫了這個模塊:[從Perl控制Firefox](http:// perltricks。com/article/138/2014/12/8/Controlling-Firefox-from-Perl) – 2015-10-27 18:07:23

4

你也可以使用Win32::IE::Mechanize渲染使用IE的網頁,然後Win32::Screenshot捕捉頁面。您可能需要做一些工作來確定截圖的位置,但這不應該太難。

這將是Windows平臺唯一的解決方案,當然,但可能就足夠了。

+0

看起來像Win32 :: IE :: Mechanize不再與Activestate和/或Windows 7一起工作:https://rt.cpan。 org/Public/Dist/Display.html?Name = Win32-IE-Mechanize,但看起來它仍然有效http://search.cpan.org/dist/Win32-IEAutomation-0.5/lib/Win32/IEAutomation.pm – 2012-08-01 03:04:23

9

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

另一種不需要使用瀏覽器的方法是使用ImageMagickHTML2PS來轉換圖像。不過要注意的是,這不是微不足道的,而且幾乎不可能(最後我嘗試過)在Windows上正常工作。

一旦安裝了ImageMagick,最簡單的方法就是對ImageMagick安裝的convert程序運行系統調用。如果你想要一個不太冒犯的方法,你可以使用API​​。

關於此方法,您可以在PerlMonks上找到極好的討論。