[英]Downloads in Firefox using Perl WWW::Mechanize::Firefox
我有要从不同站点下载的pdf文件的URL列表。
在我的Firefox中,我选择了将PDF文件直接保存到特定文件夹的选项。
我的计划是在perl中使用WWW :: Mechanize :: Firefox来使用Firefox下载每个文件(在列表中-一对一),并在下载后重命名该文件。
我用下面的代码来做到这一点:
use WWW::Mechanize::Firefox;
use File::Copy;
# @list contains the list of links to pdf files
foreach $x (@list) {
my $mech = WWW::Mechanize::Firefox->new(autoclose => 1);
$mech->get($x); #This downloads the file using firefox in desired folder
opendir(DIR, "output/download");
@FILES= readdir(DIR);
my $old = "output/download/$FILES[2]";
move ($old, $new); # $new is the URL of the new filename
}
当我运行文件时,它将在Firefox中打开第一个链接,然后Firefox将文件下载到所需目录。 但是,此后,“新选项卡”没有关闭,文件也没有重命名,代码继续运行(就像遇到了无休止的循环),没有其他文件被下载。
这里发生了什么? 为什么代码不起作用? 如何关闭选项卡并使代码读取列表中的所有文件? 有其他替代下载方式吗?
解决了问题。
功能,
$mech->get()
等待页面加载时Firefox触发“ DOMContentLoaded” Firefox事件。 由于我将Firefox设置为自动下载文件,因此没有页面被加载。 因此,“ DOMContentLoaded”事件从未触发过。 这导致我的代码暂停。
我通过使用以下选项将函数设置为不等待页面加载
$mech->get($x, synchronize => 0);
在此之后,我增加了60秒的延迟,以允许Firefox在代码进行之前下载文件
sleep 60;
因此,我的最终代码如下所示
use WWW::Mechanize::Firefox;
use File::Copy;
# @list contains the list of links to pdf files
foreach $x (@list) {
my $mech = WWW::Mechanize::Firefox->new(autoclose => 1);
$mech->get($x, synchronize => 0);
sleep 60;
opendir(DIR, "output/download");
@FILES= readdir(DIR);
my $old = "output/download/$FILES[2]";
move ($old, $new); # $new is the URL of the new filename
}
如果我正确理解了您,则您具有指向实际pdf文件的链接。 在这种情况下,WWW :: Mechanize最有可能比WWW :: Mechanize :: Firefox更容易。 实际上,我认为几乎总是这样。 再说一次,观看浏览器的工作肯定更酷。
use strict;
use warnings;
use WWW::Mechanize;
# your code here
# loop
my $mech = WWW::Mechanize->new(); # Could (should?) be outside of the loop.
$mech->agent_alias("Linux Mozilla"); # Optionally pretend to be whatever you want.
$mech->get($link);
$mech->save_content("$new");
#end of the loop
如果那绝对不是您想要的,那么我的封面故事将是我不想打破我的666代表!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.