Perl 使用Mozrepl使用WWW::Mechanize::FireFox创建缩略图-一些调试尝试

Perl 使用Mozrepl使用WWW::Mechanize::FireFox创建缩略图-一些调试尝试,perl,parsing,firefox-addon,mechanize,mozrepl,Perl,Parsing,Firefox Addon,Mechanize,Mozrepl,我运行这个脚本,它是用来做一些网站截图的 我还启动并运行了mozrepl 这里我们有一些请求的URL文件。。。请注意,这只是真实列表的一小部分-真实列表要长得多。它包含3500多行和URL http://www.unifr.ch/sfm http://www.zug.phz.ch http://www.schwyz.phz.ch http://www.luzern.phz.ch http://www.schwyz.phz.ch http://www.phvs.ch http://www.phtg

我运行这个脚本,它是用来做一些网站截图的 我还启动并运行了mozrepl

这里我们有一些请求的URL文件。。。请注意,这只是真实列表的一小部分-真实列表要长得多。它包含3500多行和URL

http://www.unifr.ch/sfm
http://www.zug.phz.ch
http://www.schwyz.phz.ch
http://www.luzern.phz.ch
http://www.schwyz.phz.ch
http://www.phvs.ch
http://www.phtg.ch
http://www.phsg.ch
http://www.phsh.ch
http://www.phr.ch
http://www.hepfr.ch/
http://www.phbern.ch
http://www.ph-solothurn.ch
http://www.pfh-gr.ch
http://www.ma-shp.luzern.phz.ch
http://www.heilpaedagogik.phbern.ch/
奇怪的是输出-见下文。。。 问题:我应该更改脚本吗

为什么要使用以下小脚本对输出进行ge处理:

#!/usr/bin/perl

use strict;
use warnings;
use WWW::Mechanize::Firefox;

my $mech = new WWW::Mechanize::Firefox();

open(INPUT, "<urls.txt") or die $!;

while (<INPUT>) {
        chomp;
        print "$_\n";
        $mech->get($_);
        my $png = $mech->content_as_png();
        my $name = "$_";
        $name =~s/^www\.//;
        $name .= ".png";
        open(OUTPUT, ">$name");
        print OUTPUT $png;
        sleep (5);
}
首先-我们需要执行open()、sysopen()或so+cket()调用,或者从FileHandle包调用构造函数 除此之外,closed filehandle输出上的print()也给出了很多答案,告诉我们我们没有使用autodie,也没有检查open的返回值。 最重要的是,我必须对它进行调试,并确保找到错误产生的原因

但是经过深思熟虑之后,我认为有必要更仔细地看看所有的测试内容-, 你对这个想法有什么看法?在使用之前,总是测试以确保文件是打开的。这意味着我们也应该养成使用三个选项的习惯

arg open():

open my $fh, '>', $name or die "Can't open file $name : $!";
print $fh $stuff;
嗯-我想我们可以或者应该在不使用
die()
的情况下解决这个问题, 但我们必须手动使用一些方法,让我们知道哪些文件无法创建。在我们的例子中,它看起来像上面显示的所有这些

更新在选择好的文件名时,您的意思是我需要一个文件名来存储图像。。注意:我想在本地存储所有这些文件。但是如果我有一个巨大的URL列表,那么我会得到一个巨大的输出文件列表。因此,我需要有好的文件名。我们能否在计划中反映这些事情和需求


最新更新;mechanize出现了一些错误。。。。我想是的

如果要打印二进制数据(jpg文件),必须显式设置。 第二,如果您不再需要文件处理程序,并且在打开时“或死”了,请关闭该文件处理程序。 第三,选择一个好的文件名

问候,

#/usr/bin/perl
严格使用;
使用警告;
使用WWW::Mechanize::Firefox;
my$mech=new WWW::Mechanize::Firefox();
打开(输入“,$名称)或模具$!;
binmode($out);
打印$out$png;
收尾(美元);
睡眠(5);
}

您好,亲爱的用户1126070-谢谢。我会照你的建议去做。如果我不再需要它,而你在打开时“或死”,我将显式地设置它并关闭一个filehandler。选择一个好的文件名意味着我需要一个文件名来存储图像。。注意:我想在本地存储它们。但是如果我有一个巨大的URL列表,那么我会得到一个巨大的输出文件列表。因此,我需要有好的文件名。我们能否在计划中反映这些事情和需要!?期待听到你的消息。我的意思是,提前很多“好文件名”来清理它们。删除“:/,/”和其他可能阻止创建它们的内容。我添加了一些regexp来实现这一点。hello user1126070 thx有很多额外的提示。你应该得到一个怪物的祝贺。欢迎日期;mechanize似乎有一些错误。。。。我想是的!!!你说什么!!??
print() on unopened filehandle FH at -e line 1 (#2) (W unopened) An I/O operation was attempted on a filehandle that w +as never initialized. 
arg open():

open my $fh, '>', $name or die "Can't open file $name : $!";
print $fh $stuff;
#!/usr/bin/perl

use strict;
use warnings;
use WWW::Mechanize::Firefox;

my $mech = new WWW::Mechanize::Firefox();

open(INPUT, "<urls.txt") or die $!;

while (<INPUT>) {
        chomp;
        next if $_ =~ m/http/i;
        print "$_\n";
        $mech->get($_);
        my $png = $mech->content_as_png();
        my $name = "$_";
        $name =~s#http://##is;
        $name =~s#/##gis;$name =~s#\s+\z##is;$name =~s#\A\s+##is;
        $name =~s/^www\.//;
        $name .= ".png";
        open(my $out, ">",$name) or die $!;
        binmode($out);
        print $out $png;
        close($out);
        sleep (5);
}