Загрузка файла с использованием perl & Firefox :: Marionette - PullRequest
1 голос
/ 13 апреля 2020

Попытка автоматизировать сканирование некоторых сайтов и особенно загрузку файлов с помощью perl & Firefox :: Marionette .

Это краткий пример кода (для загрузки файла).

#!/usr/bin/env perl

use 5.014;
use warnings;

use Firefox::Marionette();
use Path::Tiny;   

my $ff = Firefox::Marionette->new();
#my $ff = Firefox::Marionette->new(
#    visible => 1
#);

#my $dwl = 'https://www.curseforge.com/wow/addons/dazaralor-totems/download/2610166/file'; # direct download link (not work correctly)
my $dwl = 'https://www.curseforge.com/wow/addons/dazaralor-totems/download/2610166';     # download link, leading to redirect page
$ff->go($dwl);

while(!$ff->downloads()) { sleep 1 }
while($ff->downloading()) { sleep 1 }
foreach my $p ($ff->downloads()) {
    say $p;
    path($p)->copy('./toto.zip');
}
$ff->quit;

Запускает скрипт, зависает. Итак, попытался visible => 1, чтобы получить реальное окно, и скрипт зависает, поскольку ожидает подтверждения диалога открытия / сохранения, как показано на рисунке ниже:

enter image description here

После нажатия кнопки ОК файл загружается.

Вопрос в том, как обойти диалоговое окно подтверждения, чтобы можно было запускать сценарий в автономном режиме без ручного нажатия.

Также Любой другой способ загрузки файлов с вышеуказанного сайта приветствуется, он стоит за cloudflare, поэтому я не смог использовать некоторые базовые c LWP.

1 Ответ

1 голос
/ 14 апреля 2020

Вы можете обойти всплывающее окно загрузки, установив mime_types для файла (см. этот ответ для получения дополнительной информации). Используя предоставленный вами MIME-тип application/x-amz-json-1.0, в Ubuntu 19.10 у меня работает следующее:

use feature qw(say);
use strict;
use warnings;
use Path::Tiny;
use Firefox::Marionette ();
use Firefox::Marionette::Capabilities;

my $ff = Firefox::Marionette->new(
    mime_types             => ['application/x-amz-json-1.0'],
    visible                => 0,
    capabilities           => Firefox::Marionette::Capabilities->new(
        page_load_strategy => 'none'
    )
);
my $dwl = 'https://www.curseforge.com/wow/addons/dazaralor-totems/download/2610166/file';
$ff->go($dwl);
while(!$ff->downloads()) { say "No downloads yet.."; sleep 1 }
while($ff->downloading()) { say "Downloading.."; sleep 1 }
foreach my $p ($ff->downloads()) {
    path($p)->copy('./toto.zip');
}
$ff->quit;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...