使用Perl www :: Mechanize :: Firefox在Firefox中下载



我有一个我想从不同站点下载的PDF文件的列表。

在我的Firefox中,我选择了将PDF文件直接保存到特定文件夹的选项。

我的计划是使用www :: Mechanize :: perl中的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自动下载文件时,没有加载页面。因此,从未解雇" Domcontentloade"事件。这导致我的代码中暂停。

我设置了该功能,以免使用以下选项

来加载页面
$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 ::机械化很可能比www ::机械化:: 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代表!

最新更新