#javascript #download #tampermonkey #userscripts
#javascript #Скачать #tampermonkey #пользовательские скрипты
Вопрос:
Этот скрипт предназначен для получения списка URL-адресов изображений и загрузки их всех как можно быстрее. Проблема в том, что он пропускает некоторые, и я не уверен, почему. Связано ли это с ограничением Chrome количества параллельных загрузок? Я попытался учесть это с помощью onload
функции GM_download
.
Он загружает около половины файлов из списка. Вероятность успеха возрастает, если я увеличиваю sleep()
таймер с 200
на что-то вроде 2000
, но я не знаю, почему, учитывая, что я полагаюсь на onload
функцию, чтобы правильно указать, когда загрузка завершена (и, следовательно, когда Chrome может принять новую загрузку)
// ==UserScript==
// @name Image Save Test
// @namespace ist
// @include *testimages.juliaimages.org/
// @version 1.0.0
// @run-at document-end
// @noframes true
// @grant GM_download
// ==/UserScript==
var currentDownloads = 0;
var queue = [ 'https://testimages.juliaimages.org/thumbnails/autumn_leaves.png',
'https://testimages.juliaimages.org/thumbnails/blobs.png',
'https://testimages.juliaimages.org/thumbnails/cameraman.png',
'https://testimages.juliaimages.org/thumbnails/fabio_color_512.png',
'https://testimages.juliaimages.org/thumbnails/earth_apollo17.png',
'https://testimages.juliaimages.org/thumbnails/fabio_gray_256.png',
'https://testimages.juliaimages.org/thumbnails/hela-cells.png',
'https://testimages.juliaimages.org/thumbnails/lake_gray.png',
'https://testimages.juliaimages.org/thumbnails/house.png',
'https://testimages.juliaimages.org/thumbnails/jetplane.png',
'https://testimages.juliaimages.org/thumbnails/lake_color.png',
'https://testimages.juliaimages.org/thumbnails/lena_gray_16bit.png',
'https://testimages.juliaimages.org/thumbnails/lighthouse.png',
'https://testimages.juliaimages.org/thumbnails/mandril_color.png',
'https://testimages.juliaimages.org/thumbnails/mandril_gray.png',
'https://testimages.juliaimages.org/thumbnails/mountainstream.png',
'https://testimages.juliaimages.org/thumbnails/peppers_color.png',
'https://testimages.juliaimages.org/thumbnails/moonsurface.png',
'https://testimages.juliaimages.org/thumbnails/peppers_gray.png',
'https://testimages.juliaimages.org/thumbnails/toucan.png',
'https://testimages.juliaimages.org/thumbnails/pirate.png'];
(async function() {
while (queue.length > 0) {
if (currentDownloads > 5) {
await sleep(200);
continue;
}
var item = queue.shift();
(function(_item) {
GM_download({
url: _item,
name: _item.match(/([0-9A-Za-z _-] )(?=.png)/)[0],
saveAs: false,
onerror: function(error) {
queue.unshift(_item);
currentDownloads--;
},
onload: function() {
currentDownloads--;
}
});
currentDownloads ;
})(item);
}
})();
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
Комментарии:
1. Ваш код работает для меня в Violentmonkey, так что, вероятно, это ошибка в Tampermonkey.
Ответ №1:
Это было исправлено в БЕТА-версии TM 4.12.6126. derjanb ограничил количество загружаемых файлов до 3 каждые 500 мс:
Эта проблема должна быть исправлена в БЕТА-версии TM 4.12.6126. 😅 Теперь я ограничиваю количество загрузок до 3 на 500 мс. Здесь это хорошо работает, и я думаю, что общая скорость не так важна. Тем более, что установка режима загрузки на «Browser API» устраняет полную проблему.
Обходной путь: в настройках установите режим конфигурации на расширенный, затем прокрутите и в разделе Загрузки БЕТА-версии установите режим загрузки для API браузера. (источник)