Я хочу автоматизировать загрузку с большого количества файлов сайта.Для этого я перебираю множество страниц, получая идентификатор из файлов.Я делаю это, используя selenium и Perl-скрипт.
Поскольку нет возможности напрямую загружать файл в selenium, и я не могу использовать какой-то вид curl, потому что мне нужен сеанс из selenium, который я пытаюсьиспользуйте следующий обходной путь, который я уже использовал в других проектах.
Я создаю элемент JS и выполняю скрипт с URL для каждого файла, например:
var a = document.createElement("a");
a.setAttribute("href", "https://myurl.com/id1/export?format=TCX");
a.setAttribute("download", "https://myurl.com/id1/export?format=TCX");
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
Но когда япопытаться сделать это, я становлюсь следующей ошибкой в скрипте:
Ошибка при выполнении команды: ссылка на устаревший элемент: ссылка на элемент является устаревшей;либо элемент больше не присоединен к DOM, он не находится в текущем контексте фрейма, либо документ был обновлен в строке /1.Library/Perl/5.18/Selenium/Remote/Driver.pm 391. в / Library / Perl /5.18 / Selenium / Remote / Driver.pm строка 348.
Если я воспроизвожу это непосредственно в консоли Firefox, я получу это:
TransitionRejection (тип: 2, сообщение: Переход был заменен другим переходом, подробно: Переход № 2 ('top.ids.info.byId' {"myId1": "XXXXX", "myId2": "YYYYYY"} -> 'home' {"feedId ": null," tag ": null}))
Если я просто получаю доступ к URL с помощью обычного GET из браузера, я получаю приглашение на загрузку без проблем.(Пока я вошел в систему)
Если я получаю URL с селеном, он работает для первого URL, но затем остается там и не загружает второй файл.
$driver->get($download_url1); # This one is downloaded
$driver->get($download_url2); # This line is not executed