繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM