diff --git a/static/Release_Notes.md b/static/Release_Notes.md index 6ea0d82..198c98b 100644 --- a/static/Release_Notes.md +++ b/static/Release_Notes.md @@ -18,13 +18,14 @@ **用户脚本更新内容:** -**版本号:1.8.4** +**版本号:1.8.6** 1. 重构自动滚动页面功能 2. 新增文件名称长度限制 3. 优化文件名称过滤规则 4. 新增文件打包下载功能 5. 优化作品文件下载速度 -6. 优化文件下载功能 +6. 新增下载失败重试机制 +7. 优化文件下载功能
注意:自动滚动页面功能默认关闭!启用该功能可能会被小红书检测为自动化操作,从而导致账号受到风控或封禁!该功能在使用过程中遇到任何问题请及时向开发者反馈!
diff --git a/static/XHS-Downloader.js b/static/XHS-Downloader.js index c9a0193..f1b2f3a 100644 --- a/static/XHS-Downloader.js +++ b/static/XHS-Downloader.js @@ -1,7 +1,7 @@ // ==UserScript== // @name XHS-Downloader // @namespace https://github.com/JoeanAmier/XHS-Downloader -// @version 1.8.5 +// @version 1.8.6 // @description 提取小红书作品/用户链接,下载小红书无水印图文/视频作品文件 // @author JoeanAmier // @match http*://xhslink.com/* @@ -240,29 +240,34 @@ XHS-Downloader 用户脚本 详细说明: console.info(`文件已成功下载: ${name}`); } - const downloadFile = async (link, name, trigger = true,) => { - try { - // 使用 fetch 获取文件数据 - const response = await fetch(link, {method: "GET"}); + const downloadFile = async (link, name, trigger = true, retries = 5) => { + for (let attempt = 1; attempt <= retries; attempt++) { + try { + // 使用 fetch 获取文件数据 + const response = await fetch(link, {method: "GET"}); - // 检查响应状态码 - if (!response.ok) { - console.error(`下载失败,状态码: ${response.status},URL: ${link}`); - return false; + // 检查响应状态码 + if (!response.ok) { + console.error(`下载失败,状态码: ${response.status},URL: ${link},尝试次数: ${attempt}`); + continue; // 继续下一次尝试 + } + + const blob = await response.blob(); + + if (trigger) { + triggerDownload(name, blob); + return true; + } else { + return blob; + } + } catch (error) { + console.error(`下载失败 (${name}),错误信息:`, error, `尝试次数: ${attempt}`); + if (attempt === retries) { + return false; // 如果达到最大重试次数,返回失败 + } } - - const blob = await response.blob(); - - if (trigger) { - triggerDownload(name, blob); - return true; - } else { - return blob; - } - } catch (error) { - console.error(`下载失败 (${name}),错误信息:`, error); - return false; } + return false; // 如果所有尝试都失败,返回失败 }; const downloadFiles = async (urls, name,) => {