2016-07-22 5 views
2

Ich habe Interesse, programmatisch einen Screenshot einer Webseite mit Perl zu machen. Ich bin gekommen, across diese Lösung:Ist es möglich, den Screenshot einer Webseite ohne grafische Benutzeroberfläche zu erstellen?

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(); 

aber wenn ich versuche, diesen Code auszuführen, erhalte ich:

fehlgeschlagen, Fehler verbinden Verbinden mit "localhost", Port 4242: Connection refused an /usr/local/share/perl/5.20.2/MozRepl/Client.pm Leitung 144

Es wurde vorgeschlagen, dass dieses Versagen zu einem geschlossenen Anschluss (Debian Jessie, Apache2, Perl 5,20) zurückzuführen ist, oder MozRepl nicht inst oder nicht richtig konfiguriert.

Der Debian-Server ist nur eine Befehlszeile und ansonsten keine grafische Schnittstelle. Als ich cpan WWW::Mechanize::Firefox laufe ich am Ende bekommen:

CPAN: Storable loaded ok (v2.49_01) 
Reading '/root/.cpan/Metadata' 
    Database was generated on Fri, 22 Jul 2016 17:53:33 GMT 
CPAN: Module::CoreList loaded ok (v5.20150214) 
WWW::Mechanize::Firefox is up to date (0.79). 

Und wenn ich cpan MozRepl laufen, ich am Ende bekommen:

CPAN: Storable loaded ok (v2.49_01) 
Reading '/root/.cpan/Metadata' 
    Database was generated on Fri, 22 Jul 2016 17:53:33 GMT 
CPAN: Module::CoreList loaded ok (v5.20150214) 
MozRepl is up to date (0.06). 

So wie der Titel fragt, kann die obige Code arbeiten, wenn es keine grafische Oberfläche? Wenn ja, was kann ich tun, um dieses Problem zu beheben und zu beheben?

+1

Sie benötigen einen kopflosen Browser wie PhantomJS. Ich habe [WWW :: Mechanize :: PhantomJS] nicht empfohlen (https://metacpan.org/pod/WWW::Mechanize::PhantomJS), weil es nicht wirklich gepflegt wurde, aber der Autor hat zwei ausgegeben veröffentlicht dieses Jahr nach einer Pause von zwei Jahren, so dass Sie einen Schuss geben könnten. Als ich es ausprobierte, gab es einen Fehler beim Rendern von Screenshots, der für mich ein Deal-Breaker war; Ich habe einen Patch eingereicht, aber nach einer Weile ohne Antwort musste ich Perl fallen lassen und einfach PhantomJS verwenden. (Mein Patch wurde vor ein paar Wochen endlich angewendet.) – ThisSuitIsBlackNot

Antwort

2

2 Lösungen:

+0

Ich habe diesen Link verwendet, um PhantomJS herunterzuladen und zu installieren: https://gist.github.com/julionc/7476620 Sobald es erfolgreich installiert wurde, installierte ich 'WWW :: Mechanize :: PhantomJS' über cpan. Der Link, den @ThisSuitIsBlackNot in seinem Kommentar bereitgestellt hat, enthält die Dokumentation, wie man das PNG erhält. – KingsInnerSoul

Verwandte Themen