2010-02-22 4 views
17

Ist es möglich, ein Skript in Perl zu schreiben, das verschiedene URLs öffnet und jeweils einen Screenshot speichert?Wie kann ich Screenshots von Webseiten mit Perl machen?

+0

Das wäre schwer, Perl kann keine Webseite rendern, um einen Screenshot zu speichern. –

+0

Python oder eine andere Skriptsprache? – fixxxer

+10

@Murali: Das bedeutet nicht, dass Sie Perl nicht verwenden können. Siehe meinen Beitrag unten. – Zaid

Antwort

24

Sie können WWW::Mechanize::Firefox verwenden, um eine Firefox-Instanz zu steuern und die gerenderte Seite mit $mech->content_as_png zu sichern.

Beachten Sie jedoch, dass die Einrichtung eine große Herausforderung darstellen kann.

Wenn alles wie erwartet funktioniert, können Sie einfach ein Skript wie dieses verwenden, um Bilder der gewünschten Websites zu erstellen, aber Sie sollten Firefox starten und manuell auf die gewünschte Breite skalieren (Höhe spielt keine Rolle, WWW :: Mechanize) :: Firefox speichert immer die ganze Seite).

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

Ich schrieb über dieses Modul für PerlTricks: [Kontrolle Firefox von Perl] (http: // perltricks.com/article/138/2014/12/8/Controlling-Firefox-from-Perl) –

4

Sie könnten auch Win32::IE::Mechanize verwenden, um die Web-Seite mit IE zu machen, und dann Win32::Screenshot die Seite zu erfassen. Sie müssen wahrscheinlich etwas arbeiten, um herauszufinden, wo Sie den Screenshot machen können, aber das sollte nicht zu schwer sein.

Dies wird natürlich nur eine Windows-Plattform-Lösung, aber kann ausreichen.

+0

Sieht aus wie Win32 :: IE :: Mechanize funktioniert nicht mehr mit Activestate und/oder Windows 7: https: //rt.cpan. org/Public/Dist/Display.html? Name = Win32-IE-Mechanize, aber das sieht so aus, als ob es noch funktioniert http://search.cpan.org/dist/Win32-IEAutomation-0.5/lib/Win32/IEAutomation.pm –

9

Verwenden Sie das Modul WWW::Selenium, für das Sie eine Selenium Remote Control Sitzung eingerichtet haben und ausgeführt werden müssen.

Die capture_entire_page_screenshot() Methode sollte Sie zum Laufen bringen.

Von WWW::Selenium auf CPAN:

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

Speichert den gesamten Inhalt des aktuellen Fensters Leinwand in eine PNG-Datei ...


Ein typisches Skript:

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

Ein anderer Ansatz, der die Verwendung eines Browsers nicht erfordert, besteht darin, ImageMagick und HTML2PS zu verwenden, um das Bild zu konvertieren. Seien Sie gewarnt, dies ist nicht trivial, und es ist fast unmöglich (zuletzt habe ich versucht), dies funktioniert auf Windows richtig zu machen.

Sobald ImageMagick installiert ist, besteht der einfachste Ansatz darin, einfach einen Systemaufruf an das convert-Programm auszuführen, das ImageMagick installiert. Wenn Sie weniger hackisch vorgehen möchten, können Sie die API PerlMagickImageMagick verwenden.

Es gibt eine ausgezeichnete Diskussion zu diesem Ansatz finden Sie unter PerlMonks.

Verwandte Themen