支持动态加载的图片实时显示,添加手动加载按钮便于操作。
< 脚本获取网站所有图片的反馈
您好,实际使用的时候我发现批量下载图片的反馈很弱,点击之后感觉没有动静,而且这个方法引入了额外的压缩步骤。我借助chatGPT用GM_download并发下载,不知你还有没有优化的建议。另外感觉还可以加一个导出要下载的图片的url的功能,方便用curl或wget这类的工具批量下载。修改的代码如下:downloadAll() { if (this.imgList.size === 0) { alert('没有找到可下载的图片。'); return; } const downloadQueue = Array.from(this.imgList); const maxConcurrentDownloads = 5; // 最大并发数 let activeDownloads = 0; // 当前正在进行的下载数量 const processNext = () => { // 如果队列为空且没有正在下载的任务,表示所有图片已经下载 if (downloadQueue.length === 0 && activeDownloads === 0) { alert('所有图片已下载完成!'); return; } // 如果当前正在下载的图片数量少于最大并发数,并且队列中还有图片,则开始下载 if (activeDownloads < maxConcurrentDownloads && downloadQueue.length > 0) { const src = downloadQueue.shift(); const fileName = `image_${Date.now()}.png`; // 设置文件名 activeDownloads++; GM_download({ url: src, name: fileName, onload: () => { activeDownloads--; // 下载完成,减少正在下载的任务数量 processNext(); // 继续下载下一个图片 }, onerror: () => { console.error(`无法下载图片: ${src}`); activeDownloads--; // 下载失败,减少正在下载的任务数量 processNext(); // 继续下载下一个图片 } }); } }; processNext(); // 启动第一个下载任务}
登录以发表回复。
您好,实际使用的时候我发现批量下载图片的反馈很弱,点击之后感觉没有动静,而且这个方法引入了额外的压缩步骤。我借助chatGPT用GM_download并发下载,不知你还有没有优化的建议。另外感觉还可以加一个导出要下载的图片的url的功能,方便用curl或wget这类的工具批量下载。修改的代码如下:
downloadAll() {
if (this.imgList.size === 0) {
alert('没有找到可下载的图片。');
return;
}
const downloadQueue = Array.from(this.imgList);
const maxConcurrentDownloads = 5; // 最大并发数
let activeDownloads = 0; // 当前正在进行的下载数量
const processNext = () => {
// 如果队列为空且没有正在下载的任务,表示所有图片已经下载
if (downloadQueue.length === 0 && activeDownloads === 0) {
alert('所有图片已下载完成!');
return;
}
// 如果当前正在下载的图片数量少于最大并发数,并且队列中还有图片,则开始下载
if (activeDownloads < maxConcurrentDownloads && downloadQueue.length > 0) {
const src = downloadQueue.shift();
const fileName = `image_${Date.now()}.png`; // 设置文件名
activeDownloads++;
GM_download({
url: src,
name: fileName,
onload: () => {
activeDownloads--; // 下载完成,减少正在下载的任务数量
processNext(); // 继续下载下一个图片
},
onerror: () => {
console.error(`无法下载图片: ${src}`);
activeDownloads--; // 下载失败,减少正在下载的任务数量
processNext(); // 继续下载下一个图片
}
});
}
};
processNext(); // 启动第一个下载任务
}