是否可以在没有图形界面的情况下拍摄网页截图?
我有兴趣以编程方式使用Perl的网页截图。我来across此解决方案:是否可以在没有图形界面的情况下拍摄网页截图?
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();
但是当我尝试运行这段代码,我得到:
无法连接,连接到“本地主机”,端口4242的问题: 连接被拒绝在/usr/local/share/perl/5.20.2/MozRepl/Client.pm 线144
有人建议,该故障是由于闭合端口(Debian的杰西,Apache2的,Perl的5.20),或MozRepl不安装取消或未正确配置。
Debian服务器只是一个命令行,否则就没有图形界面。当我运行cpan WWW::Mechanize::Firefox
我得到结尾:
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).
当我运行cpan MozRepl
,我在最后得到:
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).
所以作为标题问,可以在上面的代码工作,如果有没有图形界面?如果是的话,我能做些什么来调试和解决这个问题?
2解决方案:
Xvfb来创建一个无头的X服务器,并且有它
使用幻影运行Firefox的实例,这似乎是一个很好的教程:http://blogs.perl.org/users/robhammond/2013/02/web-scraping-with-perl-phantomjs.html
我使用此链接下载并安装PhantomJS:https://gist.github.com/julionc/7476620成功安装后,我安装了'WWW :: Mechanize :: PhantomJS'通过cpan。 @ThisSuitIsBlack没有在他的评论中提供的链接有关于如何获得PNG的文档。 – KingsInnerSoul
你需要像PhantomJS这样的无头浏览器。我没有推荐过[WWW :: Mechanize :: PhantomJS](https://metacpan.org/pod/WWW::Mechanize::PhantomJS),因为它并没有真正维持,但作者已经推出了两个经过两年的间歇后,今年才会发布,所以你可能会这样做。当我尝试它时,出现了一个渲染截图的错误,这对我来说是一种破坏行为;我提交了一个补丁,但过了一段时间没有回应,我不得不放弃Perl,只使用普通的PhantomJS。 (我的补丁在几个星期前终于应用了。) – ThisSuitIsBlackNot