Пытаюсь создать небольшой JavaScript, который загрузит все мои электронные книги (например) на Humble Bundle. Я понимаю, что нечто подобное уже было сделано ранее, но все решения, с которыми я сталкивался до сих пор, работают в разделе закупки , а не в библиотеке . Я также понимаю, что Humble Bundle в какой-то момент добавил кнопку «массовая загрузка» на каждой странице покупки электронной книги, что сделало вышеупомянутые решения устаревшими.
Я предпочитаю не просить помощи, но сейчас я просто хочу, чтобы мой сценарий работал и узнал, почему это не так. Я не хочу выбирать легкий путь, используя сторонние надстройки или приложения (например, менеджеры загрузки). Я пробовал это и в jQuery, но получил те же результаты, что и ниже. Хотелось бы сделать это в Vanilla JS, но приветствую любые полезные предложения!
Вот мой код:
var domItem = document.querySelectorAll("div.selector-content div.text-holder h2"), domItemName, domItemDownload;
domItem.forEach(function(itemBtn) {
itemBtn.click();
domItemName = document.querySelector("div.details-holder div.details-heading div.text-holder h2");
domItemDownload = document.querySelectorAll("div.details-holder div.js-button-holder div.js-download-button h4");
domItemDownload.forEach(function(downloadBtn) {
console.log(domItemName.innerText + ": " + downloadBtn.innerText);
downloadBtn.click();
});
});
То, что я ожидаю получить для каждой электронной книги, - это вывод имени электронной книги и типа загружаемой е-книги книги (PDF и т. Д.), А затем переход к URL-адресу, полученному путем нажатия на кнопку загрузки. , Пример URL здесь: https://dl.humble.com/torrents/unixpowertools.mobi.torrent?gamekey=xxxxx&ttl=xxxxx&t=xxxxx
.
Это работает, как и ожидалось, до момента, когда он загружает все торрент-файлы: в журнале консоли браузера будет указано, что он перешел на каждый URL-адрес, чтобы загрузить нужный файл, но только последняя запись загружается . Например, скажем, у меня есть три электронные книги, и у каждой из них есть торрент-файл PDF, сценарий будет щелкать все, как ожидалось, и браузер скажет что-то вроде следующего:
CSS Refactoring: PDF main.min.js:10:15514
CSS: The Definitive Guide: PDF main.min.js:10:15514
D3 Data-Driven Documents Pocket Primer: PDF main.min.js:10:15514
Navigated to https://dl.humble.com/torrents/cssrefactoring.pdf.torrent?gamekey=xxxxx&ttl=xxxxx&t=xxxxx
Navigated to https://dl.humble.com/torrents/css_thedefinitiveguide.pdf.torrent?gamekey=xxxxx&ttl=xxxxx&t=xxxxx
Navigated to https://dl.humble.com/torrents/d3datadrivendocuments_pocketprimer.pdf.torrent?gamekey=xxxxx&ttl=xxxxx&t=xxxxx
Однако я получу торрент-файл только для этой последней записи. Неважно, что это за электронная книга: прямая загрузка или торрент-файл, независимо от того, где я запускаю и заканчиваю цикл, или использую ли я Chrome или Firefox, я всегда загружаю только файл последней записи.
Итак, увидев, что я могу получить URL для загрузки электронных книг, нажав на кнопки загрузки, я попробовал случайные из них прямо в браузере и смог загрузить каждую из них по отдельности, так что я знаю, что URL работают как и ожидалось. Чтобы получить ожидаемый результат, я скопировал все URL-адреса в журнале консоли и поместил их в массив. Затем я перебрал массив с помощью следующего скрипта, но все равно получил тот же результат:
var urls = [
'https://dl.humble.com/torrents/cssrefactoring.pdf.torrent?gamekey=xxxxx&ttl=xxxxx&t=xxxxx',
'https://dl.humble.com/torrents/css_thedefinitiveguide.pdf.torrent?gamekey=xxxxx&ttl=xxxxx&t=xxxxx',
'https://dl.humble.com/torrents/d3datadrivendocuments_pocketprimer.pdf.torrent?gamekey=xxxxx&ttl=xxxxx&t=xxxxx'
];
for (var i = 0; i < urls.length; i++) {
document.location.href = urls[i];
};
Судя по моим исследованиям, это звучит как проблема закрытия . Однако использование методов, подобных тем, которые можно найти в https://dzone.com/articles/why-does-javascript-loop-only-use-last-value, не решило проблему. Кроме того, я понимаю, что проблема с закрытием заключается в том, что я не должен видеть, что браузер "перемещается" по каждому URL, а вместо этого ожидаю, что он скажет, что он много раз переходил на один и тот же URL.
Я также подумал, что, возможно, это связано с тем, что браузер слишком быстро загружает слишком много файлов с сервера, поэтому я попытался реализовать ожидание тремя способами: setTimeout
, setInterval
и написал функцию для пока не истечет указанное время (плохо, я знаю). Это все равно дало тот же результат, но медленнее.
Я уверен, что проблема в чем-то простом, но, работая над этим конкретным заданием и отказываясь от него много раз, мне просто нужно несколько свежих, более опытных глаз.
Это мой первый пост, поэтому я ценю ваше время, прочитав его, и дайте мне знать, если вам нужна дополнительная информация или мне нужно исправить свой пост.