CHANGELOG
CHANGLOG
在 Pixiv 的 console 里隐藏这些脚本的消息:
-doubleclick.net -admanmedia.com -frame -popin -bpoadfkcbjbfhfodiogcnhhhpibjhbnh -_script.js -_app- -_app. -reach -ufs -pubads -google -tabool -openx -sync -userscript
19.3.0 2026-08-10
⚙️行为变更:当你修改了下载器的设置之后,所有 Pixiv 标签页里的设置都会同步变化
用户经常会打开多个 Pixiv.net 标签页。之前当你在一个标签页里修改了设置之后,其他标签页里的设置不会变化。现在,其他标签页默认会同步变化,所以所有标签页都会使用相同的设置。
⚠️这是一个行为变更。如果你想保持以前的行为,可以在下面的设置里选择旧版行为。
✨新增设置:当你修改设置时,其他标签页是否同步变化
这个设置位于“通用”-“管理设置”分类里。你可以选择“同步变化”(默认值)或者“保持不变”(旧版行为)。
✨新增设置:自动导出设置
这个设置位于“通用”-“管理设置”分类里,用来自动备份设置。默认未启用。
你可以选择两种策略:
1. 定时导出(默认每隔 24 小时导出一次)
2. 每当设置变化后立即导出
另外,考虑到这个功能会导出多个设置文件,所以现在下载器会建立 PPD Settings 文件夹来统一存放设置文件。
✨“用户阻止名单”改名为“用户屏蔽名单”,并添加了“快捷屏蔽用户”的功能
对“快捷屏蔽用户”功能的说明:
当你启用了“用户屏蔽名单”功能之后,把鼠标指针移动到任意用户的名字上,下载器就会显示屏蔽他的按钮,点击即可添加屏蔽。
以前屏蔽用户时,你需要手动复制他的 ID 并添加到输入框里,现在方便多了。
✨在“保存作品简介”设置里,你可以选择为哪些类型的作品保存简介
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/651
你可以选择作品类型:插画、漫画、动图、小说。
默认选择了前三个,也就是图像作品。默认未选择小说,因为在默认设置里,小说的简介会保存到小说文件内部,所以无需使用单独的文件来保存简介。
📝下载器导出的一些文件的名字里可能含有时间戳,现在我修改了时间字符串的格式
这些文件例如:导出的抓取结果、ID 列表、关注列表、书签列表等,通常是 JSON、TXT、CSV 文件。它们的文件名里含有时间戳。之前的格式是这样的:2026/3/26 20:58:54,看起来很怪异。这是因为里面原本的斜线和冒号不能作为文件名,需要替换成全角版本才能保存,但这样看起来怪怪的。
现在我把时间格式改成了 2026-08-08 00-30-34,里面没有全角符号,看起来更自然。
🐞修复问题:当标签别名里含有特殊字符时,可能导致程序错误
在 src\ts\setting\SetTagAlias.ts 里,每个列表项的删除按钮使用了 data-deleteRule="${alias}" 作为选择器,但有些 alias 可能不是合法的选择器。例如 button[data-deleteRule='Foster's Home for Imaginary Friends'] 是非法的,导致代码产生了语法错误。现在使用 CSS.escape 方法修复。
🐞修复问题:当“置顶的设置”区域的高度不足时,命名规则的加载列表显示不完整
上次更新简单修复过,但只是允许在父元素高度不足时滚动来查看加载列表,仍然不好用。主要问题是当容器高度很小时,同时只能显示 2 个列表项。用户滚动鼠标一次可能滚动大于 2 个列表项,导致某些列表项无法查看和选中。现在进行了彻底的优化,直接加大父元素的高度,使加载列表总是能完整显示。
🐞修复问题:当选择器界面使用的语言是 Wiki 里没有的语言时,打开的 Wiki 页面会 404
原因是:wiki 里的语言目前只有 zh-cn 和 en,没有其他语言。但之前打开 Wiki 链接的代码里错误使用了 lang.transl,这会返回下载器的界面语言,有 6 种。
当选择器的界面语言与 Wiki 里可用的语言不同时,打开的 URL 就是错误的。现在修复。
🐞修复问题:当用户启用了“点击收藏按钮时下载作品”功能时,在排行榜页面里无效
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/666
🐞修复问题:一些用户名里含有特殊的窄空格字符,导致在 Firefox 浏览器里无法下载他们的作品
根据 Discord 上一位用户的报告,当命名规则里含有用户名时,无法下载以下两个作者的作品:
1. https://www.pixiv.net/users/3043593
用户名 キ サ ム 虽然看上去是 3 个字,但其中包含两处不可见的 U+200A HAIR SPACE(窄空格):
キ U+200A サ U+200A ム
它属于 Unicode 的 Space_Separator 。虽然实际上 Windows 允许使用使用这样的文件夹名字,Chrome 也允许,但 Firefox 不允许,认为是不能出现在下载路径里的非法字符,所以产生了报错。,导致文件无法下载
2. https://www.pixiv.net/users/102195413
用户名 su xi xi 里包含两个 U+2006 字符:
su[U+2006]xi[U+2006]xi
同样,只有 Firefox 会对此报错。
现在下载器会过滤掉上面的特殊空格。
🕑更新了作品发布时间数据
19.2.0 2026-07-28
✨新功能:命名标记里的可选片段(当标记没有值时,忽略它的附属文字)
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/553
这个功能是为了处理这种情况:
1. 用户使用了可能为空的命名标记。例如,当作品不属于一个系列时,{series_title} 就不会输出系列标题。
2. 并且用户为它们添加了自定义字符,例如:系列:{series_title}
当文件名里没有系列标题时,会留下不需要的 系列:。为了移除这种不需要的自定义字符,你可以使用 [] 建立可选片段,例如 [系列:{series_title}]。当 [] 里的标记没有内容时,下载器会忽略整个片段,所以不会留下多余的字符。
你可以在“图像作品的命名规则”里点击“小技巧:可选片段”查看更详细的说明。
⚠️注意:这个功能可能会对少部分用户造成破坏性变更:
如果你之前就已经使用了 [] 包裹命名标记,例如 [{id}],现在它不会在文件名里输出 [] 符号。你需要额外添加一层 [],变成 [[{id}]],这样就可以和之前一样输出 [] 符号了。
✨添加了 2 个新的命名标记
- {page_type}:开始抓取时的页面类型名称,如 Artwork、UserHome、Bookmark。这是下载器内部划分的页面类型,有二十多种。有时划分的比较笼统,例如首页有插画、漫画、小说等子分类,但页面类型名称都是 Home。
- {page_id}:开始抓取时的页面 ID。它的设计目的是用页面 ID 来归纳该页面里的多个作品。例如:在作品页面里抓取相关作品时,这个标记会输出该页面的作品 ID(它只有一个),而非每个作品自己的 ID(多个)。只在以下情况有输出:1. 在作品页面里,输出该页面的作品 ID。2. 在用户主页、收藏页面、关注页面里,输出该页面的用户 ID。3. 在系列页面里,输出系列 ID。
✨在“合并系列小说时的命名规则”里添加了新的命名标记 {bmk}
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/655
- {bmk}:这个系列里所有小说的收藏数量之和,是数字。
🐞修复问题:在预览作品时,预览区域可能会显示之前预览的动图,或者预览图在显示之后隐藏
这是一个偶尔会发生的 bug,发生在预览过动图之后。表现主要有两种:
1. 在预览新的图片时,预览区域显示的仍然是之前预览的动图
2. 在预览新的图片时,图片可能会先正常显示,之后隐藏(图片的 display 错误的变成了 none)。由于此时预览区域并未隐藏,所以用户会看到带有半透明背景的空的预览区域,如图所示:
原因:由于多种因素叠加(预览动图、网络请求耗时、显示/隐藏预览区域的操作等),导致之前预览动图的实例没有被销毁,并且会一直操作预览区域里的 img 元素,导致 img 显示的图片错误,或者图片被隐藏。现在修复了此问题。
🐞修复问题:在特定情况下,当用户在预览作品时按下 C 键之后,只应该下载一张图片,但实际上下载了多张图片
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/661
之前下载器使用一个单独的对象 downloadOnlyPart 保存每个作品里只下载哪张图片的状态,但存在局限性,例如每个作品 ID 只有一份此状态,并且消费一次之后就会被重置。在一些偶然的边界情况里可能会出现问题,导致有时会下载作品里的所有图片。
这次修改把“只下载哪些图片”的索引附加到了 IDData 里,在逻辑上更合理,而且在对同一个作品进行多次设置索引、多次抓取时都能应用正确的索引。
🐞修复问题:当“置顶的设置”区域高度不足时,命名规则的加载列表显示不完整
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/659
🐞修复问题:在某个特定的文件名非法的情况里,没有把文件名处理为合法文件名,导致文件保存失败
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/661
🐞修复问题:在书签页面里,当启用了“在下载过的作品上显示边框”时,会遮挡住作品左下角的铅笔(编辑)图标
为了让边框不会被其他元素遮挡,我给它设置了 z-index: 1;,但这导致了在书签页面里,会遮挡住铅笔图标,导致用户无法点击这个图标。
在此页面里把边框的层级设置为 0 解决了这个问题。
🕑更新了作品发布时间数据
19.1.1 2026-07-18
🐞修复问题:在收藏页面里,“取消收藏所有已被删除的作品”功能会错误的取消收藏正常的作品
🐞修复问题:当系统 DPI 和网页缩放比例大于 100% 时,设置区域的底部可能无法完全显示
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/643
在高分屏容易发生此问题,通常情况是系统 DPI 缩放为 150%,浏览器缩放为 125% 时会出现此问题。
上次修复失败了(因为当时我的配置不会出现此问题,所以也没有验证修复是否有效),这次我调整 DPI 缩放后复现了此问题,重新进行了修复。
🐞修复问题:在手动选择作品时,点击动图的播放图标无法选择这个作品
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/629
🐞修复问题:修复问题:在移动端的作品页面里,快速收藏按钮(☆)带有默认样式
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/644
由于 button 的默认样式导致这个按钮不好看,现在修复。
😊优化导出和导入收藏列表的功能
下载器在导出收藏列表时,会保存用户为作品添加的自定义标签(这可能不同于作品本身的标签)。
在批量添加收藏时,如果有自定义标签,就会优先添加这些标签。
🕑更新了作品发布时间数据
19.1.0 2026-07-13
✨在系列小说页面里,可以选择部分小说进行合并
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/647
之前下载器总是会合并所有小说,现在可以只合并部分小说了。
操作方法:先使用“手动选择作品”功能选择部分小说,然后点击“合并系列小说”按钮来合并它们。
✨在下载小说时,下载器会应用“置换单词”设置
一些系列小说允许用户置换单词。这是由小说作者在系列资料里设置的,允许用户把特定单词替换成自定义文字。常见于角色名,例如用 △、〇代表两个角色的名字,这样用户可以把它们替换成自己想要的名字。
现在下载器对此功能进行了适配。如果用户设置了替换的单词,那么下载器在保存小说时也会进行相应的替换。
✨新增设置:在合并系列小说时,只要有一篇小说符合过滤条件,就保存该系列里的所有小说
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/635
举例说明:
假如你设置了收藏数量 > 100;
某个系列里有 10 篇小说,其中只有 1 篇小说符合条件。
在默认情况下(未启用此设置),下载器只会合并这 1 篇小说。
如果你启用了这个设置,那么下载器会合并所有小说。
✨在“下载小说里的内嵌图片”设置里添加了图片尺寸的选择
有些小说里的图片体积很大,所以一些用户希望可以保存尺寸较小的图片。现在我添加了图片尺寸的设置。
✨在合并系列小说时,下载器会保存设定资料里的图片
有些系列小说的设定资料里有图片,例如:
https://www.pixiv.net/novel/series/9114820/glossary
现在在合并系列小说时,可以保存图片了。
注意:要保存设定资料里的图片,有两个设置必须是启用的:
- 在小说里保存元数据。因为设定资料属于元数据。
- 下载小说里的内嵌图片。因为设定资料里的图片也属于内嵌图片。
✨在收藏页面里新增了两个附加功能按钮
- 移除所有作品的标签
- 取消收藏所有作品
这两个功能本来就有,不过之前的按钮每次只会操作当前查看的这一页作品,现在我添加了新的按钮,可以一次性操作所有作品。
✨优化了图片查看器
1. 在底部显示了发表日期
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/642
2. 底部的收藏按钮会显示收藏状态。如果这个作品已收藏,那么收藏图标会显示为蓝色。
🔄把关注页面里的一些按钮从“开始抓取”区域移动到了“附加功能”区域里
这些按钮本来就应该放在“附加功能”区域里,但旧版设置面板的“更多”页面效率不高,因此我把它们放到了第一屏,否则用户可能根本不知道还有这些按钮。
现在重新设计了设置面板之后,可以把它们正常放到“附加功能”区域里了。
🐞修复问题:在暗色模式下,命名规则的下拉框里的文字无法辨别的问题
之前在暗色模式下,命名规则的下拉框是亮色背景 + 亮色文字,导致文字无法阅读,现在会始终保持白底黑字,使其可以正常阅读。
😊当文件名异常时,在日志里显示作品 id 和异常的文件名
例如:
⚠️作品 ID: 99381250_p1, 异常文件名: D:\download\551dd332-73c9-422d-b2a9-7664b55c1427.png😊在一些设置下方添加了更清晰的说明
在几个调整文件夹的设置下面添加了提示,例如:
你还需要在“文件夹和文件的名字”-“图像作品的命名规则”里添加 /{multi_image_folder}/ 才能实现这个效果。你可以点击“帮助”按钮查看详细说明。🕑更新了作品发布时间数据
19.0.0 2026-06-11
🎨重新设计了设置面板
新的设置面板有更详细的分类,设置项更容易区分,外观更优美,新增了搜索功能。
✨新增设置:优先下载动图
启用这个设置之后,如果抓取结果里有动图,那么下载器会优先下载动图。
PS:这个设置在以前是隐藏设置,现在改为正常的设置了。
✨新增设置:点击设置卡片时切换它的开关状态
新版设置面板里的设置都以卡片形式展示,点击卡片上的空白区域来启用/禁用该设置是很方便也符合直觉的操作。
所以我添加了这个功能,并为它添加了这个设置来控制是否启用这个功能。默认启用。
✨新增设置:点击设置名字时打开 Wiki 链接
自从去年我更新了 Wiki 之后,就做了点击设置名字打开 Wiki 链接的功能。
现在为其添加一个开关,默认启用。如果关闭的话点击设置名字就不会打开 Wiki 链接了。
✨在收藏页面里添加了“查找所有已被删除的作品”的按钮
✨在“管理设置”里添加了“清除下载器保存的关注数据”按钮
下载器会在本地缓存用户的关注数据,用于高亮显示关注的用户名等功能。
点击这个按钮之后,下载器会清除缓存的关注数据,并在一段时间后重新获取最新的关注数据。
🔧在“图片的宽高”设置里,你可以分别设置宽度、高度的比较关系
在旧版设置面板里,宽度和高度是共用一套比较关系的,截图如下:
这是因为之前的设置都是纯文字,所以我故意减少了该设置里的符号数量,这样它不容易与周围的设置混淆,但是使用体验不好,现在设置都卡片化了,所以我为宽高各设置了比较关系:
⚠️注意:这是一个破坏性变更,这两个比较关系是新的设置,所以使用该设置的用户需要重新设置比较关系。
🔧把“复制按钮”里的“在缩略图上显示复制按钮”拆分成了单独的设置
由于现在对设置项进行了二级分类,这个子选项更适合单独放到“缩略图上的按钮”分类里,所以我把它拆分了。
🔧为“下载间隔”添加了开关
📝修改设置名字:在已下载的作品上显示边框 改为 在下载过的作品上显示边框
这是因为“下载”设置里有一个设置的名字是“在下载过的作品上显示边框”,为了统一它们的名字,我把“在已下载的作品上显示边框”改成了“在下载过的作品上显示边框”。这样用户在搜索时,可以使用“下载过”的搜索词来搜索到它们两个。
🔥移除了“显示高级设置”功能
新的设置面板里没有“默认隐藏部分设置,并且可以使用这个开关来显示全部设置”的机制,因此移除了这个设置。
♻️重新设置选项的编号
⚠️注意:这是一个破坏性变更,因为用户如果有已经置顶的旧设置,那么新旧编号不一致,很可能会导致被置顶的设置发生变化。
♻️把转换动图为 WebM 视频的库更换成 Whammy
最近,当 Chrome、Edge 更新到 149 版本之后,下载器把动图转换为 WebM 视频时可能会导致标签页崩溃。有少数用户遇到了此问题。看来 Mediabunny 库在浏览器更新之后可能会出现问题。
现在我把转换 WebM 的库改为了以前使用的 Whammy,虽然转换速度降低了一些,但不会导致标签页崩溃。
🎨把一些设置里的子选项拆分成多行显示
之前所有子选项都是在一排里显示的,不易区分,现在进行分行,例如:
✨适配了收藏页面里的新的筛选条件
最近收藏页面里多了这些筛选条件:最新或最早排序、年龄限制、作品标签、收藏时间。
现在进行了适配,下载器抓取时可以应用这些筛选条件了。
✨可以自动检测用户使用 Dark Reader 等扩展设置暗色主题的情况
当下载器里的主题设置为“自动检测”时,下载器会自动检测 body 元素的背景颜色,来判断应该使用亮色主题还是暗色主题。
♻️把 hongye 分支的“把图片显示为灰色”设置合并到了主分支里
之前“把图片显示为灰色”的代码只存在于 hongye 分支里,主分支里没有。但是这样修改主分支时(例如对设置面板进行重构)就无法覆盖到这个设置。现在合并到主分支以便于维护。
🕑更新了作品发布时间数据
18.9.3 2026-05-21
✨适配搜索页面的“显示可能妨碍搜索的作品”选项
这是 Pixiv 于近期推出的一个搜索选项。默认未启用,显示的作品数量可能会少一些。如果用户启用了这个选项,显示的作品数量会多一些。下载器之前没有适配这个选项,抓取不到在启用这个选项之后多出来的那些作品。现在进行了适配。
🐞修复问题:在特定情况下,标签别名功能可能导致 {page_tag} 的结果异常
该问题发生的条件:
- 用户在标签别名里启用了“应用到文件名里的 {tags} 系列标记”
- 某个标签别名的列表以逗号 , 结尾,这会导致该字符串分割为数组时在末尾产生一个空字符串 ''
- 用户在命名规则里使用了 {page_tag},并且没有值,所以 {page_tag} 的结果也是空字符串 ''
结果:由于 {page_tag} 的空字符串匹配到了标签别名列表里的空字符串,所以 {page_tag} 会使用这个标签别名。
现在修复。
🕑更新了作品发布时间数据
18.9.2 2026-05-16
🐞修复问题:在抓取过程中出现 404 错误时,抓取进度可能会卡住
这个问题比较隐蔽。有时出现 404 错误之后可以正常抓取后续作品,但有时会导致下载卡住。现在进行了修复。
问题原因在 src\ts\store\CacheWorkData.ts 里的 getWorkDataAsync 方法里,当网络请求出错时不会清理缓存的作品 ID this.pendingIds.delete(id)。由于出错的作品的 ID 一直在缓存里,所以在同一个标签页会话里重复请求它时,可能会导致这个请求一直卡住。注意:该作品第一次出错时不会导致抓取卡住,必须是重试请求它、或者之后再次抓取它时才可能出现该问题。
🕑更新了作品发布时间数据
18.9.1 2026-05-10
🐞修复了转换动图出错时,没有减少转换计数的问题
这个计数指的是正在转换的动图数量,也就是下载进度条上方显示的“正在转换 3 个文件”。
之前当转换动图出错时没有把这个计数 -1,导致这个转换虽然结束了,但永远会占据一个计数。这导致了问题:
“同时转换多少个动图”设置了同时转换的数量上限。该 bug 占据一个计数会导致该设置的实际可用值 -1。更严重的情况是:如果这个 bug 占用的计数等于“同时转换多少个动图”的设置,那么剩余的动图将永远不会开始转换。
现在修复了这个问题。
🖕🦊修复了在 Firefox 里,转换 APNG 图片失败的问题
我把 UPNG 放到 worker 里运行之后,在 Firefox 里无法完成转换,又是经典的原因:worker 中的 ArrayBuffer 和主线程的 ArrayBuffer 构造函数是不同的对象,导致 instanceof 检测失败。解决这个兼容性问题浪费了一些生命。
🖕🦊修复了在 Firefox 里,无法下载动图的缩略图的问题
在 Firefox 里,使用 fetch 下载动图的缩略图时出现错误,因为触发了 CORS 限制。网址如:
https://i.pximg.net/img-original/img/2026/02/08/01/44/04/140903398_ugoira0.jpg
我让 AI 尝试了各种方法都无法绕过这个限制,看来 Firefox 真安全呢。又浪费我的时间。
最后的解决办法是不加载这个缩略图,而是从 zip 文件里提取第一张图片作为缩略图。
🖕🦊修复了在 Firefox 里,无法读取已存在的 ZIP 文件的问题
在 Firefox 里我使用 JSZip().loadAsync(blob) 加载一个 ZIP 文件的 Blob 对象时会报错(我需要向这个 ZIP 文件里添加一个新的文件)。
解决这个错误后还有新的错误,浪费了很长时间。让 AI 反复调整、并且我进行测试、反馈、让 AI 再调整,但问题依然无法解决。最后抄了一段代码解决了这个问题,但是在 Firefox 这会带来额外的性能开销。
详细情况可以在 src\ts\download\Download.ts 里搜索 FUCK Firefox 了解。
18.9.0 2026-05-08
🔧调整了“不创建文件夹”设置的子选项
该设置的子选项已经重新设计,以提供更细致的控制能力。
如果你使用这个设置,需要重新选择你需要的选项。
🔧调整了“动图保存格式”设置
添加了更多格式:
- WebP 图片(有损)
- WebP 图片(无损)
- Ugoira(可使用 BandiView 播放的 ZIP 原档文件)
多选:
你可以同时选择多种动图格式。下载器可以在一次下载里把动图转换为多种格式。
另外,动图转换时的默认格式从 WebM 改为了 WebP。不过这不会影响之前已经在使用下载器的用户,只会影响新安装下载器或重置了设置的用户。
--------
性能测试:
抓取“うごイラ”标签里 1 页 60 个动图:
https://www.pixiv.net/tags/%E3%81%86%E3%81%94%E3%82%A4%E3%83%A9/artworks?ai_type=1
下载设置:
- 勾选了所有 6 种格式,其中 WebP 选择的是无损
- 同时下载 3 个文件
- 同时最多转换 3 个动图
在下载过程中,该标签页的内存占用大部分时间在 3 GB - 4 GB 之间,可以接受。偶尔在转换一些很大的 zip 文件时会超过 5 GB,但这种情况占比不高。
60 个动图生成了 360 个文件,数量正确。文件体积 8 GB。耗时一共 17 分钟,效率挺高的。
⚡降低了转换动图过程中,提取图片数据的时间
Tools.extractImage() 方法里会使用 createImageBitmap(blob) 把图片从 Blob 对象转换成 ImageBitmap 数据。处理多张图片时,之前是串行的,一张图片转换完成后才会转换下一张图片。现在使用 Promise.all 改为并行,大幅缩短了提取 zip 文件里所有图片数据的时间。
另外 createImageBitmap 方法与图片的分辨率有关,分辨率越大,耗时就越久。使用并行处理也缩小了分辨率差异导致的时间差别。
---------
对两个大文件的简单测试:(CPU 是 i5-12400)
文件 1: https://www.pixiv.net/artworks/144180350
27 MB 的 zip 文件,有 149 张图片,分辨率都是 1920x1080。
生成 ImageBitmapList 需要 1.6 秒。
文件 2: https://www.pixiv.net/artworks/143949972
26 MB 的 zip 文件,有 145 张图片,分辨率都是 640x360
这两个文件的体积相近、图片数量相近、每张图片的体积相近。差别最大的地方是分辨率。
生成 ImageBitmapList 的耗时:
| - | 文件 1 | 文件2 |
| ------ | ------ | ----- |
| 优化前 | 1.6 s | 0.6s |
| 优化后 | 530 ms | 270ms |
使用并发优化后,时间缩短了很多,尤其是对于分辨率大的图片,减少的时间更多。
当然,体积小的 zip 文件本来耗时就比较少,所以这个优化措施对它们的效果有限。不过多少也能减少耗时。
😊转换 APNG 动图时不再阻塞主线程
以前转换 APNG 动图时,使用的库 UPNG.js 没有 worker,所以会阻塞主线程。偏偏 APNG 的编码时间比较长,所以很影响体验。
现在把 UPNG.js 放到 worker 里了,不会再阻塞主线程了。
😊优化了一些帮助信息
我发现很多用户依然搞不懂“为多图作品添加一层文件夹”和“为 R-18(G) 作品添加一层文件夹”怎么用,可能是因为之前的帮助信息写的不够明确易懂,所以我优化了它们的帮助信息。
🕑更新了作品发布时间数据
18.8.2 2026-04-28
🔧调整了两个命名标记:{id_num} 和 {p_num}
为了使一些命名标记更容易理解,我为它们添加了别名:
- {id_num} 改为 {pid}
- {p_num} 改为 {p}
提示:原本的名字依然可以正常使用,所以你不需要修改现在使用的设置。
🐞修复了在某些情况下,“使用第一个匹配的标签建立文件夹”里的标签别名没有生效的问题
😊在设置面板底部添加了“最近更新”按钮
之前每次版本升级后,“最近更新”内容只会显示一次。考虑到有时更新内容比较多,用户可能需要再次查看,所以我添加了这个按钮。
♻️把选项的 p 标签改为了 div 标签
之前每个选项都是 p 标签 p.option,但后来有些选项内部的复杂元素里使用了 div 元素,这不符合规范,因为 p 标签内部不能包含 div 元素。所以我把选项的标签都改为了 div。
18.8.1 2026-04-25
🐞修复了“使用第一个匹配的标签建立文件夹”匹配结果被转换成小写的问题
18.8.0 2026-04-25
💡对移除了“为每个作品建立单独的文件夹”设置的补充说明
下载器在上一次更新里移除了“为每个作品建立单独的文件夹”,这让使用此功能的用户遇到了困扰,有些用户不知道怎么实现和之前相同的效果。这与你之前在这个设置里设置的“图片数量大于”有关:
- 如果你之前设置的图片数量是大于 0,也就是会对所有作品生效,可以修改命名规则:在文件名前面添加一层文件夹规则,例如 {id_num}/ 或者你之前使用的规则。对于默认的命名规则,就是修改成 pixiv/{user}-{user_id}/{id_num}/{id}-{title}
- 如果你之前设置的图片数量是大于 1,也就是只对多图作品生效,请改为使用“为多图作品添加一层文件夹”设置,并使用 {multi_image_folder}/ 添加一层文件夹。
🐞修复了“预览作品”的开关失效的问题
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/609
✨新增设置:小说的命名规则
之前图像作品和小说使用同一套命名规则,现在我把它们拆分成 2 个独立的设置了。
PS:小说的命名规则默认会跟随图像作品的命名规则,以保持行为与之前版本一致。你可以根据需要来决定是否修改小说的命名规则。
✨“使用第一个匹配的标签建立文件夹”现在可以设置两层文件夹了
这是为了处理一个常见的需求:如果一个角色属于某个作品,就建立两层文件夹:第一层是作品名字,第二层是角色名字。
现在你可以设置两个标签列表来实现这个效果。
✨新增设置:标签别名
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/615
该设置位于“更多”-“命名”里。
如果一个标签有多种变体,你可以为它们设置一个通用的别名。它可以影响命名标记里的 {tags} 系列标记,以及“使用第一个匹配的标签建立文件夹”功能。
✨在“预览作品”里添加了“检查屏蔽的标签”选项
该功能默认未启用。你可以根据需要手动启用它。
✨“为多图作品添加一层文件夹”里添加了“图片数量”选项
之前没有这个选项,下载器会为所有多图作品都应用这个设置。现在你可以只为图片超过设置值的多图作品应用此设置。
PS:这个功能不是“为所有作品添加一层文件夹”,如果你有这个需求,应该直接修改命名规则。
🔧“AI 作品”设置改为默认显示
下载器默认未启用“显示高级设置”,这会隐藏一些设置。“AI 作品”之前是默认不显示的,但是我发现有些用户一直不知道下载器可以排除 AI 作品,所以我改成了默认显示。
🔧“合并系列小说时的命名规则”移动到了“更多”-“命名”分类里
🐞修复了没有处理 {match_tag_folder} 标签里的特殊字符的问题
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/614
之前下载器没有处理 {match_tag_folder} 匹配的标签里的特殊字符,但有些标签含有斜线,会意外生成文件夹。有些含有冒号会导致文件名异常无法下载。现在修复。
😊在“命名规则”的帮助里添加了更详细的说明
🕑更新了作品发布时间数据
18.7.0 2026-04-21
✨新功能:置顶任意选项
下载器的设置数量终于超过了 100 大关,我也深感查找设置不方便。在“更多”分类里,显示所有设置的话会显示 3 个屏幕那么长,即使是我查找特定设置时也经常很慢。
所以我添加了这个功能,你可以把自己常用的选项置顶显示,它们会始终显示在顶部(即使你没有启用“显示高级设置”也会始终显示)。这样不仅能快速找到需要的设置,而且平时也可以隐藏高级设置,让界面更加清爽。
把选项置顶有 2 种方法,分别为 PC 端和移动端设计:
1. 把鼠标指针放到选项上,然后点击左侧的置顶图标。
2. 长按选项名称 0.5 秒。
重新操作即可取消置顶。
🔧增加和调整了一些抓取设置
#### ✨新增设置:不抓取下载过的作品
如果你启用了这个设置,那么下载器在抓取每个作品前会先检查它是否有下载记录,如果有就不抓取它。
这有助于增量更新,并减少不必要的抓取。
#### 🔧在“ID 范围”设置里,你可以为图像作品和小说分别设置 ID 了
之前设置的 ID 不会区分作品类型,现在可以区分了。
#### ✨新增设置:多图作品只抓取后几张图片
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/557
常见的使用场景:一些用户在发布恋活(Koikatsu)等游戏的人物卡或场景卡时,前面的图片都是截图展示,最后一张才是包含数据的卡片。你可以启用这个设置只抓取最后一张或多张图片。
提示:两个“只抓取”条件可以同时使用,此时图片只要满足其中一个条件就会保留。这样你可以跳过中间的图片,只下载首尾的图片。
例如:日月的多图作品最后一张就是人物卡。
#### ✨新增设置:多图作品不抓取前几张图片
常见的使用场景:有些画师的作品的第一张图片有文字,第二张没有文字;或者第一张是全年龄的,第二张是 R-18 的。你可以启用这个设置来排除第一张或前几张图片。
注意:如果你设置的数字大于作品里的图片数量,那么下载器会保留最后一张图片,而非排除整个作品。
“只抓取”和“不抓取”的条件可以同时使用。不抓取的优先级更高:如果一张图片同时满足两种条件,下载器不会抓取它。
例如:こけもも的多图作品的第一张图片是有文字的,第二张图是纯净的。如果想排除第一张图片,就可以使用这个设置。
另外他的最后一张图片都是宣传图,所以也可以同时配合“多图作品不抓取后几张图片”使用。
#### ✨新增设置:多图作品不抓取后几张图片
我把“不抓取多图作品的最后一张图片”设置升级成了“多图作品不抓取后几张图片”。之前只能固定排除最后 1 张图片,现在可以设置排除的数字了。
常见的使用场景:有些画师的作品的最后一张或几张图片是宣传图,或者是有马赛克的图片。你可以启用这个设置来排除最后一张或多张图片。
注意:如果你设置的数字大于作品里的图片数量,那么下载器会保留第一张图片,而非排除整个作品。
“只抓取”和“不抓取”的条件可以同时使用。不抓取的优先级更高:如果一张图片同时满足两种条件,下载器不会抓取它。
例如:儒宅 Ruzhai 的多图作品的最后一张都是宣传图,适合使用这个设置。
#### 🗑移除设置:不抓取多图作品的最后一张图片
它被“多图作品不抓取后几张图片”取代了。
🔧增加和调整了一些命名设置
#### ✨新增设置:不创建文件夹
该设置位于“下载”选项卡,当你下载单图作品或多图作品时可以不建立文件夹,直接保存到下载目录里。
#### 🗑移除设置:只有一个抓取结果时不建立文件夹
它被“不创建文件夹”取代了。
#### ✨新增设置:序号的起始值
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/531
你可以设置图片的序号从 0 开始还是从 1 开始。默认值是 0。
这个设置在“更多”-“命名”分类里。
#### ✨新增设置:移除文件名里的 Emoji
这个设置在“更多”-“命名”分类里。
#### ⚠️“更多”-“命名”里的一些命名设置的使用方式发生了变化
“更多”-“命名”里的一些设置会在保存文件时添加一层文件夹。之前下载器总是把新增的文件夹添加到文件名前面(这意味着它总是最后一层文件夹),现在你可以把它放到任意层级了。
这是一项优化,但需要注意的是,它们的使用方式发生了变化:除了启用设置,还需要在命名规则里插入对应的标记。如果你启用了这些设置里的任意一个,就必须使用新的方式:
- 为多图作品添加一层文件夹
- 使用第一个匹配的标签建立文件夹
- 把r18作品存入指定的文件夹里
你可以点击这些设置右侧的“帮助”按钮查看详细说明。
#### ✨新增设置:为多图作品添加一层文件夹
它取代了旧的设置:“为每个作品建立单独的文件夹”,并且使用方法也有所不同:在命名规则里使用 {multi_image_folder} 代表该设置的效果。
之前当你启用该设置时,下载器总是把这个文件夹添加到文件名前面(这意味着它总是最后一层文件夹),现在你可以把它放到任意层级了。
#### 🗑移除设置:为每个作品建立单独的文件
它被“为多图作品添加一层文件夹”取代了。
#### 🗑移除设置:根据作品类型自动建立文件夹
它被新的命名标记取代了:{type_illust}、{type_manga}、{type_ugoira}、{type_novel}。
#### 🔧调整设置:为 R-18(G) 作品添加一层文件夹
如果你启用了该设置,现在需要在命名规则里添加 {r18_g_folder} 才能使其发挥作用。
#### 🔧调整设置:使用第一个匹配的标签建立文件夹
如果你启用了该设置,现在需要在命名规则里添加 {match_tag_folder} 才能使其发挥作用。
#### ✨新增命名标记 {char_count}
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/586
{char_count}:小说的字数或单词数(取决于小说的语言),是数字。当作品不是小说时会被忽略。
--------
细节:每片小说和系列小说的原始数据里都同时保存了 characterCount(字数)和 wordCount(单词数),由 useWordCount 决定使用哪个数字。下载器只会保存使用的那个数字。
#### ✨新增命名标记 {sl}
其实以前就可以用 {sl},但是我没有把它放到公开的列表里。现在把它显示出来了。
因此移除了一个旧的设置:createFolderBySl(使用 sl 数据创建一层文件夹)。
#### 🔧下载时,{px} 标记会使用图片的实际宽高
在多图作品里,每张图片的宽高可能都不一样。之前 {px} 标记总是会使用第一张图片的宽高,现在进行了优化:
如果下载的图片尺寸是“原图”(默认就是原图),那么 {px} 标记会使用图片的实际宽高。
#### 😊增加了命名规则输入框的宽度
我注意到有些用户设置的命名规则很长,原本的输入框无法完全显示,所以我把输入框改成独占一行,并且可以显示多行内容,这样就可以完整的显示命名规则了。
🔧调整和增加了一些下载功能
#### ✨新增设置:在已下载的作品上显示边框
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/529
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/542
该设置位于“更多”-“下载”分类里。
如果你启用了该设置,下载器会在已下载的作品上显示边框,这样你就可以方便的知道哪些作品下载过了。另外,在作品列表页面里(例如你的收藏页面),你也可以更容易的知道上次下载到了哪里,这有助于增量更新。
#### ✨新增设置:管理下载记录
之前导出、导入、清除下载记录的按钮是放在“不下载重复文件”里的,但这次新增了 2 个依赖下载记录的功能,所以需要把管理下载的功能独立出来,这样条理更清晰。
另外还修改了相关功能的帮助文本。
#### ✨新增设置:合并系列小说时的分割阈值
合并系列小说时,如果 EPUB 文件的体积太大,下载器可能会把它分割成多个文件。你可以设置分割的单位体积。
#### ✨合并系列小说时,可以跳过之前已下载的部分
之前合并系列小说时,下载器总是会下载所有小说,不会排除已下载过的小说。现在我进行了优化:
在合并系列小说时,如果你启用了“不抓取下载过的作品”,下载器会跳过有下载记录的小说,只合并没有下载记录的小说。
从 2026 年 4 月开始,当你合并系列小说时,下载器会为里面的每篇小说都生成下载记录(就像你单独下载过它们一样),所以当你再次合并同一个系列时,如果启用了“不抓取下载过的作品”,下载器就可以跳过以前合并过的小说,只合并新增的小说。
🔧调整和增加了一些增强功能
#### ✨“预览作品”里添加了作品类型设置
你可以设置预览哪些类型的作品:单图作品、多图作品、动图。
因为有些用户不想预览单图作品或动图,所以我添加了这个设置。相比之下,预览多图的需求可能更普遍些。
#### 🗑移除设置:预览动图
现在不需要这个单独的设置了,它被“预览作品”里的“动图”选项替代了。
不过和之前有个小区别:之前“在缩略图上长按鼠标右键时显示大图”也会使用这个设置来决定是否预览动图,现在不依赖它了,所以总会预览动图。
#### ✨预览作品时,如果这个作品含有被屏蔽的标签,下载器就不会显示预览
下载器在预览作品之前会检查它是否含有被屏蔽的标签。检查的设置是“不能含有的标签”和你在账号设置里 Mute 的标签。如果作品被排除,下载器就不会预览它,并且会显示对应的提示。
PS:该功能只影响“预览作品”。如果你依然想查看它,可以使用其他方式,例如点击缩略图上的图片查看器按钮,或者在缩略图上长按鼠标右键来显示图片。
#### ✨新增设置:缩略图上按钮的位置
很早以前,下载器在缩略图上显示的第一个按钮是放大按钮(点击打开图片查看器)。所以按钮的左右位置设置也放在了它里面。但后来下载器不断增加了在缩略图上显示的按钮,所以早该把位置设置独立出来了。
现在把位置设置独立出来了。
#### 🔧一些功能不再依赖“预览作品”
之前如果未启用“预览作品”功能,有两个功能也无法使用:“在缩略图上长按鼠标右键时显示大图”和“预览作品的详细信息”。
现在这些功能都独立了,不再依赖“预览作品”。
🐞修复 bug
#### 🐞修复了特定情况下,一些文件可能丢失(未被下载)的问题
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/604
当用户启用了“把文件保存到用户上次选择的位置”,并且短时间内下载大量文件时,部分文件会丢失(未被下载)。
现在如果用户启用了“把文件保存到用户上次选择的位置”,会强制添加 200 ms 的下载间隔时间,解决了此问题。
#### 🐞修复了查找作品缩略图时的一些问题
这次我添加了一个 debug 命令为作品缩略图(WorkThumbnail)添加边框,发现了一些问题并进行了修复:
- 在一些页面上,整个作品区域会被选中,并且里面的缩略图区域又被选中了一次,重复了,而且看起来就像是大圈套小圈一样。现在消除了前一种情况。
- 在小说排行榜上,没有查找到新出现的作品,现在修复。
#### 🐞修复了单独保存小说里的图片时,可能创建多个文件夹的问题
触发场景:用户设置的小说保存格式是 TXT,并且在命名规则里 {id_num} 出现多次,第一次是在文件夹里。
下载器会把图片的 id 添加到第一次出现的小说 id 后面,但由于此时 id 在文件夹里,就导致了每个图片都创建了文件夹。
现在修复:只会在文件名的小说 id 后面添加图片 id。
#### 🐞修复了“在搜索页面里移除已关注用户的作品”可能导致作品被清空的问题
以前可能没有这个问题,应该是 Pixiv 的某次改版导致的,现在经常出现。
原因是下载器查找用户 id 时,有时会匹配到列表容器元素,并把它移除,这导致所有作品都被移除了。现在修复。
#### 🐞修复了在图片查看器里按 ESC 时,会同时取消手动选择作品的问题
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/523
🔀调整了部分设置的位置顺序
#### 🔀“多图作品只抓取前几张图片”移动到了“更多”-“抓取”里
因为这个设置可能不太常用,所以我把它移到“更多”里了。
#### 🔀“多图作品的图片数量上限”移动到了“更多”-“抓取”里
因为这个设置可能不太常用,所以我把它移到“更多”里了。
#### 🔀“把文件保存到用户上次选择的位置”移动到了“更多”-“下载”里
我注意到一些用户在没有必要使用“把文件保存到用户上次选择的位置”时,依然启用了该设置。这个设置从名字上可能有一定误导性,如果用户不看详细说明,可能想当然的就启用了。而且我觉得这个设置只适合少数用户使用,所以将其移动到了“更多”-“下载”里。
😊优化用户体验,并添加了一些帮助信息
#### 😊解决了合并系列小说时,导出日志功能可能不生效的问题
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/601
这个不是 bug,不过为了减少用户的困惑,进行了针对性优化,以确保导出日志的时机为“下载完毕”时,可以导出合并系列小说的日志。
#### 😊在下载器左下角添加了“获取帮助”按钮
我把之前的 Discord 按钮换成了“获取帮助”按钮,点击之后会显示提示,里面包含了 Discord 和 GitHub issues 的链接。
#### 😊当浏览器把 .jpg 保存为 .jfif 时,显示提示
时不时就有用户遇到这个问题,所以下载器现在会检查这个问题,并在日志里显示提示。
#### 😊在一些日志前面添加了 Emoji 符号
- 🛸 提示过滤条件
- 🚫 提示作品被排除的原因
- 💡 一些使用技巧
- ⚠️ 一些需要注意的信息
#### 😊作品被排除时,会显示更详细的原因
当作品被排除时,如果排除原因里有多个子选项,下载器会显示它被排除的具体原因。
例如“作品类型”有 4 个子选项:插画、漫画、动图、小说。当作品被排除时,会显示它自己的类型。
这些日志例如:
下载器排除了一些作品,原因: 作品类型: 插画
下载器排除了一些作品,原因: 年龄限制: 全年龄
下载器排除了一些作品,原因: AI 生成
下载器排除了一些作品,原因: 图片数量: 单图作品
下载器排除了一些作品,原因: 图片的宽高比例: 竖图#### 😊鼠标经过设置项时,会显示浅色的背景颜色
这样用户可以更方便的知道光标位于哪个设置里,优化用户体验。
另外对于有多行的设置,鼠标经过时会显示在一整块背景颜色里,可以更清晰的知道其边界,避免与其他设置混淆。
♻️重构了一些代码
#### ♻️拆分了在日志里显示已启用的过滤器的代码
之前 Filter.ts 同时负责显示提示和检查过滤条件,但是代码行数太多了,查看和修改都比较麻烦,所以我把显示提示的部分拆分到了 ShowEnabledFilter.ts 里。
#### ♻️拆分了管理下载记录的代码
之前所有逻辑都在 DownloadRecord 里,但其实最核心、最常用的功能就是添加记录和查询记录。其他功能混在在同一个文件里降低了我查看、调试代码时的效率。现在我进行了拆分:
- DownloadRecord 负责添加和查询下载记录
- DownloadRecordManager 负责导入、导出、清空下载记录
#### ♻️拆分了在新增的设置左边显示 new 图标的代码
之前这部分代码在 Option.ts 里,导致内容杂乱,现在拆分到 ShowNewIcon.ts 里。
#### ♻️拆分了 Form 里美化表单和管理帮助内容的代码
之前 Form.ts 里有 3 种主要功能:绑定一些元素的事件、美化表单、管理帮助内容。
现在后两种功能都拆分到单独的文件里了,代码逻辑清晰了很多。
#### ♻️简化了帮助按钮的配置
之前每个帮助按钮都要在 Form.ts 里配置它的 id、title、msg,每添加一个按钮就要在 Form 里添加一份配置。
现在改为在按钮上附带配置信息,这样 Form 里不需要单独保存配置了,降低了维护压力:
<button type="button" class="gray1 textButton showMsgBtn" data-title="_抓取多少作品" data-msg="_抓取多少作品的提示" data-xztext="_帮助"></button>提示按钮(点击后会显示帮助区域)也做了同样的优化。
#### ♻️“在缩略图上长按鼠标右键时显示大图”与“预览作品”功能解耦
之前“在缩略图上长按鼠标右键时显示大图”依赖“预览作品”向它传递一些数据,如果关闭了“预览作品”功能,会导致“在缩略图上长按鼠标右键时显示大图”也无法使用。
现在进行解耦,并修复了一些边界情况可能会触发的 bug。
#### ♻️“预览作品的详细信息”与“预览作品”功能解耦
之前因为两个功能在绑定事件、触发条件、加载作品数据等方面有相似之处,所以“预览作品的详细信息”功能的触发是由“预览作品”控制的。
虽然这样确实精简掉了一些代码,但是关闭“预览作品”时就无法使用“预览作品的详细信息”功能了。而且“预览作品的详细信息”本身的逻辑不算复杂,但是掺杂在复杂的“预览作品”里面,就很难理清楚了。
所以我把“预览作品的详细信息”功能独立出来了,不再依赖“预览作品”功能。
#### ♻️QuickBookmark 模块在页面初始化时会减少一次请求
进入作品页面或刷新作品页面时,之前下载器会请求 2 次作品数据,一次是 DisplayThumbnailListOnMultiImageWorkPage,一次是 QuickBookmark。现在只会请求 1 次了,因为 QuickBookmark 在初始时会从缓存获取。
不过在之后切换到其他作品时,还是会发送 2 次,因为之后 QuickBookmark 的执行时机较晚,而且不使用已有的缓存,所以会重新发送一次请求。
#### ♻️移除了一些不必要的 Promise 包装
以前的代码里有一些不必要的 return new Promise() 包装,现在改成了 async/await 风格。
PS:有少数本来就适合使用 Promise 对象的场景没有做修改,例如必须使用回调函数或者等待某个事件触发来 resolve 的场景。
#### ♻️把所有 setTimeoutWorker.set 替换为 setTimeoutWorker.sleep
以前设计 setTimeoutWorker 的时候只写了 set 功能,需要传入回调函数,在指定时间后触发。现在发现这样做挺傻逼的,因为既然需要调用方传入回调函数,那完全可以让调用方自行执行回调函数,而 setTimeoutWorker 只要负责等待就好了。
所以我添加了 sleep 方法,并把所有 setTimeoutWorker.set 都替换成了 setTimeoutWorker.sleep,简洁了许多。
新旧对比:
// 旧代码:
setTimeoutWorker.set(() => {
this.getIdList()
}, settings.slowCrawlDealy)// 新代码:
await setTimeoutWorker.sleep(settings.slowCrawlDealy)
this.getIdList()
#### ♻️把 Utils.sleep 替换为对 setTimeoutWorker.sleep 的封装
之前有些代码里用的是 Utils.sleep,有些是 setTimeoutWorker.sleep,不统一。
由于 setTimeoutWorker.sleep 在前台页面里可以完全替代 Utils.sleep,所以应该全都换成 setTimeoutWorker.sleep。
但考虑到 setTimeoutWorker.sleep 只有 sleep 这一个公开方法,而 Utils 包含更多功能,而且已经被很多模块引用了。所以我直接让 Utils.sleep return setTimeoutWorker.sleep,再把原来的两种 sleep 都统一成 Utils.sleep,调用起来更简洁,也减少了分歧。
#### ♻️下载文件时使用 Fetch 代替 XHR
之前 Downloads.ts 里下载文件时(就是会显示在下载进度条上的文件),使用的是 XHR,但是它有个问题:C 盘剩余空间小于 4 GB 的话,可能无法下载体积较大的文件,即使是不到 10 MB 的文件,也可能会被浏览器强行中断下载,导致这个文件下载失败,并可能导致下载卡住。虽然这个问题发生的概率比较低,但由于下载器的用户数量比较多,所以隔三岔五就有人问我这个问题。
现在改为使用 Fetch,它没有这个问题,可以避免因为磁盘空间不足导致的错误。
PS:使用 Fetch 在下载时会略微增加内存占用,但不严重,即使是并发下载体积大的动图也没有问题。
🕑更新了作品发布时间数据
18.6.0 2026-04-04
✨新增过滤器:原创作品
下载器在抓取时可以过滤原创作品和非原创作品了。
✨新增过滤器:标题必须含有
你可以要求作品标题里必须含有特定字符。
✨新增过滤器:标题不能含有
你可以要求作品标题里不能含有特定字符。它还有个子选项,可以同时检查系列标题。
✨在“第一张图不带序号”里添加了动图分类,可以去除动图的序号
如果你不希望动图的文件名里带有序号,可以启用“第一张图不带序号”,并勾选“动图”。
你可以在“更多”-“命名”里找到这个设置。
✨在图片查看器里添加了复制作品链接的按钮
点击这个按钮或者按下快捷键 L 即可复制该作品对应页面的网址。
✨在图片查看器里可以使用鼠标滚轮切换图片了
之前当用户在图片查看器里滚动鼠标滚轮时,只能缩放图片,现在可以切换图片了。这取决于鼠标指针是否位于图片上:
- 当鼠标滚轮在图片上滚动时,图片会放大或缩小;
- 当鼠标滚轮在图片外滚动时,会切换图片。
🔧导出关注的用户列表(JSON)时,会保存更多数据
之前导出的数据里只有每个用户的 id,现在包含了更多数据。
🔧复制按钮的图片尺寸默认值从普通改为原图
之前的默认值是“普通”,主要是因为有些原图比较大,加载慢,而且一些软件里不能粘贴太大的文件。
但是我在使用(分享给别人)时总是用“原图”尺寸,考虑到实际需求,就改成默认为“原图”了。
🔧小说保存格式的默认值从 TXT 改为 EPUB
因为 TXT 更通用,所以以前的默认值是 TXT。但实际上我使用时是会改成 EPUB 的,而且我在群里调查了一下,用 EPUB 的人占大多数,所以现在把默认值改成 EPUB 了。
⚙️“把 R-18(G) 作品存入指定的文件夹里”移动到“更多”里了
由于 {age_r} 标记在很大程度上可以取代“把 R-18(G) 作品存入指定的文件夹里”设置,所以我把它从“下载”里移动到“更多”-“命名”里了。
⚙️“管理设置”改为始终显示
之前“管理设置”是默认隐藏的,需要先启用“显示高级设置”才会显示。现在改为始终显示。
📜添加了 ppdtask 命令,用于管理一些开发、调试用的操作
添加了 PPDTask.ts,在页面上输入 ppdtask 就会显示命令列表。
之前当我修改调试用的一些开关时,需要在源代码里修改然后编译。用完之后改回去,再次编译。现在把它们集中起来管理,不需要修改源代码了,在页面上就可以控制这些开关。
🐞修复了在搜索页面里,“移除被屏蔽的用户的作品”功能失效的问题
🐞修复了在大家的新作页面里,显示更大的缩略图可能失效的问题
😊合并系列小说为 EPUB 文件时,不再保存重复的封面图片
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/597
在一个系列小说里,可能有多篇小说使用相同的封面图。它们的 URL 是相同的。以前下载器会全部下载和保存它们,但这样浪费了网络请求,也使文件体积产生了不必要的增加。现在进行了优化,对于同一个封面图片,只会下载和保存一次,这减少了合并系列小说的时间,也减小了文件体积。
---------
测试用例:
有一个封面图重复多次:
https://www.pixiv.net/novel/series/15624511
有多个封面图重复多次:
https://www.pixiv.net/novel/series/15608417
😊添加了两处提示,提醒用户关闭“下载前询问每个文件的保存位置”
最近又有个用户因为没有关闭这个设置而给下载器打了差评,我真是无语了,安装后会显示一次使用说明,里面写的有也不看。现在我在下载面板上单独显示了这个提示,而且在首次开始抓取时也会单独用消息框显示一次提示,这要是还看不到那我无话可说了。
😊消除了合并系列小说时可能出现的抓取结果为空的警告
抓取时如果所有 id 都合并了系列小说,抓取结果会是 0。这是正常的,因为没有需要单独下载的作品。
之前下载器没有统计是否所有 id 都合并了系列小说,所以会显示抓取结果为空的警告信息:
现在进行了优化,如果所有 id 都合并了系列小说,就不会显示这个警告。
♻️重构了 IDData,可以添加系列小说的 id,与普通作品一起抓取
之前 IDData 里只能保存单个作品的 id,所以抓取流程里也只能处理单个作品。如果用户通过手动选择功能或者快速下载按钮来直接下载系列小说,之前只能在启动抓取流程之前单独处理,用户体验不好。
现在系列小说可以与普通作品一起抓取了。
PS:系列小说不会产生抓取结果,只有单个作品才会产生抓取结果。
♻️重构了 log 里的公用方法,使其更简洁易用
之前输出日志时可以传递 1 - 4 个参数,完整示例如下:
log.log(
lang.transl('_抓取进度'),
1,
false,
'crawlProgress'
)但是这样很臃肿,而且有些参数其实没必要:
- 第二个参数是 br,换行数量,绝大部分情况下都是 1,所以可以移除这个参数
- 第三个参数是 persistent,如果为 false 则表示这是一条会刷新的日志,需要配合第 4 个参数 key 一起使用,所以也可以去掉它,只要传递 key 就可以用意了。
之前还有一个问题:后 3 个参数都是可选的,但如果想传递第 4 个参数,就必须携带第 2、3 个参数。虽然这是另一方面的原因(可以考虑把参数改为对象形式),但现在简化后只有 2 个参数,就没有这个烦恼了。
重构之后移除了第 2、3 个参数,现在只需要传递 1 - 2 个参数,简洁了很多。
另外在 getIdList 完成后,也会持久化期间的进度日志。
♻️把导出日志的代码拆分到单独的文件里
导出日志的代码拆分到了 ExportLog.ts 里。
♻️把显示日志的按钮拆分到单独的文件里
拆分到了 LogButton.ts 里,现在 Log 里的代码清晰了很多。
♻️优化了获取作品发布时间数据的代码
之前获取作品发布时间数据时,需要我先在 WorkPublishTime.ts 里手动设置开始 id、结束 id,操作麻烦而且容易出错,现在改为自动获取,不需要手动配置了。
🕑更新了作品发布时间数据
18.5.0 2026-03-21
🔧调整了“文件名长度限制”设置
当文件名或文件夹的名字太长时,浏览器可能会显示另存为窗口让用户手动处理。为了减少这种情况,下载器对“文件名长度限制”设置进行了修改:
1. 该设置现在默认启用。文件的完整路径(包含文件夹和文件名)被限制在 210 个字符之内。
2. 之前该功能只会截断文件名,现在也可能会截断文件夹的名字(如果有必要)。
---------
下载器的处理机制:
对于完整的文件路径如 A/B/C.jpg,下载器会计算它的整体长度,如果超长则倒序处理,即优先截断文件名,尽量避免截断文件夹名。具体处理如下:
1. 如果文件名 C 较长则截断它以减少字符数量,但必定会保留 {id} 生成的结果,以避免文件名重复。
2. 如果截断 C 之后整体长度依然超长,则截断文件夹 B。对于每层文件夹,如果它不超过 25 个字符,则不截断它。如果超过 25 个字符才会截断它(截断位置是 25 的倍数)。
3. 如果截断 B 之后整体长度依然超长,则截断文件夹 A。以此类推。
4. 下载器会在被截断的文件夹或文件名的末尾添加一个省略号 … 以提醒用户这里发生了截断。
✨适配了小说搜索页面的“整合相同系列”条件
之前下载器没有适配“整合相同系列”条件,如果用户启用了这个条件,会发现抓取结果不准确。
现在下载器的抓取结果会与与用户看到的内容保持一致。
PS:顺便还适配了“整合相同作者”的条件。
✨“手动选择作品”功能可以选择小说搜索页面里的系列小说了
这次优化是为了让用户在小说搜索页面里启用“整合相同系列”之后,可以选择和下载系列小说。此时系列小说的元素里只有系列的链接,没有单篇小说的链接,所以之前无法选择。现在可以选择了。
至于其他页面里的小说,之前已经支持选择了。
🐞修复了首页“推荐作品”区域一些缩略图增强功能失效的问题
首页“推荐作品”区域代码变化,导致在该区域里这些功能失效:
- 显示更大的缩略图
- 在缩略图上显示浮动按钮
现在修复。
🐞修复了点击快速收藏按钮时,会触发两次“点击收藏按钮时下载作品”功能的问题
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/541
🐞修复了搜索页面顶部的快速筛选标签失效的问题
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/591
在新版搜索页面里(search/)里,顶部的快速筛选标签点击后没有反应。这是因为以前的代码没有考虑到新版 URL,导出代码运行时出错,现在修复。
🐞修复了在搜索页面里,“移除被屏蔽的用户的作品”功能失效的问题
之前搜索页面的代码变化导致了此问题。现在修复。
🐞修复了预览搜索结果时,缩略图可能重叠的问题
如果预览搜索结果时没有启用“显示更大的缩略图”,会因为缺少一些样式导致预览图错位重叠,现在修复。
😊如果浏览器的下载记录数量太多,下载器会显示提示
如果浏览器的下载记录数量太多,会导致浏览器在启动时卡住(无响应)一段时间。下载记录越多,卡住的时间就越长。
下载器的用户可能会从 Pixiv 下载很多文件,产生大量下载记录,容易导致这个问题。但很多用户不知道该问题的原因,所以下载器每隔 24 小时会查询一次浏览器的下载记录数量,当数量超过 2000 时就会显示一条日志警告消息。
🕑更新了作品发布时间数据
18.4.0 2026-02-28
✨新设置:日志区域的默认可见性
当下载器在页面顶部输出日志时,你可以控制日志区域默认显示还是隐藏。默认值是显示。
你可以在“更多”-“其他”分类里找到这个设置。
----------
在 17.7.0 版本(2025-07-01)里,我把日志区域改为了默认隐藏,现在改回默认显示,并添加了这个设置让用户可以选择适合自己的方式。
✨新功能:查找已注销的用户
下载器在关注页面(/following)里添加了这个按钮,你可以查找关注列表里已注销的用户。该功能会检查你的关注列表,找出现在比之前少了哪些用户,然后检查他们是否注销了账号。
注意:这个功能不能查找以前注销的用户,只能查找此功能推出之后注销的用户。
-------
Pixiv 不会显示被注销的用户,所以此功能依赖于下载器自己保存的历史关注数据(该数据保存在本地)。
该数据最早会从该功能推出时(2026 年 3 月)开始保存;如果你在此日期之后才安装了下载器,那么下载器开始工作之后才会保存此数据。下载器只能检查到在此之后注销的用户。
-------
上个版本就添加了这个功能,但是需要一些时间进行测试,所以我没写到发布日志里。在之后的测试里果然发现了一些问题,修复了一些问题,优化了数据结构和代码,现在正式发布。
🐞修复了更新关注列表过于频繁的问题
每当用户打开一个新的 pixiv 标签页时,内容脚本会向 SW 请求关注数据。
SW 在闲置时会很快被浏览器回收,当它收到请求后会重新运行。之前,SW 会立刻返回数据,但这导致了这个问题,因为 SW 每次启动后,需要一些时间来恢复数据(读取保存的数据),如果立刻返回数据,就会返回预设的空数据,并导致前台页面收到空数据。前台页面会认为需要重新获取整个关注列表。这导致了很多不必要的请求。
现在我让 SW 等待数据恢复之后再返回数据,修复了这个问题。
🔧把动图的 {p_num} 设置为 0
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/578
之前动图没有 {p_num},这个命名标记会输出空字符串。但有时这会让用户感到困扰,所以现在我把动图的 {p_num} 设置为了 0。
😊合并系列小说时,可以应用标签过滤条件了
现在下载器在合并系列小说时,会应用“必须含有标签”和“不能含有标签”两个过滤器。这样用户就可以通过指定标签来过滤掉不需要的小说了。
😊优化用户体验:鼠标放在日志区域时,不滚动日志区域
当连续输出日志时,日志区域总是会滚动到底部(即显示出最后一条日志)。但这导致用户无法查看位于滚动区域上方的旧日志,因为日志总是会滚动到底部,打断用户的动作。
现在进行了优化,如果用户把鼠标放在日志区域(不管是否滚动),下载器都不会再自动把日志滚动到底部,这样用户可以方便的查看、复制之前显示的日志内容。
🕑更新了作品发布时间数据
18.3.1 2026-02-25
🐞修复了在 /en/tags 页面里,下载器抓取的作品分类可能不正确的问题
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/575
当 Pixiv 的页面语言为英语时,某些页面的路径前面会有 /en,所以 /tags 页面在英语时会变成 /en/tags。下载器之前判断时忘记了这个情况,导致了此问题,现在修复。
🐞修复了“在搜索页面里移除已关注用户的作品”功能失效的问题
前些时候搜索页面改版,导致这个功能失效,但当时我没发现,现在修复。
18.3.0 2026-02-13
✨新功能:在小说缩略图上显示快速下载按钮,一键下载小说或系列
当你把鼠标光标移动到小说的缩略图上时,下载器会显示快速下载按钮,点击即可下载这篇小说或者整个系列。
之前这个功能只支持了图像作品的缩略图,现在小说也可以使用这个功能了。
小说的缩略图有 3 种情况:
1. 单篇完结小说
2. 同时含有单篇小说和其系列的链接
3. 只有系列的链接
下载器会优先下载单篇小说,所以前两种情况都会下载单篇小说,第 3 种情况才会下载这个系列(此时下载器会自动合并这个系列小说)。
如果你想在第 2 种情况时合并系列小说,可以启用“更多”-“下载”里的“自动合并系列小说”功能,这样下载器会先抓取单篇小说,然后合并整个系列。
--------
下面是三种缩略图的截图示例:
单篇完结小说:
同时含有单篇小说和其系列:
只有系列链接:
✨对搜索用户的页面进行了有限的支持
搜索用户页面例如:
https://www.pixiv.net/search/users?s_mode=s_usr&nick=%E5%8E%9F%E7%A5%9E&i=1&comment=&p=1
现在下载器在该页面里可以显示缩略图上的按钮,可以预览和快速下载单个作品。
目前没有添加“显示更大的缩略图”功能。
✨支持了比赛页面
现在下载器支持了比赛页面,你可以下载比赛页面里的作品,并使用一些增强功能,如预览作品。
每个页面里的作品除了应募作品,还可能有获奖作品,所以我添加了两个按钮来分别抓取它们。
PS:我没有为比赛页面添加“显示更大的缩略图”功能,因为我感觉必要性不大,所以懒得做了。原因有:
- 底部的应募作品本身的显示尺寸就比较大(比在作者主页里的默认尺寸大)
- 图片是作为背景图片显示的,但“显示更大的缩略图”以前处理的都是 img 标签
---------
比赛页面的主页:
https://www.pixiv.net/contest/
每个比赛有一个或两个页面:有些比赛分为了插画和小说两个页面,有些则只有插画。例如:
- 插画(已结束):https://www.pixiv.net/contest/autumnconcert
- 小说(已结束):https://www.pixiv.net/novel/contest/autumnconcert
- 插画(已结束,有奖项):https://www.pixiv.net/contest/gf2
按照进度可以分为进行中和已结束。
- 进行中(插画):https://www.pixiv.net/contest/animatebookcover
- 进行中(小说):https://www.pixiv.net/novel/contest/kakizome2026
- 已结束(插画):https://www.pixiv.net/contest/autumnconcert
- 已结束(小说):https://www.pixiv.net/novel/contest/uroko2025
🚀更换了把动图转换为 WebM 的库,大幅加快转换速度
把库从 Whammy 换成了 Mediabunny,感谢 hospotho:
https://github.com/xuejianxianzun/PixivBatchDownloader/pull/569
优点:
- 转换速度很快,耗时只是 Whammy 的 1/3 或更少
- 转换时不会冻结页面,用户可以正常操作页面
- 转换之后,占用的内存释放的很快而且彻底
小问题:
- 由于我使用了最高质量,所以生成的视频体积通常会增加一些,可能多 1/3 左右。可以接受。
- 由于 Mediabunny 编码视频时的 color range 是 limited,所以色彩表现可能不是那么完美。尝试设置为 full 但是没有成功。考虑到动图压缩包里的图片都被 pixiv 转换过,所以没必要追求那么还原。
补充说明:投稿动图时,不管用户上传的是 jpg 还是 png 图片,都会被 pixiv 转换,生成新的 jpg 图片。只不过它的压缩等级比较高,有时候转换后的 jpg 图片体积比原图还大。
✨新功能:导出“我的作品”数据到 CSV 文件
“我的作品”数据指的是仪表盘的数据:
https://www.pixiv.net/dashboard/works
现在下载器在该页面里添加了一个“导出作品数据(CSV)”的按钮,点击即可导出作品数据。导出的数据与仪表盘的数据基本一致。
备注:该功能由下载器用户“宫森绘绿野藤堂小笠香”赞助制作,并同意公开此功能,感谢~🥳
✨保存作品的元数据时,可以保存为 JSON 格式了
之前下载器在保存作品的元数据时,只会保存为 TXT 格式,现在我添加了 JSON 格式的选择(默认未选中)。
JSON 格式的内容是下载器的内部数据(该作品的抓取结果),包含了更多信息。
✨新功能:过滤搜索页面的作品
这是红叶赞助的非公开功能,在“更多”-“增强”里可以看到此设置。
在公开版本里不可用,因为在公开版本里:
- 我隐藏了这个设置
- 该功能在默认禁用
- 我注释了 injectScript 函数,所以下载器不会拦截任何请求。
要使这个功能生效,需要启用该功能,并取消注释 injectScript 函数,这样拦截脚本才会注入页面,拦截特定请求。
🔧合并系列小说时,分割小说的阈值从 100 MB 提高到 200 MB
🔧定时抓取的默认间隔时间缩短到 30 分钟
之前默认值是 120 分钟,间隔比较长,主要是为了避免频繁抓取导致发送大量请求。
现在有了“不抓取下载过的作品”功能,并且默认启用,就可以避免很多不必要的请求,所以我把默认的间隔时间缩短到了 30 分钟。
🐞修复因 Pixiv 搜索页面改版导致的问题
2026 年 2 月初开始,Pixiv 对搜索页面进行了改版,页面元素的标签变化了,而且还在之前的 /tags 网址之外增加了 /search 网址,不知道以后是不是会全面改成 /search。
下载器的很多功能都受到了影响,现在修复。
🐞修复了下载器替换缩略图时,在 Firefly Nightly、LibreWolf 浏览器里无法加载对应图片的问题
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/562
下载器的增强功能“替换方形缩略图以显示图片比例”是默认启用的,它会替换一些 img 标签的 src 为较大尺寸的缩略图的 src。
此时在 Chrome 浏览器和 Firefox 浏览器正式版里,浏览器会自动给新图片的请求附带 Referer,但某些更注重隐私的浏览器不会附带 Referer(例如 Firefox Nightly、LibreWolf ),导致图片触发了 Pixiv 的防盗链措施,返回了 403 错误。
现在下载器会显式为 i.pximg.net 的请求添加 Referer,修复了此问题。
🐞修复了点击“预览搜索页面的筛选结果”的输入框时,导致子选项区域隐藏的问题
以前修改表单的 HTML 代码时导致了这个问题。原因是该设置的美化的开关按钮后面缺少了一个 span 标签,所以子选项的 span 元素被错误的用作服务于开关按钮的 span 了。所以点击子选项区域会导致该设置被禁用,并导致子选项区域隐藏。
🐞修复了在自己的作品页面里,异常添加了快速收藏按钮的问题
在自己的作品页面里不应该添加快速收藏按钮(以前也确实没添加),因为自己是不能收藏自己的作品的。
最近我发现异常添加了这个按钮,可能是由于 Pixiv 修改了工具栏代码导致的,现在进行了修复。
🐞修复了命名规则里的 {px} 为空时,没有去除它前面的分割符号的问题
在 18.2.0 版本里,我添加了一项优化功能“当一些命名规则为空时,下载器可以移除它前面的分割符号”。但当时遗漏了 {px} 标记,导致{px} 为空时(例如下载小说),下载器不会去掉它前面的分隔符号。
现在修复了此问题。
😊在命名规则列表里,默认添加了默认的命名规则
之前命名规则列表默认为空,所以点击命名规则右侧的“加载”按钮时会显示 no data。
现在我在里面添加了默认的命名规则,以便用户在需要时把命名规则重设为默认值。
😊单独保存小说里的图片时,把图片的 id 前移,以减少文件名重复的概率
当小说的保存格式是 txt 时,图片会保存成单独的文件,此时图片的文件名是以小说的文件名为基础,追加了图片 id 形成的。
之前下载器会把图片的 id 添加到文件名的末尾,但是当文件名很长时,图片 id 甚至更前面的字符可能会被截断,从而产生重名文件。
现在改为把图片 id 添加到小说的 {id} 之后。因为 {id} 通常位于文件名的开头,所以图片的 id 也比以前靠前,不容易被截断。这样就减少了文件名重复的概率。
但如果 {id} 位于文件名的结尾部分,依然可能会因为文件名被截断而产生重名文件,但这种情况比较少。
😊从作品标签里检查是否为 AI 生成,作为辅助手段
有些用户在上传 AI 作品时选择了非 AI 生成,导致下载器未能识别它为 AI 生成作品。但标签列表里可能有“AI 生成”的相关标签,例如:
https://www.pixiv.net/en/artworks/136175064
现在下载器会检查标签,如果含有 AI生成 和 AI-Generated,就会判断它是 AI 生成的。
😊如果作品是 AI 生成和原创作品,那么下载器保存时会添加对应的标签
对于 AI 生成和原创作品,Pixiv 会在作品页面内的标签列表前面显示加粗标记,例如:
其实作品自身的标签列表里可能没有这两个标签,但由于 Pixiv 会显示这两个标记,所以下载器现在也会同样添加这两个标记,以保持一致。
顺便,Pixiv 显示这两个标记的判断条件是:
- 如果作品的 aiType: 2,则显示 AI 生成标记
- 如果作品的 aiTypeisOriginal: true,则显示原创标记
下载器使用了同样的处理逻辑。另外,即使 aiType 不是 2,下载器也会检查其否有含有特定标签,如果有,那么下载器也会将其视为 AI 生成作品进行处理。
😊完善一个优化措施:不抓取被屏蔽的用户的作品,以减少不必要的请求
之前就有这个优化措施,不过在某些页面里未生效:
- 用户主页
- 作品页面内
- 你的关注列表页面
之前的处理方式可能是有意为之的(也可能是我单纯忘记处理了):即使你屏蔽了这个用户,也依然可以在他的主页抓取他的作品。
现在在这些页面里也会进行检查。
🕑更新了作品发布时间数据
18.2.0 2025-11-26
📚新功能:自动合并系列小说
抓取作品时,如果一个小说属于某个系列,下载器可以自动抓取这个系列里的所有小说并且合并。
这个功能位于“更多”-“下载”分类里,默认未启用。
-----------
测试记录保存在这个文档里:自动合并系列小说的测试记录
✨新增设置:合并系列小说时的命名规则
以前合并系列小说时,用户不能设置文件名规则,现在我添加了这个设置。
这个设置位于“更多”-“下载”分类里。
📖优化了保存小说时的内容
1. 下载器在小说的元数据和正文之间添加了分割线,用于区分两者。之前没有分割线,导致很难区分。
2. 保留了小说里原本的分页标记 [newpage]。之前把它去掉了,但是有用户希望保留它,所以现在不再去掉它。
3. 合并系列小说时,如果小说的格式是 EPUB,那么下载器会保存每个章节的封面图片(之前没有保存)。
4. 合并系列小说时,添加了更多的元数据。
✨新增命名标记 {age} {age_r}
- {age} 作品的年龄限制,分为:All Ages、R-18、R-18G
- {age_r} 仅当作品为限制级时,输出它的年龄限制,分为:R-18、R-18G
😊点击命名标记帮助区域里的名字,就可以复制到剪贴板
😊当一些命名规则为空时,下载器可以移除它前面的分割符号
举个例子:以前用户可能使用了 -{p_num} 这样的命名规则,如果 {p_num} 为空,会留下前面的横线 -。
现在下载器会检测空标记前面的一些分割符号(比较常见的),一并移除它,所以前面的横线 - 也可以去掉了。
现在检测的分隔符号有:['-', '_', ' ', ',', '&', '#']。
😊在一些日志前面添加了 Emoji 符号
使这些日志更醒目,当用户有需要时可以快速找到这些关键的信息(主要是任务进度)。
Emoji 列表可以查看该文件:在日志里使用的 Emoji 符号
🔧APNG 格式动图的扩展名从 png 改成 apng
之前当用户选择的动图保存格式是 APNG 时,下载器使用的扩展名是“png”,从现在起改为“apng”。
这个变化考虑了以下因素:
- 有些图片查看器(FastStone Image Viewer)不支持 apng 格式,也没有关联 apng 文件。但由于它可以打开 png 图片,所以关联了 png 文件。问题在于:当 apng 文件的扩展名是 png 时,会由这个软件打开,但它却无法播放动画。把扩展名改成 apng 之后,就会由支持 apng 格式的软件打开,这样就可以正常播放动画。
- 通过不同的扩展名来区分静态 png 图片和动态的 apng 图片,用户能够更方便的区分(例如通过搜索后缀名来查找对应的文件)。上一条也是没做区分导致的问题。
✨新功能:在关注页面里添加了“筛选不活跃的用户”的功能
在下载器的面板上添加了这个按钮。
注意:由于这是红叶赞助的功能,因此在正式版里不会添加此按钮。
😊使手动选择作品时的标记更加醒目
有用户反馈说选择作品的标记有时候不太显眼,有时候不容易看出来选择了哪些作品。其实我以前也有这个感觉,现在我给标记加上了黄色边缘,这样更加醒目。
前后对比:
🔧快速收藏按钮的功能变化:可以取消收藏
下载器在作品页面里会添加一个 ✩ 快速收藏按钮,它现在有两种功能:
- 如果这个作品没有收藏,点击按钮会收藏它(这是以前就有的功能)
- 如果这个作品已经被收藏,点击按钮会取消收藏(这是本次变化的地方。之前如果这个作品已经被收藏,点击按钮会跳转到编辑收藏的页面。现在改为了取消收藏)
🐞修复了预览作品时按 Esc 取消预览,会导致手动选择作品也被取消的问题
🐞修复了“替换方形缩略图以显示图片比例”里的一个问题
上个版本的修改导致该功能从未启用改为启用时没有执行对应的操作,现在修复。
🐞修复了下载小说图片出错时的一些问题
1. 之前的代码里,下载小说的封面图片出错时没有 catch 错误,会导致程序异常终止,所以下载也会卡住,无法完成。现在修复。
2. 保存为 TXT 格式时并下载内嵌图片时,如果某一张图片下载出错,之前下载器会跳过这个小说里后续的所有图片。这是因为在循环里使用了 return 跳出循环导致的,应该使用 continue。现在修复。
3. 之前下载小说的封面图片和内嵌图片时,如果失败不会重试。现在每个图片会重试最多 5 次。
♻️重构了合并小说的代码
合并小说的模块 MergeNovel 之前是绑定“系列小说”页面的,这样可以顺便使用该页面里的抓取流程,以简化代码。但这也有缺点:
- 该模块完全绑定了“系列小说”页面(因为要借用里面的抓取流程)
- 为了与正常抓取做区分,设置了一个专有状态,但这影响了其他几个模块(需要判断这个状态)
现在进行了重构:
- 与“系列小说”页面解耦,可以在任意地方调用该模块
- 不会与正常抓取流程、以及绑定了抓取进度事件的代码冲突
♻️重构了下载小说的相关代码
相关的代码逻辑比较复杂,我每次需要修改相关代码时也很头大,所以进行了重构:
- 把一些之前在多个模块里调归的逻辑归纳到内部,加强内聚,使调用关系更清晰易懂
- 把一些重复的逻辑抽离成公共方法
- 对网络请求(下载图片)的代码捕获错误并添加重试次数,增加了下载时的可靠性
- 保存抓取到的小说数据时,不再添加 NovelMeta['meta'] 属性。之前 meta 属性里保存了按照固定格式添加的 meta 数据,但在实际使用中不够灵活,所以去掉了它。其他模块需要添加 meta 时从相关属性里自行生成即可。
----------
现在是这样的:
下载小说需要执行 3 个流程:
1. 下载封面图片 DownloadNovelCover
2. 下载内嵌图片 DownloadNovelEmbeddedImage
3. 生成小说文件 MakeNovelFile。现在它已经包含了前面两个流程。
上述流程又会在 2 个模块里调用:
1. 下载单个小说时,Download 会调用 MakeNovelFile 模块,后者已经包含了完整的流程。
2. 合并系列小说时,MergeNovel 会调用前两个流程,然后自己生成小说文件。
♻️重构了关注页面里,一些功能按钮的代码
在关注页面里现在有 3 个功能按钮(以后可能有更多):
- 导出关注的用户列表(CSV)
- 导出关注的用户列表(JSON)
- 批量关注用户(JSON)
加上原本就有的“开始抓取”按钮,混杂了 4 种功能。由于有部分代码是通用的,所以之前这 4 种功能都塞在同一个类里,通过标记来区分。但这增加了理解和维护的难度,并且新增或改动一个功能时,需要格外注意是否会对其他功能产生影响。
现在我对代码进行了重构,把上面的 3 个功能按钮拆分到了独立的类里。关注页面的类里只保留了”开始抓取的“逻辑,代码从 640 行减少到 270 行。
♻️重构了调用 API 出错时的一些代码
- 现在 API 里的所有方法都统一从 fetch 方法转发请求
- fetch 里在遇到 429 错误时会自动重试,等到重试成功后才会返回结果。这样其他模块就不需要自己处理 429 的重试逻辑了
- 添加了 LogErrorStatus.ts 来统一输出网络错误时的日志。其他模块不需要自己监听状态码和输出日志了。
🕑更新了作品发布时间数据
18.1.0 2025-11-04
✨新增设置项:把文件保存到用户上次选择的位置
这个设置位于“下载”选项卡里,是为喜欢手动保存文件的用户设计的。他们喜欢使用“另存为”对话框来保存文件,并希望下载器能记住上次保存的位置。
如果你想使用这个功能,需要注意:
- 要让这个设置正确工作,必须在浏览器的下载设置里启用“每次下载文件时都询问保存位置”,否则浏览器不会显示另存为对话框,并且文件会保存到浏览器设置里的保存位置(而非上次选择的位置)。
- 如果你关闭了浏览器的“每次下载文件时都询问保存位置”设置,那么也应该关闭这个设置。
- 如果你启用了这个设置,下载器不会创建文件夹,只会设置文件名。这是因为实现“记住上次保存位置”的效果需要使用 a 标签的 download 属性来下载文件,此时不能创建文件夹。
- 如果你启用了这个设置,下载器总是默认这个文件下载成功(即使你取消保存这个文件也是如此)。这是为了简化处理。
✨新的抓取过滤器:抓取每个用户最新的几个作品
这个过滤器仅在关注页面(following)里生效。在其他页面类型里,这个设置不会显示,也不会生效。
这是红叶赞助的非公开功能,因此它在公开版本里总是会隐藏。它的选择器是 p.option[data-no="15"]。
🔧适配了新版图像作品的排行榜页面
Pixiv 最近更新了排行榜页面,是批量推送的,有些用户已经是新版页面,也有很多用户还是旧版页面。
下载器适配了新版图像作品的排行榜页面,可以识别缩略图,“显示更大的缩略图”等功能也可以生效了。
----------
另外有一个变化:
现在下载器在所有图像作品的排行榜页面里都会显示“抓取首次登场作品”按钮。
以前在旧版排行榜里,很多页面里没有“首次登场”的标记(例如本周排行榜),但是在新版里面有。所以下载器也对此进行了适配。
🔧适配了新版小说排行榜页面
- 适配了新版小说排行榜页面(它的抓取逻辑与之前不同)
- 修复了在旧版小说排行榜页面里存在的一些 bug
- 在新旧版本的排行榜页面里都可以使用用户选择的语言过滤小说了
🔧调整了“下载间隔”设置的默认值
之前两个子选项的默认值是 120 和 0,现在是 150 和 1。
😊抓取时如果排除了作品,会在日志里显示原因
例如:
下载器排除了一些作品,原因:作品类型
下载器排除了一些作品,原因:图片的宽高
下载器排除了一些作品,原因:多图作品的图片数量上限
下载器排除了一些作品,原因:收藏数量
下载器排除了一些作品,原因:ID 范围
下载器排除了一些作品,原因:不能含有标签
下载器排除了一些作品,原因:用户阻止名单显示的原因比较简单,没有包含更具体的原因(例如因为“作品类型”被排除时,没有显示它是哪种类型;因为“不能含有标签”被排除时,没有显示哪个标签使其被排除),也没有显示被排除的作品数量。不过通常也够用了。
之前经常有用户来问我“抓取完毕,但没有找到符合筛选条件的作品”是怎么回事,其实通常都是因为被某些过滤条件排除了。现在让他们看日志就知道原因了。
😊给新增的设置了添加 new 标记
这样便于用户找到新增的设置。
😊优化下载卡住时的体验
1. 等待时间从 5 秒增加到 30 秒。
2. 不再显示弹出的消息框(这是为了避免在不必要的时候打扰用户)。只在日志里显示提示。
🕑更新了作品发布时间数据
18.0.1 2025-10-25
🐞修复了“显示更大的缩略图”显示异常的问题
最近 Pixiv 的很多页面都改版了,一个共同的特征是原本宽度为 1224px 的元素的父元素也加上了 1224px 的宽度限制,所以这次修复主要是查找这些父元素,加宽它们的宽度。
😊下载卡住时不再自动刷新页面重试,并且显示更详细的帮助信息
18.0.0 2025-10-22
✨新功能:复制按钮
这是红叶赞助的公开功能。
下载器会在作品缩略图上和作品页面内显示一个复制按钮,点击它就可以复制作品的图片和一些数据。
你可以自定义要复制的数据和格式。
在作品页面里,以及预览作品时,你可以按快捷键 Alt + C 进行复制。
--------------
复制图片时的行为:
- 对于插画、漫画作品:当你点击作品缩略图上的复制按钮、以及作品页面里的复制按钮时,下载器总是复制该作品的 第一张 图片。但如果你在预览作品时按下快捷键的话,下载器会复制当前显示的这张图片。
- 对于动图作品,只会复制它的静态缩略图
- 对于小说作品,只会复制它的封面图
✨在“预览作品的详细信息”的面板上添加了两个复制按钮
之前有 Copy TXT 和 Copy JSON 两个按钮,现在添加了 Copy URL 和一个复制按钮。最后的复制按钮就是“复制按钮”的功能。
✨在长按鼠标右键查看作品的大图时,也可以使用快捷键进行复制
在使用“在缩略图上长按鼠标右键时显示大图”功能时,也可以按 Alt + C 进行复制。
✨在图片查看器里添加了复制按钮和下载单图的按钮
图片查看器底部之前有 3 个按钮,现在我添加了 2 个按钮:
- 复制按钮,可以点击或者按 Alt + C 使用。
- 下载单图的按钮,可以点击或者按 C 使用。
😊在作品页面内,大图右侧添加了图片查看器和复制按钮
之前只有下载按钮,现在添加了图片查看器和复制按钮。
😊优化了图片查看器
1. 加大了按钮尺寸
2. 鼠标经过按钮时,背景颜色会变成蓝色以提供反馈
3. 显示图片名称和分辨率
4. 优化了该模块的代码,并且降低了耦合度
😊在“投稿时间”设置里添加了快捷设置时间的按钮,以提高效率
- 对开始时间添加了“过去”、“现在”按钮。
- 对结束时间添加了“现在”、“未来”按钮。
点击按钮就可以设置成对应的时间,在有需要的时候很方便。
另外,当用户需要设置为最近的日期时,可以先设置为“现在”,然后修改日期、时间即可,不需要修改年份,这样也可以提高效率。
😊优化了“预览作品”时,图片顶部显示的信息
现在一些关键信息会显示为具有背景颜色的独立元素,例如:
😊限制了“预览作品的详细信息”面板的最大高度
以前没有限制高度,但有些作品的简介太长了,会导致面板高度超出屏幕,无法完全显示。例如这个作品:
https://www.pixiv.net/artworks/135895589
现在我限制了最大高度为 60vh,以避免信息面板超出屏幕。
🔧把“预览作品的详细信息”的设置项下移了一些
我把这个设置项下移了一些,因为这个设置可能不是很常用。
😊优化了“下载推荐作品”的按钮
这个按钮现在具有动画效果,而且其文本可以根据语言自动变化。
😊缩略图上的下载按钮顺序改为最后一个
调整了缩略图上的3个按钮的顺序,下载按钮放到了最下面。
之前是在第一个(最上方),但是由于用户通常会先把鼠标放到缩略图中间位置,然后再点击按钮,此时点击第一个按钮的话,鼠标移动距离比较长。改成最后一个之后,鼠标移动距离会缩短,点击起来更加方便。
😊下载卡住时,自动刷新页面重试
有些少见的情况会导致下载卡住,下载器之前不会自动处理,只会显示提示。现在如果用户启用了“自动开始下载”,下载器会自动刷新页面,因为有时这能在一定程度上解决问题。
注:在下一次更新里移除了此功能。
🐞修复了在某些页面里,不能保存用户设置的抓取数量的问题
之前的代码存在一处 bug,在有个地方忘记判断 max 为 -1 的情况,导致用户设置的值会被重置为 max。现在修复。
🐞修复了在移动端的作品页面里,没有添加快速收藏按钮的问题
在移动端页面里,作品大图下面的工具栏的 div 从 4 个变成了 5 个,导致下载器识别失败,所以不会添加快速收藏按钮。这也导致下载器不会添加复制按钮。
现在修复了这个问题。
🐞修复了一些快捷键会误触发的问题
下载器的有些快捷键如 C 之前没有排除 Ctrl 键,会在用户按 Ctrl + C 的时候误触发。现在对这种情况进行了修复。
🕑更新了作品发布时间数据
17.9.0 2025-10-03
😊用户点击设置项或按钮时,可以打开对应的 Wiki 页面
这是个很方便的功能,以前没有做,一个原因是没有想到,另一个原因是 Wiki 这两年都没怎么更新,逐渐不实用了。所以这个功能的背后是我更新了 Wiki,以及对下载器的设置项和按钮进行了梳理,花了很多时间才完成了这个功能。
😊在常见问题和使用说明里添加了 Wiki 链接
✨把抓取范围拆分成了 2 个设置:抓取多少作品/抓取多少页面
之前的抓取范围设置只有 1 个设置。在每种页面类型里,下载器会动态的修改它的内容,使之变成“抓取多少作品”或“抓取多少页面”。
但是之前的代码写的不好,相关代码和逻辑分散在许多个模块里,使得理解、修改这个功能变得很困难。
现在我进行了修改,“抓取多少作品”和“抓取多少页面”现在是 2 个独立的设置。并且我添加了 src\ts\setting\CrawlNumber.ts 模块来管理这两个设置,把相关逻辑都集中在这一个文件里了。
⚠️注意:
这个修改导致了“抓取多少页面”和“抓取多少作品”的值被重置为了默认值(因为这两个设置属性被移除了:setWantPage、wantPageArr)。
如果你需要的话,可以重新修改它们的值。
---------
其实这个修改主要是为这个功能铺路:“鼠标点击设置名称可以跳转到对应的 Wiki 页面”。之前只有 1 个设置但是却要对应 2 个 Wiki 页面,会使本来就很复杂的情况变得更复杂,💩山上面再加💩。现在拆分成 2 个设置就能方便的添加这个功能了,而且代码也进行了重构,舒服多了。
🐞修复了多次开始下载时,收藏作品的数量会超过下载的作品数量的问题
这个问题发生在用户下载完毕之后,且收藏任务完成之前,用户再次点击“开始下载”按钮时。
原因是这样的:
1. 用户启用了“下载之后收藏作品”功能。
2. 假设用户下载完毕(48/48),但收藏没有完毕(18/48),剩余 30 个收藏任务已经被添加到等待队列里。
3. 用户再次点击“开始下载”按钮进行下载,并且依然需要收藏这些作品。
4. 下载器会收藏之前剩余的 30 个作品,加上这次的 48 个作品,导致收藏完成时,显示的进度是 78/48。
现在我修复了这个问题。
解决办法在第 2 步里:之前下载完成时,剩余的 30 收藏任务已经被添加到等待队列里,并且会继续执行。现在我改为逐个添加收藏任务,最多只有 1 个收藏任务在等待队列里。虽然这也会造成 49/48 的问题,不过我进行了针对性检测,所以最后会显示为 48/48。
😊在 Pixivision 里,使用固定的命名规则
在 Pixivision 里,之前默认的命名规则不适合它,现在改为使用使用 pixivision/{page_title}/{id}。
😊文件名异常时,暂停下载
之前即使文件名异常,下载器也会继续下载,但这会导致下载很多无效文件,过后还得重新下载。
现在下载器检测到文件名异常时,会立即暂停下载,避免不必要的下载。
😊优化了下载器面板在移动端页面里的一些样式
修复了一些按钮重叠、一行只能显示一个按钮、面板显示不全等问题。
😊优化了一些提示信息
😊在 Font Family 里添加 Segeo UI 字体
在之前的 FontFamily 里添加了 'Segeo UI',这主要是为了优化英语用户的显示效果。
因为我发现 Windows 的英语版并没有安装 Noto 字体,所以之前的 FontFamily 会使字体跌落到 Microsoft YaHei。现在把 Segeo UI 添加到前面会取代 Microsoft YaHei,视觉效果更好。
现在的 FontFamily 是:
'Noto Sans SC', 'Noto Sans', 'Segeo UI', 'Segeo UI Mono', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;😊优化了汇总的简介文件的保存位置
现在的规则:
1. 如果汇总文件里的简介数据来自多个不同用户的作品,它会直接保存到浏览器的下载目录里。因为此时它不属于某一个用户,不应该将其放入用户名的文件夹里。
2. 如果简介数据来自同一个画师,则分为 2 种情况:
- 如果命名规则里的某个文件夹里含有 {user},下载器会把汇总文件保存到这个文件夹里。对于默认的命名规则 pixiv/{user}-{user_id}/{id}-{title},下载器会将汇总文件保存到 pixiv/{user}-{user_id}/ 里。
- 如果命名规则里的文件夹都不包含 {user},下载器会将其直接保存到浏览器的下载目录里。
🕑更新了作品发布时间数据
17.8.1 2025-08-20
🦊在 Readme 和 更新说明里添加 ADD-ONS 链接
下载器的 Firefox 版本已经审核通过,可以安装了:
https://addons.mozilla.org/firefox/addon/powerfulpixivdownloader/
17.8.0 2025-08-15
🦊兼容 Firefox 浏览器
🚀升级依赖项到最新版
所有依赖项的版本都更新了。建议开发人员删除旧的 node_modules 文件夹,重新执行 npm i 安装依赖。
🖼️“预览图片”功能现在可以预览搜索框的下拉内容了
📜完善了一些语言的“高亮关键字”效果
有些语言(比如日语、韩语、俄语)的一些选项没有“高亮关键字”效果,因为我不懂这些语言,所以没有给对应的关键字加上高亮标记。现在使用 AI 帮我解决了这个问题,加上了高亮标记。
😊优化了下载器的选项的垂直居中对齐效果
下载器的选项里有文本、按钮、输入框等元素。之前这些元素的垂直居中效果不好,看起来有点别扭。早期开发时没有使用 flex 来控制这些元素的对齐方式,现在改成了 flex,并优化了一些样式,优化了垂直居中对齐效果。
😊为下载器的按钮添加了动画效果
现在下载器的按钮有了水波扩散的效果。
🐞修复了搜索框下拉内容里的图片被意外放大的问题
此问题会导致图片重叠显示。
🐞修复了没有加宽插画页面底部的“推荐作品”的问题
在“显示更大的缩略图”时,需要加宽这里的宽度。
有些作品的底部是相关作品,有的是推荐作品,我不清楚是什么规律。之前没有处理“推荐作品”的宽度,现在修复了此问题。
把默认的抓取页数/作品个数的数量调低
比如在搜索页面之前下载器默认使用最大值,抓取 1000 个页面,但是这太多了,感觉不适合作为默认值,我改成了 1。
其他一些页面里默认的页数/个数也进行了下调。
移除了 pixiv.cat 主机权限
pixiv.cat 是个反代理 pixiv 图片的网站。以前有些用户没有使用梯子,而是使用 Nginx 反代理的方式,把 pximg.net 替换成 pixiv.cat 来访问 pixiv。但是现在这个域名已经被墙了,没法作为不翻墙直接访问 pixiv 的方法了。
而且有些不明真相的用户还会对下载器使用 pixiv.cat 权限感到担心,正好 pixiv.cat 已经被墙了,所以我就去掉了这个权限。
17.7.4 2025-07-30
当文件名异常时,不保存其下载记录,以便用户可以再次下载它
之前当文件名异常时(例如变成 UUID 格式),下载器依然会保存它的下载记录,这导致了问题:用户在禁用了导致此问题的扩展之后,可能想要重新下载这个文件,但此时会因为“不下载重复文件”而导致这个文件被跳过(除非关闭“不下载重复文件”功能)。
现在下载器在文件名异常时,不会保存其下载记录了。
技术细节:即使文件名异常,下载器保存的下载记录里的文件名依然是正常的,因为保存下载记录时,文件名是下载器生成的正常的文件名。
😊因为“不下载重复文件”而跳过的日志现在会集中显示
之前是每跳过一个文件就输出一条日志,在跳过了大量文件时,这些日志会占据大量日志区域。现在我把跳过的文件汇总在一条日志里输出,减少了占据的空间。
此功能新增了一个模块:src\ts\download\ShowDuplicateLog.ts。
之前和现在的效果对比:
现在还会显示跳过的文件数量。
🕑更新了作品发布时间数据
17.7.3 2025-07-26
📝优化了文件名异常的提示
最近 IDM Integration Module 扩展更新后,会导致下载器的文件名异常。由于安装了 IDM 扩展的用户非常多,所以此问题集中爆发了,很多人都问我,我疲于应付。现在我添加了更详细的说明,让用户知道问题的原因,以及应该怎么处理。
另外,以前下载器显示对应的提示时是当作错误处理的,所以文字的颜色是红色的。现在文字内容变多了,为了易于阅读,文字使用了默认的颜色。
17.7.2 2025-07-03
😊把图片右上角的下载按钮移动到图片之外,避免遮挡图片内容
😊处于漫画页面里的阅读模式时,不显示顶部的“显示日志”按钮
17.7.1 2025-07-01
🐞修复了图片右上角的下载按钮可能会挡住页码的问题
在图片页面里大图上显示的下载按钮,有可能挡住右上角的页码,尤其是用户点击鼠标,或者按方向键来切换图片时。
之前我都是用滚轮滚动的,很少会挡住,没发现这个问题。现在进行了修复。
17.7.0 2025-07-01
✨新功能:在插画和漫画页面里,下载器会为每张图片添加下载按钮
该功能仅在作品页面(/artworks/)里生效。当你想要从多图作品里下载某些图片(而非所有图片)时很有用。
对于单图作品,下载器会在大图的右上角添加一个下载按钮。
对于多图作品,点击“查看全部”或“阅读作品”按钮后,下载器才会在每张图片的右上角添加下载按钮。
点击下载按钮,就可以下载单张图片。
PS:该功能目前只能在电脑端页面里使用。我没有将其适配到移动端页面。
✨优化了“在多图作品页面里显示缩略图列表”的功能
下载器会在多图作品页面里创建一个缩略图列表,当用户点击某张缩略图时,会打开图片查看器。
现在我对此功能进行了优化:
1. 布局优化,之前只是一横排,超出宽度的缩略图需要使用滚动条才能看到。现在缩略图会全部显示出来。
2. 鼠标放在缩略图上时,右上角会显示下载按钮,点击按钮就可以下载这张图片。
3. 鼠标停留在缩略图上后,可以预览这张图片(也就是“预览作品”功能),也可以使用快捷键(C 或 D)进行下载。
📁修改了默认的命名规则
现在默认的命名规则是:
pixiv/{user}-{user_id}/{id}-{title}
之前默认的命名规则是 {page_title}/{id},但有时会存在问题,所以我进行了修改。比如在作品页面里,下载这个作品时,{page_title} 始终是这个作品的信息,但这个页面上还有很多其他作品可以直接下载,而 {page_title} 不是它们的信息。
---------
另外,当用户启用“在不同的页面类型中使用不同的命名规则”时,某些页面的默认规则会有所不同。这个功能是以前就有的,不过这次修改后,这些规则也随之发生了一些变化:
- 在插画、小说的搜索页面里,建立一层 {page_tag} 文件夹
- 在收藏页面里,建立一层 {page_tag} 文件夹
- 在插画、小说的排行榜页面里,规则为 pixiv/{page_title}/{rank}-{id}-{title}
- 在插画、小说的系列页面里,规则为 pixiv/{user}-{user_id}/{series_title}/{series_order}-{title}-{id}
默认的命名规则会建立 2 层文件夹,而这些特殊的规则最多会建立 3 层文件夹。
#### 调查自定义的命名规则
我在群里问了一下大家的自定义命名规则,虽然样本数量不多,但也可以作为参考:
{user}_{date}_{title}_{id}
{id}_{title}_{user_id}_{user}
{id}{user}-{user_id}-{title}{tags}{tags_translate}{page_tag}-{like}-{bmk}-{upload_date}
{user_id}_{user}/{type}/{date} {title}/{id}
{user_id}-{user}/{title}-{id}
{user} (id={user_id})/{id}
{user} {user_id}/{id} {title} {upload_date}
{user}/{title}{date}/{id}
{user}/{title}{id}上面 9 条规则里,有 3 条没有建立文件夹,我把它们放在了前面。有 6 条建立了文件夹。
下面是一些高频使用的标签:
- {id} 是必须的,所以涉及 9 条
- {user} 也涉及了 9 条,必用。在 6 个建立文件夹的规则里,它都是作为文件夹名
- {title} 涉及了 8 条。有 2 次作为文件夹名,其他 6 次都是作为文件名
- {user_id} 涉及了 6 条。有 4 次作为文件夹名,2 次作为文件名
- {date} 涉及了 3 条。有 2 次作为文件夹名,1 次作为文件名
- {upload_date} 涉及了 2 条。都是作为文件名
- 其余的标签都只出现了 1 次
分割符号:
- - 涉及 3 条
- _ 涉及 2 条
- 涉及 2 条(空格)
- 有 2 条没有使用分割符号,不过这两条规则都很简单,不用也问题不大
#### 调查是否需要单独建立一个 pixiv 文件夹
浏览器只能把文件保存到下载目录里,但这里通常也会有非 pixiv 的文件,会和 pixiv 的文件混杂在一起,不便于管理。
我在考虑是否让默认规则建立一个 pixiv 文件夹,这样下载器下载的文件就都在这一个文件夹里,方便管理。
在 QQ 群里的调查结果是 20:3,绝大多数用户都会把 pixiv 的文件单独保存到一个文件夹里。
#### 调查结论
结合上面两个调查,我决定这样修改:
- 使用 {user}、{user_id} 建立文件夹
- 使用 {id}、{title} 作为文件名
- 使用 - 作为分割符号
- 在规则最前面使用 pixiv 建立一层文件夹
最终新的命名规则为:
pixiv/{user}-{user_id}/{id}-{title}
📜顶部日志区域改为默认隐藏
把日志改为默认隐藏的原因有:
1. 主要的原因:日志区域出现后,下载器在缩略图右上角显示的下载按钮会向上移动。这是因为这些按钮显示时设置了固定的 top 值,但日志区域出现后,页面的高度变了,按钮位置就不再是之前的正确位置了。把日志改为隐藏,可以避免这个问题。
2. 有些用户提出过想默认隐藏日志。
3. 隐藏日志可以节省 CPU 资源,因为浏览器不需要绘制隐藏的元素。
📜添加了一个按钮用于显示日志
当页面滚动到顶部时,下载器会显示一个“查看日志”的按钮,鼠标放上去就会显示日志。
📜可以使用快捷键 L 查看/隐藏日志
下载器添加了个快捷键 L,下载器会根据日志区域是否完全可见来切换其显示状态。
如果你在页面滚动之后按下 L,下载器会跳转到页面顶部并显示日志。
📜在日志区域两侧的空白处点击,可以隐藏日志区域
日志区域是显示在页面中间的,两侧有空白区域。现在点击空白区域可以隐藏日志。
📜日志区域的最大高度从 200px 增加到 300px
因为默认隐藏了日志区域,所以即使日志区域占用了更多的高度,也不会导致用户不满。
之前的 200px 高度有点太小了,不足以完整显示一次简单的下载日志(如下载单个作品),会出现滚动条。现在增加到 300px 后,可以完整显示日志了,不会出现滚动条。
📜日志区域的 z-index 从 1 改为 0
这是因为在漫画页面里点击“查看全部”阅读漫画时,阅读区域是 fixed 的。当日志区域的 z-index 为 1 时,如果此时开始下载,日志区域就会显示在漫画区域上层,遮挡了阅读区域。
现在我把 z-index 改为 0 以解决此问题。
😊对约稿页面的一些子页面进行了有限的支持
约稿页面现在依然不支持批量下载(比如一次下载多少页),一方面是我懒,另一方面确实必要性不大,我觉得约稿页面就是得挑着看的,没必要全部下载。
不过其他一些功能支持了更多页面。比如预览作品、快速下载单个作品、显示更大的缩略图等。
之前只支持约稿页面:
https://www.pixiv.net/request
现在在下面两个页面里也可以使用了:
1. 正在接稿中用户的作品:
https://www.pixiv.net/request/creators/works/illust
2. 已完成的约稿页面:
https://www.pixiv.net/request/complete/illust
因为这两个页面里是大量的作品列表,所以我进行了支持。
🐞修复了预览作品时,快速连续按两次 C 可能会下载所有图片的问题
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/497
在预览作品时,按 C 可以下载当前查看的这一张图片。但是在短时间内连续按两次 C 有可能会下载所有图片。
原因就是按的间隔太短了,但正常使用时不应该需要连续按两次 C 才对。
现在我进行了修复,缩短了触发 bug 的窗口期,但极端情况下(连按的非常快)依然有可能触发。我懒得再管了。
🐞修复了多图页面里,下载器添加的缩略图列表有时位置异常的问题
下载器会在多图作品页面里添加缩略图列表。最近我发现无刷新切换到其他作品时,缩略图列表会变得靠上,Pixiv 原本的“查看全部”按钮会挡住缩略图列表。
原因是之前下载器会把缩略图列表添加到 main figcaption 之前,当无刷新切换作品时,下载器先添加了缩略图列表,但随后 Pixiv 在 main figcaption 前面又添加了其他元素,导致缩略图列表变得靠上了。
现在我把缩略图列表放到了 main figcaption 里面,解决了此问题。
🐞缓解了有时新页面加载之后,会显示旧页面里的图片的预览的问题
偶尔会出现此问题,现在我降低了此问题出现的频率。
-----------
触发方式是:先点击一个作品,然后快速把鼠标移动到相邻的另一个作品上面。
在点击第一个作品后,会打开它的页面,但这需要一定的加载时间。所以旧页面上的内容依然会存在一段时间,不会立即消失(这就是触发 BUG 的窗口期)。在此期间把鼠标移动到另一个作品上面,就可能触发它的预览。之后新页面加载出来了,但另一个作品的预览也显示出来了。
新页面加载的时间越久,越容易出现这个问题,因为窗口期变长了。如果点击作品后,很快就加载了新的页面内容,那就不容易触发此问题。
🐞修复了一些页面里“显示更大的缩略图”显示异常的问题
🕑更新了作品发布时间数据
17.6.1 2025/06/05
🐞修复了一些页面里“显示更大的缩略图”显示异常的问题
🐞修复了首页里“抓取 ID 区间”开始后,没有显示提示的问题
开始抓取后,顶部会有显示一条提示,例如“抓取 ID 区间: 100 - 200”。之前某次修改导致这个提示不会显示了,现在修复。
💡为首页的“导入 ID 列表”添加了提示
“导入 ID 列表”需要选择一个 JSON 文件。它的代码格式如下:
[
{ "id": "130827095", "type": "illusts" },
{ "id": "130816057", "type": "illusts" },
{ "id": "130811075", "type": "novel" },
{ "id": "130808918", "type": "novel" }
]之前下载器没有提示,现在会显示上面的提示。
🕑更新了作品发布时间数据
17.6.0 2025/05/19
🐞修复了新版首页里“显示更大的缩略图”显示错乱的问题
🗑️移除设置:隐藏浏览器底部的下载栏
以前 Chrome 浏览器有底部下载栏,但从 2023 年开始就没有了,所以这个设置已经不需要了。
根据下面这个网址里的说明,是从 Chrome V112 版本取消的底部下载栏:
https://groups.google.com/a/chromium.org/g/chromium-extensions/c/CMz8_t9YgL4
🗑️移除设置:添加命名标记前缀
“命名”分类下的“添加命名标记前缀”会为一些命名标记添加前缀,比如在 {user} 前面添加 user_。
但是这个功能只对少数几个标记有效,而且前缀是固定的,不够灵活,所以我移除了这个设置。
用户可以在命名规则里自行添加前缀以替代此功能,例如输入 user {user} 或 用户名 {user}。
💡为下载器的设置项添加了更多提示
下载器的一些设置项之前没有提示文字,或者过于简略,有时会导致用户产生疑惑。
现在我添加了更多的说明文字,以提高易用性。
🐧修改了QQ群号
之前的群因为有些人发色图导致信用降低,无法通过群号搜索了。所以我建了个新群。
🕑更新了作品发布时间数据
17.5.0 2025/04/17
✨支持了“好P友的新作品”页面
https://www.pixiv.net/mypixiv_new_illust.php
在这个页面里可以显示更大的缩略图、批量抓取等。
🤖把 Tag 列表里含有“AI生成”的作品也视为 AI 作品
之前选择器判断的是 aiType === 2,但是有些 AI 图作者自己选择的是非 AI 分类,所以 aiType 是 1,无法判断为 AI 图。
此时如果标签里有“AI生成”,那么就可以识别为 AI 图。
例如:https://www.pixiv.net/artworks/128886235
PS:“AI生成”这个标签在所有语言里都是一样的,不会变化。
🐞修复了在手动选择作品后,再切换页面后,被选择的作品缩略图上没有标记的问题
原因是新版页面里没有 #root 元素了,导致之前的一些代码失效。现在修复。
🐞修复了在作品页面里,切换到其他作者时,高亮状态没有变化的问题
原因同上。
🐞修复了“在搜索页面里移除已关注用户的作品 ”失效的问题
原因同上。
🐞修复了关注一个用户后,底部弹出的推荐用户列表里,不能预览缩略图的问题
移除了代码里的 #root 选择器
以前的 Pixiv 页面有 #root 元素,页面里大部分的可视元素都在里面,所以选择器有很多地方使用了 #root。
现在我用 3 个账号测试,页面里都没有 #root 元素了,所以从代码里也把它去掉了。
🕑更新了作品发布时间数据
17.4.0 2025/04/08
🐞修复了在搜索页面里,可能没有添加快速筛选区域的问题
现在有的 Pixiv 账号会遇到此问题,有的不会。原因是 Pixiv 页面改版了,有些账号的页面代码变化了,导致下载器在寻找一些 DOM 元素时找不到,因此功能失效了。
其中有个很大的变化是新版页面里没有 #root 元素了,因此下载器的很多功能都受到了影响。
现在修复。
🐞修复了在搜索页面里,抓取时没有生成预览图的问题
原因同上。
🐞修复了在一些页面里,高亮关注的用户的功能失效的问题
原因同上。
🐞修复了在许多页面里,“显示更大的缩略图”功能失效的问题
原因同上。
另外,地区排行榜以前不支持显示显示更大的缩略图,现在进行了支持。
---------
我对 src\style\showLargerThumbnails.less 里的代码也进行了优化。以前所有页面类型里的样式都在同一层级,当需要修改某个页面里的样式时根本找不到对应的样式。而且修改某些样式可能会影响多个页面里的表现。
现在我把每个页面类型里的样式分别保存,不再像以前一样是大杂烩了。
🐞修复了在新版首页,预览作品时按 B 收藏多图作品后,收藏按钮没有变红的问题
🗑删除了“横图占用二倍宽度”设置
这个设置的初衷是:以前一些横图夹杂在竖图之间,它们的宽度一样,但横图在高度上比较小,面积小,视觉效果不平衡。所以下载器把横图的宽度放大,使其与竖图达成视觉平衡。
但现在我感觉大多数时候已经不需要这个设置了,横图面积看起来不算太小。不知道是不是和以前相比,图片的样式也有发生变化?
而且这个设置在现在的样式下有时还会起反作用,因为它给横图作品设置了固定的 width:30%, 如果横图的原图没这么大,就会导致左右两侧出现空白区域。极端情况如下:
https://www.pixiv.net/users/106029976
🕑更新了作品发布时间数据
17.3.4 2025/03/30
🦊检测火狐浏览器,显示提示信息
有人在火狐扩展商店上传了这个扩展,但不是我发布的。
这个下载器不支持 Firefox,我也不会为其修复问题。
https://addons.mozilla.org/en-US/firefox/addon/powerful-pixiv-downloader/
现在下载器会显示提示:
你好!下载器检测到它运行在 Firefox 浏览器上。
有人在火狐扩展商店(ADD-ONS)发布了这个扩展,但不是我发布的。
这个下载器不支持 Firefox,可能会遇到一些问题。我不会为其修复问题。但是 addons 里的这个扩展版本号停留在 17.2.0,没有更新,所以我现在添加这个提示,应该不会有显示出来的时候,除非他在 addons 里更新了这个版本。
收藏作品出现 403 错误时,显示提示
大量抓取或下载时,用户的 Pixiv 账号可能会被 Pixiv 禁止添加收藏,在收藏作品时会返回 403 错误代码。我有个账号就是这样。
PS:这不会影响取消收藏,可以正常删除收藏。也不会影响正常浏览和下载作品。
现在下载器会对收藏作品的 403 错误显示提示:403 Forbidden, 你的账号已经被 Pixiv 限制。
设置了下载器的字体,与 Pixiv 保持一致
最近浏览器的默认字体变成了 Noto Sans SC(思源黑体),之前是微软雅黑(我猜测这个变化可能和 Windows 11 最近的更新有关,在某些情况下的默认字体跌落到思源黑体)。
下载器的字体也变成了 Noto Sans SC,但是这与 Pixiv 不符,因为 Pixiv 设置的字体在 Windows 11 上渲染出来是微软雅黑。
font-family: win-bug-omega, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", "Hiragino Kaku Gothic ProN", Meiryo, sans-serif;所以我对下载器设置了相同的字体,使其维持原样(微软雅黑)。
例外:对于下载器面板上的 textarea 类型的输入框,其字体使用 sans-serif,也就是 Noto Sans SC。这是因为这些输入框里有大量的文字,而 Noto Sans SC 的字体没有微软雅黑那样撑的很大,看起来会更舒服。
至于下载器面板上的普通文字,使用微软雅黑是为了在低 PPI 屏幕上看的更清晰易读。
🐞修复了在排行榜页面里,下载器的 textarea 不会自动撑开高度的问题
这是因为 Pixiv 在该页面里的样式设置了 textarea 的高度固定为 20 px,导致下载器的 textarea 无法按照 row 的值撑开高度,现在修复。
🐞修复了在新版首页里,无法高亮关注的用户的 bug
这是因为下载器需要先检测用户是否登录了 Pixiv 账号,然后才会高亮关注的用户。
但新版首页里一些源代码产生了变化,下载器需要修改“检测用户是否登录”的代码,现在进行了适配。
✨在“抓取多少页面/作品”设置的后面添加了按钮,可以快速设置最小值和最大值
有时用户需要手动修改此设置,比较麻烦。现在下载器添加了一个按钮,点击就可以直接把值设置为最小值或最大值。
通常最小值是 1,最大值是 -1,不过有些页面可能会特殊一些,下载器会显示实际可用的值。
😊界面优化:预览作品时,收藏数量后面会显示爱心图标
如下所示:
第一个数字就是作品的收藏数量。之前只是单纯的数字,新用户可能不知道这代表的是哪一项数据。现在添加了一个爱心图标,就很容易明白是收藏数量了。
PS:这个爱心图标是个 svg 图标。我试过用 emoji 的心 ♥️,但是 emoji 不能更改颜色,所以就改成 svg 了,可以显示为和文字相同的白色。
为一些滚动事件设置 passive 参数
例如:
el.addEventListener('mousewheel', this.onWheelScroll, {
passive: false,
})以前没有设置 passive 参数,导致触发这些事件时,浏览器会在控制台显示警告:
现在设置了 passive: false,明确下载器将会调用 event.preventDefault() 参数,这样浏览器就不会显示这个警告了。
🕑更新了作品发布时间数据
17.3.3 2025/03/26
✨适配了新版首页
Pixiv 的首页网址现在是一个单独的“首页”页面,而非之前默认的插画页面。
现在对这个首页进行了适配,可以正常预览图片、选择作品、下载作品、显示更大的缩略图。
🕑更新了作品发布时间数据
17.3.2 2025/01/11
✨对“发现-推荐用户”页面进行了有限的支持
https://www.pixiv.net/discovery/users
现在在这个页面里,选择器可以预览作品、快速下载、手动选择作品了。
PS:该页面不区分插画和小说,也就是说只有这一个网址,没有 novel/ 页面。
🐞修复了在“大家的新作”页面里,预览作品等功能失效的问题
这个页面改版了,作品缩略图的选择器变化,导致在此页面里出现了一些问题:
- 预览作品功能失效
- 显示原图功能失效
- 缩略图右上角的查看和下载图标不会显示
现在修复了此问题。
⚙️“不下载重复文件”功能改为默认禁用
17.3.0 版本里我把“不下载重复文件”改为了默认启用,但是这引起了一些用户的困惑。
现在改回默认禁用。
优化了一些说明文字
{series_title}、{series_order} 、{series_id} 说明里的:
只在系列页面中可用(小说系列、漫画系列)。
改为
当作品属于一个系列时可用。
🕑更新了作品发布时间数据
17.3.1 2024/12/29
😊鼠标放到作品缩略图上时,不再立即加载作品数据,改为必要时才加载
之前为了让预览作品功能更快响应,下载器会在鼠标进入作品缩略图时会立即加载这个作品的数据。这样在等待时间结束后,就可以立即开始显示图片。
但这样会产生不必要的请求,因为用户即使不想预览作品,仅仅只是鼠标划过作品缩略图,也会产生请求。
多余的请求会产生不良影响:
1. 会增加触发 429 限制的可能性,特别是在抓取时
2. 对于 Pixiv 会员来说,只要请求过一个作品的数据,就会导致这个作品出现在浏览历史里。但这个作品用户可能根本没有打算看(预览)。
关于浏览历史的 issue:https://github.com/xuejianxianzun/PixivBatchDownloader/issues/444
https://www.pixiv.net/history.php
经过测试,浏览历史与用户是否开通了 Pixiv 会员有关系。
如果用户没有开通 Pixiv 会员,那么仅仅请求作品数据是不会让这个作品显示在浏览历史里的。必须打开作品页面才行。
但对于 Pixiv 会员,请求作品数据也会导致这个作品显示在浏览历史里。但很多作品用户并没有预览过,只是鼠标划过就导致出现在了历史里,很不合理。
所以现在下载器改成了在需要显示预览时(即鼠标停留在作品上一定时间后),才会发起请求。
😊预览作品时,记忆每个作品查看到了第几张图片
之前下载器不会记忆每个作品查看到了第几张图片,当用户预览一个新的作品时,之前的预览进度就丢失了。也就是再预览之前的作品时,会显示第一张图片。
现在下载器会记住浏览进度,这样在不同作品之间切换预览时,会从上一次预览到的地方开始。
PS:这个记忆是非持久的,刷新页面就没了。
与之相关的一个 issue:https://github.com/xuejianxianzun/PixivBatchDownloader/issues/451
他的问题是当预览一个作品时,按 C 开始下载,由于页面顶部出现了日志区域,导致鼠标脱离了作品缩略图区域,预览消失了。之后再次预览时,会显示第一张图片,丢失了之前的预览进度。
现在不会丢失预览进度了。
更新下载进度条时使用节流
下载进度的更新每秒钟可能会触发几十次、上百次。之前下载器没有做节流处理(没意识到这个问题,哈哈),现在做了节流处理。
不用节流的话,好处是进度更新很及时,下载进度是平滑增加的,视觉效果上很丝滑。
但是当下载器大量下载文件时,进度更新的总次数会非常多,这会导致内存占用微小且缓慢的上升。
使用节流就是为了避免上面的问题。现在下载器每 200 ms 更新一次进度信息。
每个 Log 区域保存的日志从 100 条增加到 300 条
大量下载时,日志区域太多的话会在页面顶部占据太多空间。这样可以减少日志区域的数量,以减少占据的高度。
修改了因为不下载重复文件而跳过文件时的提示
从:
检测到文件 78409039_p0 已经下载过,跳过此次下载
改为:
跳过 78409039_p0 因为:不下载重复文件
在上个版本里,我把“不下载重复文件”功能改为了默认启用,但这样有些新用户在看到下载器跳过文件时,不知道是哪个设置导致的。
新的提示里把设置名字写出来了,可能会有所帮助。至少也更简洁和直接了。
🐞修复了特殊情况下,在作品页面里会移除这个作者自己的元素的 bug
下载器会移除“用户阻止名单”里的用户的作品,但不会在该用户自己的页面里移除他自己的作品(否则就全都移除了,没法看到他的主页是什么样了)。
但是在这个作品页面里发生了意外:
https://www.pixiv.net/artworks/123098863
下载器移除了这个作者自己的一些元素(虽然不是作品元素,但也不应该移除)。
PS: 日志上显示移除的这个元素应该不是右侧红框里的元素,应该是作品详情下方的那个“查看用户目录”的链接。
原因是这个作品的简介里含有另一个作者的主页链接,而且在 body 里是第一个 /users/ 主页链接,先于这个作者自己的链接。
下载器在最早的几次检查里,会获取到简介里的错误的用户 ID,导致当前作者被认为是“另一个人”,从而移除了他的元素。
在之后的检查里,可以正确获取到当前作者的 ID,所以实际上不会移除他的作品。
现在下载器在这些页面类型里,会在 document complete 之后再执行检查,这样始终可以获取正确的作者 ID,修复了这个问题。
PS:Tools.getCurrentPageUserID() 是个不够可靠的 API,不过之前大多都是用户点击时才执行,所以不会受到这个特殊情况中的影响。这个情况里产生了问题是因为执行实际过早导致的。
🕑更新了作品发布时间数据
17.3.0 2024/12/12
✨新功能:从页面上移除“用户阻止名单”里的用户的作品
该功能默认启用。你可以在“更多”-“抓取”里找到这个设置。
下载器不会抓取“用户阻止名单”里的用户的作品,而且还可以从页面上移除他们的作品,这样你就不会看到不喜欢的用户的作品了。
PS:在被阻止的用户的主页里不会移除他们的作品,所以你可以正常查看他们的主页。
⚙️“不下载重复文件”功能改为默认启用
之前“不下载重复文件”功能是默认关闭的,经过投票,现在改为默认启用。
投票数据:在 33 票里,3 个人选择默认关闭,30 人选择默认启用。
😊优化特定情况下的抓取效率:抓取作品详情前预先检查过滤条件,以减少非必要的慢速抓取
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/457
比如抓取一个作者的所有作品,并设置了过滤条件:只抓取今年发表的作品。
这个作者的 200 个作品只有 10 个作品符合条件,那么抓取作品详情时不应该使用慢速抓取模式。
之前下载器会使用慢速抓取,因为在决定是否慢速抓取时,判断的是作品总数量。现在改为提前检查过滤条件,这样可以判断只有 10 个作品需要发起请求,不需要使用慢速抓取,因此提高了抓取效率。
注意: 这种优化只能对部分过滤条件生效,它们不需要获取作品的详细数据就能够判断出是否符合要求。有些过滤条件必须请求作品的详细数据才能判断,此时无法应用这个优化措施。
😊根据文本长度,动态设置 textarea 的高度
一些设置的输入框是 textarea,例如:
- 不能含有标签
- 用户阻止名单
- 使用第一个匹配的标签建立文件夹。
之前这些 textarea 的高度(rows)固定为 1,当内容较多时,查看和编辑起来很不方便。
现在下载器会动态设置高度,最多允许同时显示 4 行(内容超过 4 行的话依然会显示滚动条)。
🐞修复了系列漫画最多只能抓取 100 页的问题
这个系列漫画有 252 页:
https://www.pixiv.net/user/1001918/series/5915
https://www.pixiv.net/user/1001918/series/5915?p=252
之前下载器最多只会下载到 100 页,页码大于 100 的话就会判断为抓取完毕。
现在修复了此问题,我把最大页码修改为了 1000 页,应该够用了。不知道有没有超过 1000 页的。
🐞修复了合并系列小说时,总会下载封面图片的 bug
上次更新导致少了一处条件判断,即使用户关闭了下载封面图,在合并系列小说时依然会下载。
现在修复。
🐞修复了“横图占用二倍宽度”在一些情况下没有生效的问题
分为两种情况:
1. 下载器识别到了横图,但由于缩略图本身宽度太小,导致只占据了完整宽度的一部分,如下:
此时横图作品宽度是 540px,但这些动图的缩略图宽度只有 320px。下载器确实把缩略图替换成 540px 的了,但即便如此,这些缩略图的真实宽度也只有 320px,所以没有填满宽度。现在修改样式使缩略图填满宽度。修复后如下:
2. 下载器未能识别到一些横图,主要是在首页一些横向滚动的区域里动态添加的横图。如关注用户的新作品,和排行榜区域。如下:
现在进行了修复,可以识别到这些横图了,同时还修改了一些 css 使其子元素能填满宽度。修复后如下:
🕑更新了作品发布时间数据
17.2.0 2024/11/13
✨新增设置:下载间隔
在“更多”-“下载”里添加了此设置:
下载间隔:当作品数量超过指定数量时启用:120 | 间隔时间:0 秒每隔一定时间开始一次下载。
默认值为 0,即无限制。
如果设置为 1 秒钟,那么每小时最多会从 Pixiv 下载 3600 个文件。
如果你担心因为下载文件太频繁导致账号被 Ban,可以设置大于 0 的数字,以缓解此问题。
默认未启用(因为间隔时间默认是 0 秒)。
#### 技术细节
当作品数量超过指定数量时启用:
这个数量是抓取结果的总数量,而非剩余未下载的文件数量。
也就是说即使最后只剩下 1 个文件没有下载,也依然会应用间隔时间。
默认值 120 是因为多数页面 2 页里的作品数量不超过 120 个。下载超过 2 页的话才会应用间隔时间。
注意:小说的封面图和内嵌图片不会算在这个数量里,因为这些图片并不是一条抓取结果数据。所以 1 个小说只会算作 1 个数量。
间隔时间:
可以设置为小数。取值范围是 0 - 3600;可以设置的最长的间隔时间是 1 小时。不过应该没人会这么设置吧,哈哈。
间隔时间是在下载开始前生效的,也就是每个文件间隔 x 秒下载。它不是在文件下载后生效的。
对于不同的文件,处理如下:
- 插画、漫画、动图,每个文件之间都等待
- 小说:小说本体是 blob 文件,所以不需要等待间隔。但如果有封面和内嵌的图片,则每个图片之间都需要等待
- 对于因为一些筛选条件导致跳过下载的文件(包括跳过重复文件),不需要等待,直接放行
小说里的封面图和内嵌图片都是会应用间隔时间的。例如 1 个小说里有 10 张图片,那么每张图片之间都需要等待。这会导致这个小说需要花费比较多的时间才能完成下载。
并且下载内嵌图片期间可能会阻塞其他文件的下载(因为每次可以开始下载文件的时机都被用来下载内嵌图片了),不过也有可能多个小说同时下载时,它们的内嵌图片轮流下载。
设置了间隔时间后,下载依然是并发的,但是在下载速度很快的时候可能会表现为单线程(同时下载一个)。
假如设置 1 秒的间隔,如果文件下载都很快,都在 1 秒内完成。那么前面的文件下载完了,后面的还没有开始下载(因为要等待 1 秒的间隔时间),以同时只有 1 个文件在下载,表现为单线程。
如果文件下载的比较慢,假如都要 3 秒钟,那么前面的没下载完时,后面的就已经开始下载,这样是多线程的。
😄当日志数量很多时,不再清空日志区域
如果日志区域里显示的日志条数太多(比如几百、几千条),会占用比较多的内存,并且更新日志时页面也会很卡。
之前的策略是日志超出 300 条时就清空一次日志区域,但这会导致用户无法查被清空的日志。有时里面的一些错误提示可能是有用的。
现在不会再清空日志区域,而是改为每当有 100 条日志时就新建一个日志区域。旧的日志区域会被保留,这样用户可以查看到所有日志。
🐞修复了在发现页面中,不会高亮关注的用户的问题
高亮用名的 css 规则依赖于下载器添加的一个私有属性,例如:
html[data-xzpagetheme="white"] body .pbdHighlightFollowing {
background-color: yellow;
}这是为了根据不同的主题颜色,显示不同的高亮颜色。
在发现页面里,之前从页面元素里获取颜色主题时失败,导致这个私有属性的值异常。
现在修复了这个问题。
🐞修复了在发现页面中,不能预览鼠标放在画师头像上显示的小图的问题
这些小图现在的选择器是 div[size="112"]。
🐞修复了在大家的新作品页面里,显示更大的缩略图功能失效的问题
😄添加和优化了一些提示
因为“预览搜索页面的筛选结果”不自动下载时,在抓取开始时显示一条提醒日志。
在常见问题里添加了下面的提示:
- 下载的文件保存在浏览器的下载目录里。如果你想保存到其他位置,需要修改浏览器的下载目录。
- 还有些扩展会导致下载器不能开始下载。
- 警告:频繁抓取和下载可能会导致你的账号被 Pixiv 封禁。
另外还替换了 QQ 群号,之前的群爆了。
在小说的元数据里添加了发表日期
我想查看发表日期时才发现元数据里没有包含发表日期。现在加上了。
🕑更新了作品发布时间数据
17.1.4 2024/09/26
🐞修复了在发现(discovery)页面中失效的问题
discovery 页面改版了,导致下载器的以下功能在 discovery 页面失效:
- 抓取作品(抓取不到)
- 预览图片
- 显示更大的缩略图
现在修复。
17.1.3 2024/09/01
🐞修复了同时下载多个小说时,下载小说中的插画进度显示不全的问题
从这个小说页面里抓取旧作品,并且设置里的下载数量大于 1:
https://www.pixiv.net/novel/show.php?id=22894530
日志里有些“正在下载小说中的插画”的进度没走完,如 6/10,就不更新了,而是开始显示新的下载的进度。
如果把同时下载数量设置为 1,则不会发生此问题。
这只是日志的显示问题,实际上所有插画都成功下载了。
原因是“正在下载小说中的插画”的日志是有标记的,之前都是相同的标记,导致同时下载多个小说时,它们输出的日志会互相影响。现在给每个标记都添加了小说的 ID,避免了互相影响,这样就正常了。
现在已修复此问题。
-------------
排查过程:
我先把同时下载数量设置为 1,正常下载了一遍。
在网络请求里搜索 img-original(这只包含引用的图片网址。不包含封面图和嵌入的图片),共有 227 条记录,是正确的。
共生成 46 个 epub 文件,总体积 432 MB。
然后我把同时下载数量设置为 5,再次下载,进行对比。(停用缓存)
下载过程中,全程都在同时请求 5 个图片,下载花费的时间确实比单线程下载少了很多。
此时的日志里显示的进度是不全的,部分日志如下:
正在下载小说中的插画 3 / 13
正在下载小说中的插画 4 / 4
正在下载小说中的插画 5 / 21
正在下载小说中的插画 6 / 13
正在下载小说中的插画 8 / 21
正在下载小说中的插画 11 / 13
正在下载小说中的插画 2 / 25
正在下载小说中的插画 3 / 25
正在下载小说中的插画 5 / 25
正在下载小说中的插画 10 / 25下载完成后,在网络请求里搜索 img-original 也是 227 条记录。
对比文件总体积也是一样的,字节数都完全一致。
所以这个日志上的进度不全的问题,只是显示上出了问题,并不会影响实际的下载。
😄更换了下载小说中的插画时的 API,提高了效率,降低了触发 429 限制的概率
如果小说里的图片是引用自另一个插画作品的,如 [pixivimage:121979454],之前下载器会请求这个插画作品的详细数据,来获取这个图片的 URL。小说里引用了多少个插画作品(按插画 ID 算),下载器就要发起多少个请求。
一个很明显的问题就是,如果小说里含有的图片数量较多(特别是批量下载多个小说时),就需要发起很多个请求来获取图片 URL,容易触发 429 限制。
现在我发现 Pixiv 官方用的是另一个 API,可以在一次请求中批量获取所有引用的图片的 URL,如:
https://www.pixiv.net/ajax/novel/22894530/insert_illusts?id%5B%5D=121979454-1&id%5B%5D=121979454-2
参数 id[] 可重复使用,以便一次获取多个图片的 URL。
这样每个小说只需要发起一次请求,就可以获取里面所有图片的 URL。这样大大减少了请求数量,效率更高,也不容易触发 429 限制了。
至于这个 API 一次可以传递多少个 id[] 参数,我并不清楚,目前最多的是一个小说里含有 130 个图片,这个 API 正常返回了所有图片的数据。
备注:这个 API 里必须传递小说的 ID,所以它只能获取指定小说里的所有图片 URL。推测是小说数据库里含有这个字段,可以低开销的获取里面图片的 URL。
我试过了,不能自由的传递任意图片 ID 来获取图片的 URL,否则就太方便了。
😄添加了下载小说图片时,请求失败的错误处理
1. 处理了 insert_illusts API 遇到 429 限制时的问题,会等待一段时间后重试。不过似乎没有这个必要,因为我试了先触发 429 限制,然后下载小说,这个 API 依然可以正常使用,可见它不在 429 限制的范围之内。
2. 处理了下载小说里的插画时,插画下载失败的问题。失败并不会重试,不过相比之前,这个错误被 catch 了,不会阻塞下载流程了。
17.1.2 2024/08/28
Merge PR
https://github.com/xuejianxianzun/PixivBatchDownloader/pull/419
epub: fix send-to-kindle failure on notes.html
🕑更新了作品发布时间数据
17.1.0 2024/08/17
😄优化了一些提示
- 优化了“抓取多少页面”设置项的提示(_设置页数的提示)
- 优化了命名标记的提醒,提示可以在命名规则里使用自定义字符
- 优化了文件名异常(变成 UUID 形式)时的提示
- 优化 429 错误的一处提示
😄点击“开始抓取”按钮时,如果有之前的抓取结果则进行询问,以避免误操作
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/411
每次开始抓取时会清空之前的抓取结果。有时用户可能会误操作导致之前的抓取结果被意外清空,所以现在添加了询问,以避免误操作带来的损失。
因为在抓取和下载过程中是无法开始抓取的,所以上面的误操作只会发生在抓取完成后,且没有处于下载状态时,包括未开始下载、下载途中暂停、下载途中停止。
🐞修复了在漫画页面里,“在多图作品页面里显示缩略图列表”区域可能会重复添加的问题
在漫画页面里点击图片下方的“阅读作品”时,页面 URL 会产生变化(在网址后面添加了 #1 这种格式的 hash 值)。当点击返回按钮时,又会变回原网址。
之前我没注意到这个现象,这导致了在页面来回切换时,重复生成了“在多图作品页面里显示缩略图列表”区域。
现在修复了此问题。
日志区域支持多条刷新日志了
之前只支持 1 条刷新日志,但这样当有多条刷新日志时就会冲突。例如在显示下载进度的同时还要显示另一种操作的进度,就需要两条刷新日志。
现在的日志区域支持添加任意多条的刷新日志了。
更换了生成 EPUB 小说的库
下载器之前用的是 js-epub-marker.js:
https://github.com/bbottema/js-epub-maker
当小说里的图片很多并且总体积很大时(例如有几百 MB),它生成的 EPUB 文件存在严重的性能问题:生成 EPUB 文件时内存占用可能超过 4 GB 限制,导致标签页卡死一段时间或完全卡死。而且 EPUB 阅读器很难打开它生成的 EPUB 文件,或者打开速度很慢、卡顿。
这是因为两个原因:
1. 即使有多个章节,它也只会生成一个 html 文件。这意味着单个 html 里可能存在过多的内容(特别是图片)。
2. 在保存图片方面,它只能保存封面图,没有添加其他图片(如文章里的图片)的功能,所以我只能把图片转换成 base64 格式内嵌在 html 里。这会导致文件体积增大,以及解析时有额外的性能损耗。
由于它只有一个 html 文件,所以点击每个章节都会把这个 html 文件完整的解析一遍。这是重复并且浪费资源的。我需要的是每个章节保存在单独的 html 文件里。
我尝试搞明白它到底能不能为每个章节生成一个单独的 html 文件,但看来似乎是不可能的。因为它生成的文件里,每个章节的内容都被放在一个固定名字的 content.xhtml 里,用不同的 hash 做区分。如果要生成多个文件,那么应该能看到不同的 xhtml 的文件名,但这里只有一个 content.xhtml。
并且它生成的所有文件都是相同的文件名。
我找到了另一个生成 EPUB 的库,它的 demo 就是我想要的,每个章节保存一个单独的 html 文件:
这个库是 jEpub:
https://github.com/lelinhtinh/jEpub
但是它存在另一个问题,就是它依赖 ejs,而 ejs 是个字符串模板框架,它会动态构建 JavaScript 代码,这导致它无法在 Pixiv.net 里运行,会报错:
ejs.min.js:1
Uncaught EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self' 'wasm-unsafe-eval' 'inline-speculation-rules' http://localhost: http://127.0.0.1:".ejs 的这个问题现在也无法解决:https://github.com/mde/ejs/issues/468
这导致 ejs 未能成功运行,而依赖 ejs 的 JEpub 在运行时也会因 ejs 未定义而产生错误,导致无法生成 epub 文件。
我修改了 jepub.js 的代码,解除了对 ejs 的依赖。
😄优化下载器生成的 EPUB 小说的文件体积和性能
现在每个章节会单独生成一个 html 文件保存,而不是所有内容都塞在一个 html 里。
另外图片文件会单独保存,而不是内嵌在 html 里,这可以减小文件体积(相比于使用 DataURL 保存图片),以及优化解析页面时的性能。
🐞合并系列小说时,可以保存正确的封面图片
之前保存系列小说时,把第一篇小说的封面图当作系列的封面。
但实际上系列的封面可能是另一张图片,现在可以保存真正的封面图了。
😄保存小说时简介转换为纯文本
之前的简介保存的是其原始数据(可能含有 html 标签),并且下载器对一些特殊字符进行了替换,导致可读性差,一些超链接也不能用了。
现在只提取文字内容,这样可读性更好。
🐞修复小说标题里含有 & 符号导致生成的 epub 无法阅读的问题
https://www.pixiv.net/novel/show.php?id=21782995
这个小说标题里含有 & 符号,之前下载器将 & 转换成 &,但是这会导致 epub 无法解读。
将 epub 解压,看到里面的文件名前半部分就是标题名,可能是因为里面包含了 & 导致了错误。
将标题里的 & 原样保留不做改动,产生了新的错误,报告说 content html 里这一行解析错误:
<title>【星穹铁道纯爱同人】花火&穹 假面愚者花火,居然主动做了你的女朋友!她是仅仅想图一时乐子、还是另有所图…你,会找到答案吗♡~?</title>This page contains the following errors:
error on line 5 at column 24: EntityRef: expecting ';'这还是 & 符号导致的,看来只能将其彻底去掉。将 & 替换为普通字符如 and 之后问题解决,epub 可以正常打开阅读了。
ps:这个修改不会影响 epub 文件的文件名,因为文件名是命名规则的 {title} 生成的,一直就是原本的 &。这个修改影响的是 epub 内部的文件名和 content html 里的 title。
🐞修复抓取小说时,有时抓取到的数量不够的问题
有些小说列表页面之前一页是 24 个小说,最近变成 30 个了。下载器还按一页 24 个抓取就会导致抓取数量低于预期。
现在修复此问题。
发生这个变化的页面有:
1. 自己收藏页面里的小说列表 https://www.pixiv.net/users/9460149/bookmarks/novels/
2. 作者主页的小说列表 https://www.pixiv.net/users/16208053/novels
3. 搜索 tag 的小说列表 https://www.pixiv.net/tags/%E5%87%8C%E8%BE%B1/novels?ai_type=1
🐞修复了在搜索页面抓取时,vip 优化策略可能出错导致抓取中止的问题
在搜索页面,下载器每抓取 10 页,就会检查一次最后一个作品的收藏数量。
问题是当需要检查时(也就是 10 的整数倍页数),有可能这个页码里的数据是空的(超出了最后一页,表示已经抓取完毕)。
之前下载器没有在这里检查数据是否为空,导致数据为空时出错,抓取中止,无法完成。
现在修复了此问题。
🕑更新了作品发布时间数据
17.0.0 2024/05/07
⚙️可以设置慢速抓取时的间隔时间了
以前下载器使用 1600 ms 的时间间隔,但某些用户表示这依然会遇到 429 错误,他们希望可以加大间隔时间。
现在我添加了这个设置,它位于“更多”-“抓取”-“减慢抓取速度”-“间隔时间”。
小说搜索页面也支持会员搜索优化策略了
会员搜索优化策略在抓取列表页时也会生效了
这是新增的一个优化策略。下载器在抓取时分为两个阶段:
1. 抓取列表页(获得作品 ID 列表)
2. 抓取每个作品的详情
之前只在阶段 2 有优化策略,现在阶段 1 也有了。这可以减少很多不必要的抓取。
设想某个标签有 1000 页作品,前面 10 页的收藏数量都大于 30000。用户要抓取收藏数量大于 30000 的作品。
理想的效果是下载器只抓取 10 页,但之前下载器会把这 1000 页全部抓取。这是因为之前在抓取列表页时没有优化策略。在必须使用慢速抓取来避免 429 的情况下,这会浪费很多时间。
所以我进行了优化,现在在抓取列表页时,每隔 10 页会检查最后一个作品的收藏数量是否满足要求,如果低于用户设置的最低收藏数量,就不再抓取后续列表页,直接开始抓取已有作品列表。
这可以避免抓取很多不必要的作品页。
修复会员搜索优化策略在获取作品详情阶段存在的问题
如果用户设置收藏数量条件为: >= 100 && <= 200
由于热门度排序总是按收藏数量从高到低排列的,这种收藏数量小的作品会处于很后面,导致前面几十个甚至几百个都不满足收藏数量要求。
之前优化策略是:连续 30 个作品的收藏数量不符合要求时,就停止抓取后续作品。但在上面的情况里,一开始是抓取不到的(因为前面的作品收藏数量很高),连续 30 次之后停止抓取的话,就会导致没有任何抓取结果。这是错误的。
现在改为只检查作品收藏数量是否大于等于用户设置的最小收藏数量,不检查是否满足最大收藏数量。这样解决了上面的问题。
解决了一些动图保存为 GIF 时,色差过大的问题
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/399
之前下载器转换 GIF 固定使用质量 10,现在动图的原文件体积越小,就会使用越好的质量,这可以有效解决某些手绘动图保存为 GIF 时,色差过大的问题。
虽然有时使用最佳质量依然无法完全避免色差,但是比之前还是要好很多。
🕑更新了作品发布时间数据
16.9.0 2024/03/30
✨新增功能:保存作品简介
在“下载”选项卡里可以找到该功能,默认未启用。
启用后,可以根据自己的需要启用子功能。
- 每个作品分别保存:下载时,每个作品分别建立一个 TXT 文件,里面只保存了简介。如果简介里有网址链接,则文件名末尾会加上 links 字符。
- 汇总到一个文件:抓取完成后,立刻生成一个汇总文件,保存了每个作品的文件名和它对应的简介。
优化保存简介时的文本
以纯文本形式保存简介时,优化了对简介里一些超链接的处理。
另外,导出抓取结果为 CSV 时,里面的简介一栏之前是简介的 html 源代码,现在也改为纯文本,以提高可读性。
🐞修复了合并系列小说为 epub 格式时,无法打开的问题
和上次的问题原因一样,但是上次只修改了下载单个小说的代码,忘记了合并小说也需要进行修改。现在修复。
🕑更新了作品发布时间数据
16.8.1 2024/03/22
🐞修复了下载的 epub 小说无法打开的问题
上个版本更新导致的 bug,现在修复此问题。
----------
用户向我报告 epub 小说无法打开的问题,我试了下,EPUB File Reader 会报错:
经过检查,这是因为 dc:rights 标签里面的 <br> 标签没有闭合标记导致的:
上个版本里处理 HTML 转义字符时用了个新函数 htmlDecode,小说简介也用这个函数处理了,但是这个函数返回的值是 html 5 规范的,所以简介里原本的 <br/> 变成了 <br>,导致 epub 格式出错。后处理一下就修复了。但是这个 bug 在之前确实没有预料到。epub 格式只能用 html 4,太烦了。
🕑更新了作品发布时间数据
16.8.0 2024/02/29
✨新增功能:导出和导入收藏列表
在你处于自己或其他人的收藏页面里时,可以在下载器的“更多”分类里找到此功能。
你可以导出自己或其他用户的收藏列表,然后批量添加收藏。
这可以用来拷贝其他用户的收藏列表。
另外,如果你有多个 Pixiv 账号,想要同步它们的收藏列表,可以先导出一个账号的收藏列表,然后使用其他账号导入收藏列表。
提示:下载器导出的收藏数据里包含你为这个作品添加的标签。导入时也可以添加(恢复)这些标签,前提是在“下载器的收藏功能 (✩) ”里选中了“添加标签”。
🐞修复了作品简介里的 HTML 转义字符没有处理的问题
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/387
Pixiv 会把简介里的一些特殊字符进行转义处理,例如我投稿了一个作品:
https://www.pixiv.net/artworks/116420283
我输入的简介是:
1,2,3,4'5'6'API 返回的数据实际上是:
1,2,3,4'5'6'之前我没有发现这个问题,所以下载器在导出抓取结果、保存作品元数据时,使用的是转义后的字符。
现在处理了此问题,保存的是正常字符了。
🐞修复了预览作品时快捷键可能冲突的问题
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/386
下载器在预览作品时会使用 B、C、D 等快捷键。之前没判断用户按 Ctrl 的情况,导致用户按 Ctrl + C 也会触发下载器的 C 快捷键。
现在修复了此问题。
🕑更新了作品发布时间数据
16.7.1 2024/02/02
🐞修复了收藏页面里预览作品功能的异常情况
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/385
16.7.0 2024/02/01
✨新增功能:预览作品时,可以使用方向键和空格键切换图片
之前在预览作品时,用户只能使用鼠标滚轮切换图片。但是这对于使用触摸板的用户很不友好。
现在用户可以使用方向键和空格切换图片了,就像一些本地的图片查看器一样。如下:
- ← ↑ 上一张图片
- → ↓ 下一张图片
- 空格 下一张图片
该功能默认启用。如果你想关闭它,可以在更多-增强-预览作品里关闭“使用方向键和空格切换图片”。
另外,现在你还可以用 Esc 键关闭预览图,按下 B 键收藏这个作品。
🐞修复了约稿页面“显示更大的缩略图”失效的问题
约稿页面经常失效,这次修复之后我尝试进行了一些处理,希望能减少失效的频率。
😄优化“在搜索页面里移除已关注用户的作品”功能
现在当你新关注了一个用户时,搜索页面里他的作品会被立刻移除。
💡优化一些提示
🕑更新了作品发布时间数据
16.6.0 2024/01/29
✨新增功能:在搜索页面里移除已关注用户的作品
这样只会显示未关注用户的作品,便于你发现新的喜欢的用户。
提示:
- 只在搜索页面生效。
- 在图片和小说搜索页面均可生效。
💡优化一些文本和提示
预览作品时,标题栏上会显示 AI 生成标记
🕑更新了作品发布时间数据
16.5.3 2023/11/28
🐞修复一些页面里显示更大的缩略图失效的问题
Pixiv 最近的变化导致搜索页面、发现页面、约稿页面、作品下方相关作品等缩略图的放大失效,现在修复。
😄自动处理某些动图不能转换为 WEBM 视频的问题
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/369
有些视频至少有一个帧延迟大于 32767 ms,这导致它不能转换为 WEBM 视频。之前,这会导致这些文件的下载进度条卡住,因为转换出错并且错误没有被处理。现在下载器会检查这种情况并将其转换为 GIF 图像,避免下载卡住的问题。
🕑更新了作品发布时间数据
16.5.2 2023/11/14
🐞修复了下载器的快速收藏按钮功能异常的问题
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/367
16.5.0 版本添加“下载推荐作品”功能时,导致了下载器的快速收藏按钮出现异常,它不能为作品添加标签,也不能收藏为非公开。
现在修复此问题。
16.5.1 2023/11/13
⚡优化了特定情况下的抓取效率
解决了这个功能需求:https://github.com/xuejianxianzun/PixivBatchDownloader/issues/364
当用户设置了只下载图像或小说的其中一种时,例如下图的情况:
或者:
下载器在抓取作品数据之前会先判断这个作品是图像还是小说,如果不需要抓取,就直接跳过它。这样可以避免不必要的请求,加快抓取速度。
注意:
对于图像作品,它可能是插画、漫画、动图这三种类型里面的任意一种,但是下载器在抓取之前无法判断它具体属于哪一种(实际上,有的时候是确定的,有的时候则不确定。为了在所有情况下都不出错,就都视为不确定)。
所以当你勾选了插画、漫画、动图三者中的任意一个,那么对于一个图像作品,下载器总是会发送请求,然后才能判断它到底符不符合要求。
举个例子,在首页用户可以手动输入 ID 列表进行下载。如果我输入一个 ID 99636469,请问它是插画、漫画、动图里的哪一种?这是没有办法事先就知道的,三种都有可能。所以如果你勾选了插画、漫画、动图里的任意一个,那么此时下载器总是会发送请求。
🐞修复了下载器不能识别小说首页的问题
之前小说首页的 pathname 是有斜线结尾的 /novel/,但是不知何时起没有了结尾的斜线,变成了 /novel,这导致下载器将小说首页识别为不支持的页面,只能使用手动选择作品的功能。
现在修复此问题。
🐞修复约稿页面里显示更大的缩略图失效的问题
约稿页面的放大失效,现在修复。
🕑更新了作品发布时间数据
16.5.0 2023/11/10
✨新增功能:支持下载推荐作品
在插画作品页面里,收藏作品之后会显示推荐作品。现在下载器可以下载这些推荐作品了。
在 PC 版和移动版网页里都可以使用此功能。截图如下:
----------
首先通过某些特定的选择器检查推荐作品区域是否已经出现。出现之后就可以获取到推荐的作品列表了。
推荐作品固定显示 20 个,不会因为左右切换显示而动态变化。而且我发现这 20 个就是页面底部“相关作品”的前 20 个。
检测到推荐作品时,选择器会在该区域显示一个下载按钮,点击就可以下载这些推荐作品,而且总是会自动开始下载。
😄优化快速收藏功能
之前在作品页面里,点击下载器的快速收藏按钮(五角星✩)之后不会显示推荐作品。现在会显示推荐作品。
另外,现在可以使用快捷键 Ctrl + B 来执行快速收藏。
🐞修复了特定情况下,预览作品的详细信息的面板消失后,预览图区域没有按预期消失的问题
预览作品的详细信息的面板有两种消失方式:
1. 鼠标点击
2. 鼠标移出面板区域
当面板消失时,鼠标可能位于作品缩略图区域之外。此时预览图也应该消失,但是之前没做检测,所以预览图依然会显示。
现在修复了此问题。
🐞修复显示更大的缩略图失效的问题
P 站改版导致失效,现在修复。
🕑更新了作品发布时间数据
16.4.0 2023/10/20
✨新增功能:预览作品的详细信息
在更多-增强里可以看到此设置。默认未启用。
启用后,当鼠标放在作品缩略图上时,下载器会显示作品的一些详情,类似于作品页面里显示的样式,但是内容更丰富。
在顶部会显示 R-18(G) 标记以及 AI 标记(如果符合条件的话)。
在底部有两个复制按钮,第一个按钮 Cpoy TXT 可以复制作品的一些摘要数据;第二个按钮 Copy JSON 可以复制作品的原始 JSON 数据。
优化了保存作品元数据到 TXT 文件时的内容
添加了一些字段,并且调整了一些字段的顺序。
现在它输出的内容是调整到与上面说的 Cpoy TXT 按钮输出的内容基本一致,但是多了一个 Thumbnail 字段。
现在的 TXT 内容可能是这样的:
ID
99143068URL
https://www.pixiv.net/i/99143068
Original
https://i.pximg.net/img-original/img/2022/06/19/00/00/56/99143068_p0.png
Thumbnail
https://i.pximg.net/c/250x250_80_a2/custom-thumb/img/2022/06/19/00/00/56/99143068_p0_custom1200.jpg
xRestrict
AllAges
AI
Unknown
User
そらなにいろ
UserID
4357504
Title
シスターエロフ
Description
https://sora72iro.fanbox.cc/posts/4001096
Tags
#オリジナル
#エルフ
#シスター
#爆乳
#ふともも
#エロフ
#性職者
#エロ衣装
Size
1104 x 1865
Bookmark
87577
Date
2022-06-18T15:00:00+00:00
优化了复制文本到剪贴板的代码
之前输出面板复制文本使用的是操作 Range 选择范围,之后通过 document.execCommand('copy') 命令实现复制。
但是 execCommand 已经被标为弃用,而且这个方法的完整代码是要设置范围起点和终点,太麻烦了。
现在因为预览作品的详细信息时也需要复制内容,所以我使用了新的复制方法,Clipboard 对象的 write() 方法:
https://developer.mozilla.org/zh-CN/docs/Web/API/Clipboard/write
提示:使用这个方法不需要授权。
🐞修复了首页的排行榜区域的“显示更大的缩略图”异常的问题
🕑更新了作品发布时间数据
16.3.2 2023/09/15
🐞修复了批量关注用户时,如果已关注用户数量为 0,会停止执行的问题
也就是说,如果有一个新的 Pixiv 账号,没有关注任何人,那么使用批量关注功能时,会因为抓取结果为 0 而停止执行。
现在修复此问题。
🕑更新了作品发布时间数据
16.3.1 2023/09/05
在作品元数据的 TXT 文件里保存原图和缩略图网址
之前 TXT 里没有 Original 和 Thumbnail 的 URL,从这个版本开始会保存这两个网址。
💡优化一些文本和提示
完善了一些提示。
另外在移动端页面使用时,不会弹出快捷键的提示,因为移动端没法用快捷键。
🐞修复了“显示更大的缩略图”失效的问题
因为近来此功能频繁出问题,所以我把它改为默认关闭了。
🕑更新了作品发布时间数据
其他
我想尝试在移动端长按缩略图时显示原图。但是这遇到了一些麻烦,最后我放弃了。
移动端的长按事件可以通过 touchstart 启动一个定时器来处理。touchmove 和 touchcancel 事件取消定时器。
但是显示原图后,还要处理缩放和移动的操作,这在移动端也是挺麻烦的。
另外显示原图功能还依赖于预览作品功能给它传递图片 URL,所以还需要修改预览作品的代码,这太麻烦了。最后我放弃了。
说到预览作品功能,如果在移动端启用,它会在长按缩略图显示上下文菜单时显示。
16.3.0 2023/08/29
✨新增功能:抓取时可以在标题栏上看到有多少个抓取结果
之前下载器会在下载时在标题栏上显示剩余数量。
现在在抓取阶段也可以显示抓取到的结果数量了。
✨新增功能:每隔 30 天显示一次赞助消息
求赞助~
🚸定时抓取时,使用Input组件输入间隔时间,优化用户体验
之前如果用户想修改间隔时间,需要先去“更多”里面查看或修改“定时抓取的间隔时间”设置,然后回来点击“定时抓取”按钮。
现在用户只需点击“定时抓取”按钮,下载器会提示用户设置间隔时间,此时可以方便的确认和修改时间。
另外,定时抓取开始后,用户再去修改间隔时间会在下一次执行抓取时生效。以前是不会生效的,始终使用开始时的间隔。
🚸在首页通过输入 ID 抓取时,使用Input组件,优化用户体验
🚸优化一些设置项的易用性
宽高比例设置之前容易搞错,最近我就搞错了,如图:
该设置的默认值是“横图”,但此时“宽高比”的子选项也是显示的。
我修改了宽高比的数字为 1.6,但这是无效的,因为此时宽高比例还是默认的“横图”,而非“宽高比”。所以“宽高比”的子选项不会生效。
现在我让子选项只会在选择了“宽高比”之后才会显示,避免了这种错误的发生。
🐞修复保存小说内嵌图片时可能发生的 bug
如果满足这些条件:
1. 用户未登录
2. 小说里的某个图片是通过插画作品 ID 引入的
3. 这个插画作品在用户未登录时获取不到 urls(都是 null)
那么这会导致图片保存错误,并导致这个小说因出错而无法保存,下载也就无法完成。
现在修复了这个 bug。
🕑更新了作品发布时间数据
16.2.1 2023/08/22
🐞修复了收藏页面一些功能的 bug
移除本页面中所有作品的标签 和 取消收藏本页面中的所有作品 每次只应该获取当前页面的收藏,但上个版本的修改导致它们会获取全部收藏。
现在修复此问题。
💡优化一些提示
16.2.0 2023/08/21
✨新增功能:取消收藏所有已被删除的作品
在用户自己的收藏页面里,打开下载器的“更多”标签页就可以看到这个功能按钮。
此功能会获取全部收藏数据,并从中找出已不存在的作品,取消收藏它们。
文档:notes/从书签中移除被删除(404)的作品.md。
我收藏的 29624 个作品里检查出 2054 个被删除的作品,比例比我想象中的更高。
⬆️优化了“取消收藏本页面中的所有作品”功能,使其花费的时间减半
之前执行这个功能时,流程是这样的:
1. 获取这一页收藏的作品的 ID 列表
2. 对于每个 ID,发送请求获取详细的数据,提取出 bookmarkData 数据
3. 发送请求来删除这个收藏
现在我发现在步骤 1 里就包含了 bookmarkData 数据,所以步骤 2 是不需要的,现在将其删除。
之前删除每个收藏需要发送 2 个请求,现在只需要发送 1 个,提升了效率。
⬆️优化了“移除本页面中所有作品的标签”功能,使其花费的时间减半
原理同上。
🐞修复了“显示更大的缩略图”的一些问题
搜索页面显示的几个热门作品之前超出了其原大小范围,导致只显示一部分,现在修复。
💡优化了定时抓取的提示
🕑更新了作品发布时间数据
16.1.3 2023/08/12
🐞修复了抓取完成时可能卡住的 bug
当用户启用 “ID 范围”设置时,下载器可能会在抓取完成时出错,导致任务卡住,无法完成抓取并开始下载。
上个版本的修改“修复了慢速抓取功能导致时间范围的优化策略失效的问题”导致了此问题。现在修复。
---------
这是下载器的 10 个并发抓取线程引起的问题。以下是分析。
假设在一个画师主页,抓取 1 页,并要求 ID 大于某个作品的 ID。并且符合条件的结果少于 10 个。
涉及这部分的流程是这样的:
首先,下载器建立抓取任务,默认是 10 个并发:
for (let i = 0; i < this.ajaxThread; i++) {
this.getWorksData()
}执行 10 个 getWorksData,完成后执行 10 个 afterGetWorksData,里面有预检查下一个 ID 的代码。于是这里也是一批 10 个。
上个版本预检查 ID 的代码如下:
const nextIDData = store.idList[0]
const check = await filter.check({
id: nextIDData.id,
workTypeString: nextIDData.type,
})
if (!check) {
return this.getWorksData()
}这里检查 ID 不通过的话,会直接再次进入 getWorksData,而不需要等待下面的慢速抓取的时间间隔。
但是这也导致了执行到最后几个作品 ID 时,getWorksData 里报错,并且程序因异常而无法继续执行,卡住了。
原因:假设前面的 ID 都被排除了,最后只剩下 4 个 ID 符合要求。执行到这里时,一批 10 个预检查都会获取首个 ID 检查,并且都通过了,那么就返回了 10 个 getWorksData。
但是 4 个 ID 不够 10 个 getWorksData 用,获取不到 ID 的时候就发生了上面的错误。
最简单的修复方法就是处理这个错误。当没有 ID 可用时,直接进入抓取完成的流程:
idData = idData || (store.idList.shift()! as IDData)
if (!idData) {
return this.afterGetWorksData()
}
const id = idData.id这已经可以修复错误,但是还能进一步优化。
------------
第一个优化:使用定时器让每个 getWorksData 都在空闲时才建立:
for (let i = 0; i < this.ajaxThread; i++) {
window.setTimeout(() => {
this.getWorksData()
}, 0)
}之前是用同步代码立刻执行 10 个 getWorksData,现在用定时器把 getWorksData 放到宏任务里。
同步代码执行完成后,首先执行 1 个宏任务,也就是第一个 getWorksData。
之后 ID 被预检查时, await filter.check 是微任务,所以会尽快执行。如果 ID 被过滤掉了,那么就继续向下执行同步代码,然后又是 await 微任务。
所以不管处理了多少个 ID,只要这些 ID 都是会被过滤掉的,那么就只存在 1 个 getWorksData。直到遇到了需要发送网络请求的作品,因为需要等待网络请求,此时剩余的 9 个 getWorksData 宏任务才会开始执行。
不过这样最后还是会产生 10 个 getWorksData,还是会有一些 getWorksData 没有 ID 可用。怎样彻底避免没 ID 可用的问题呢?
第二个优化:在定时器回调里,判断有 ID 可用才会执行 getWorksData,没有的话就不执行,这样就不会出现 ID 不够用的问题了。
for (let i = 0; i < this.ajaxThread; i++) {
window.setTimeout(() => {
if (store.idList.length > 0) {
this.getWorksData()
} else {
this.afterGetWorksData()
}
}, 0)
}第三个优化:当预检查不通过时,之前是直接返回 getWorksData,让 getWorksData 再次检查并删除这个 ID。现在在预检查里直接删除这个 ID,之后 getWorksData 里检查的就是下一个 ID 了。
if (!check) {
store.idList.shift()
return this.getWorksData()
}之前一轮只会删除 1 个 ID,现在一轮可能会删除 2 个 ID(如果这个 ID 未通过预检查的话)。这样就减少了整个流程循环的次数。
至此问题完美解决。
✨支持在长按鼠标右键时显示大图,对动图进行缩放
右键预览大图时可以通过鼠标滚轮来缩放画布尺寸。但是我发现动画不会随画布尺寸变化,现在进行了完善。
✨新增了 Input 组件
通过引入 Input.ts 可以在页面上显示一个输入框(input 或者 textarea),并且可以通过一些选项进行配置,以接收用户的输入。
它看起来可能会像这样:
不过目前在主分支里并没有实际使用它。
🕑更新了作品发布时间数据
16.1.2 2023/08/11
🐞修复了“显示更大的缩略图”的一些问题
之前修复问题的时候没测试夜间模式,结果夜间模式里的问题依然存在。这是因为夜间模式图片的 className 是不同的。
现在修复。
16.1.1 2023/08/09
🐞修复了慢速抓取功能导致时间范围的优化策略失效的问题
当一个作品 id 被时间范围优化策略判断为不符合过滤条件时,应该跳过它,直接检查下一个。
但是之前慢速抓取导致每个作品 id 都必须等待间隔的时间,一个一个来。
这导致优化策略在启用慢速抓取时失效了,表现为一个一个缓慢的检查,不能迅速跳过不符合条件的 id。
现在修复此问题。
16.1.0 2023/08/09
✨新增设置项:在多图作品页面里,显示缩略图列表
这个功能很早就有了,就是多图作品页面里,大图下方显示的一横排缩略图列表。只是以前不能关闭,现在加了个开关可以关闭了。
我在做这个功能的时候对 ImageViewer.ts 进行了一些重构。之前之所以这个功能没有开关,就是因为它与 ImageViewer 耦合在一起。
ImageViewer 有两个地方在使用:
1. 点击作品缩略图上的放大镜按钮
2. 在多图作品页面里,大图下方的缩略图列表
它们有很多相同的逻辑,并且都需要生成缩略图列表,只是一般不需要把缩略图添加到页面上。只有大图下面的缩略图例外,生成缩略图之后还要添加到页面上。
之前 ImageViewer 需要区分两个地方的区别,并负责把缩略图列表显示在大图下面。这导致两者的功能耦合了,不好做开关,否则代码更乱了。
现在我让 ImageViewer 生成缩略图列表之后只管返回它,不管是否需要添加到页面上。然后我新建了一个类来接收缩略图元素,并负责把它显示到大图下面(如果需要)。在这个单独的类里就很好处理开关这个功能的逻辑了。
🐞修复了“显示更大的缩略图”的一些问题
修复了在作品页面内收藏作品后,显示的“推荐作品”的图片无法完全显示的问题。现在将其保持为原大小。
🕑更新了作品发布时间数据
16.0.4 2023/08/05
🐞修复了一个提示可能意外出现的问题
上版本增加的提示 可能发生了错误。请刷新页面重试 可能会意外出现,并且日志里可能会多次出现。现在修复此问题。
16.0.3 2023/08/04
修复了“显示更大的缩略图”的一些问题
1. 修复了缩略图没有完全显示的问题(之前固定了最大宽度,导致图片两侧可能被裁切)
2. 修复了首页“推荐作品”显示不全的问题(之前没有让里面的元素换行,所以只显示了一行)
3. 修复了点击顶部的搜索框,下拉区域里的大图错乱的问题。这里容器固定了宽高,如果显示大图的话只能显示出一部分
尝试检测正常下载时卡住的情况
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/338
下载时进度条卡住,有多种可能的原因,有一种可能情况似乎是 Chrome 自己的下载管理功能出问题了,这种情况下它不会向前台脚本返回信息,所以进度会卡住。
尝试检测这种情况:向浏览器发送下载后 3 秒如果没有收到回应,就提示刷新页面重试。
更新了作品发布时间数据
其他
增加了一个隐藏命令 ppdtask3,输入命令可以打开所有的测试页面,目前共 21 个页面。
16.0.2 2023/08/03
修复了“显示更大的缩略图”失效的问题
16.0.1 2023/07/27
修复了一些用户在批量关注用户时,遇到 400 错误的问题
有些用户在添加关注时需要附带一个特殊的 token,如果缺少就会导致 400 错误。
下载器无法解决此问题,目前使用 iframe 方法模拟点击来关注用户。此方法存在如下问题:
1. 内存占用大,添加到 120 个左右就可能导致 Out of Memory。
2. 在超出内存之前就很容易因为 fetch 被取消而导致页面卡死。
3. 花费的时间比较久。
详情参见:notes\recaptcha_enterprise_score_token 添加关注的用户时的验证码.md
为了解决遇到的一些问题,花了很长时间。
其他优化
批量关注用户时,添加 1000 个关注之后下载器会自动停止,以免用户被 Pixiv 封号。
详情参见:notes\批量关注用户太频繁导致账户被封禁限制.md
修复了一些页面里,显示更大的缩略图异常的问题
Pixiv 原本的中间区域不是全宽的,显示更大的缩略图功能会加宽。
最近在首页和其他某些页面里加宽或放大图片失效了,现在修复。
更新了作品发布时间数据
16.0.0 2023/07/20
新增功能:导出关注的用户列表(JSON)
在你或其他用户的 Following 页面里,你可以导出关注的用户列表。
由于只导出关注的用户的 id 列表,所以体积通常都很小。
我导出了 3494 个 id,文件体积 44.0 KB (45,069 字节),每条数据 约为 13 Byte。
有些关注过的用户可能销号不存在了,导致 Pixiv 上显示的已关注数量大于实际关注数量。下载器在导出时获取的都是当前存在的用户。
新增功能:批量关注用户(JSON)
选择“导出关注的用户列表(JSON)”生成的 JSON 文件,下载器会读取里面的用户列表,然后关注他们。
我在小号上测试批量关注这 3494 个画师,用单线程持续发出请求,没有设置间隔,全部添加完成也没有出现 429 错误。但是实际情况很诡异,虽然都返回了 200 ,看似这个操作是不会消耗令牌的,但是全部执行完之后,只增加了一百多个关注,和 429 限制很相似。
--------------
这两个功能是搭配使用的。你可以先导出,然后导入来批量关注用户。
当你有多个帐户时,可以使用这个方法同步你关注的用户列表。
你也可以复制其他用户的关注用户列表。
注意:
下载器在批量关注用户时,会设置时间间隔以避免因 429 错误导致关注失败,但是这不能百分百避免 429 错误。如果执行完毕后,你发现已关注数量少于预期,可以再次导入列表以进行批量关注。
批量关注之前,下载器或先获取一遍你的关注列表,已经关注过的就不需要重复发送关注请求了,节约时间。
新增功能:导出与导入 ID 列表
这是为了解决 429 问题进行的尝试,因为未登录时不会触发 429 错误,所以可以退出登录然后高速抓取。但是它有很大的局限,不是完美的。
这个方法的操作步骤如下:
1. 在“更多”-“下载”里开启设置项“获取 ID 列表完毕后导出它,并停止抓取”
2. 开始抓取,当获取到全部 ID 列表后,下载器会导出一个 JSON 文件,并停止抓取
3. 退出登录(或使用另一个未登录 Pixiv 的浏览器),然后打开 Pixiv 首页
4. 点击“导入 ID 列表”按钮,即可进行高速抓取。
局限:
1. 因为未登录,对于插画作品,不仅无法抓取到 R18(G) 作品的数据,就算不是 R18(G) 但是有少许色情元素的作品也不能抓取。(sl 值为 4 或 6 的,或 R18 的,返回数据里的 urls 都是 null,无法获取到图片网址)。只能获取到普通且健全的作品的数据。
2. 因为未登录,对于小说作品,无法抓取到 R18(G) 作品的数据(404)。普通作品都可以抓取。
3. 因为未登录,所以无法检查作品的收藏状态,不能使用“收藏状态”过滤选项。
4. 因为未登录,你在 Pixiv 账户设置里的屏蔽(Mute)用户或标签的功能也不会生效。
适用场景:
- 适合要抓取的作品全部是普通(全年龄)并且没有色情元素的作品时使用。特别是抓取全年龄小说时最合适。
- 适合大量抓取时使用。少量抓取(几百个)的话没必要用这个方法。
- 不能检查收藏状态,也不能使用“下载后收藏”功能。
控制导出的 JSON 文件的体积小于 512 MB
当下载器的抓取结果很多时,导出的 JSON 文件的体积可能大于 512MB,这会导致导入到下载器时失败。
现在下载器导出的 JSON 文件体积上限是 500 MB。如果总数据量超过这个体积,就拆分成多个文件。
------------
一些数据:
- 573002 条插画结果,文件体积为 824 MB (865,027,197 字节),平均每条结果的体积约为 1.44 KB。
- 23316 条小说结果(中文),文件体积为 373 MB (391,208,847 字节),平均每条结果的体积约为 16 KB。下载后所有文件的总体积为 327 MB (343,388,875 字节),比抓取结果稍小,因为抓取结果里的一些属性不会被保存。平均每个文件的体积约为 14 KB。
- 23316 条下载记录,文件体积为 3.87 MB (4,068,619 字节),平均每条结果的体积约为 0.17 KB。
小说数据来源自:https://www.pixiv.net/tags/中文/novels
抓取了全部小说,共 23316 个作品。命名规则 {p_title}/{id}-{user}-{user_id}-{tags_transl_only},文件名里有中文,这会使下载记录体积比较大,可以覆盖通常情况。
插画和下载记录的体积比较平均,可预测。但是小说的体积比较悬殊,有的只有几 KB,但有一些接近 100 KB。
导入的时候,体积超过 512 MB 导致导入失败了,我不得不写了一份代码用来把这个大文件分割成多个小文件。但是要从根本解决问题,还是需要限制导出的文件体积小于 512MB。
为了保险,我把导出的体积上限定为 500 MB。如果超过这个体积,就拆分成多个文件。
我有过多个想法,但是有的很快就被否定了:
1. 既然知道每条结果的平均体积,那么可否设置一个数字把结果分成多个批次?但是问题在于如果混杂了小说,而小说的体积又比较大,每条结果的体积差别也会比较大,就很难处理。
2. 在文件生成后检查 Blob 对象的 byteLength,如果超大就设置分割标记,重新生成。但是这样挺傻的。
3. 在添加每条数据时实时统计 byteLength,避免体积超出限制。
最后我采用了第 3 个方法,不过有个小问题,就是汉字等字符的长度问题:
'{"name":"雪见仙尊"}'
这个字符串的 length 是 15,但是字节数是 23。使用 textEncode.encode(string).length 可以获取 byteLength,这不是技术限制,关键是我担心频繁的 encode 会对性能造成影响。
之后我测试了执行所需时间:
导出 23316 条小说结果(中文),文件体积为 373 MB。
之前的代码不限制文件体积,也不需要执行 encode,把数据拼接到 result 数组里所需的时间约为 600ms。
现在对每一条字符串都执行 encode,执行完毕的时间约为 1400ms。时间是原来的两倍多一点,可以接受。
这些抓取结果都是小说,每一条的体积都比插画大,如果是插画结果的话可能倍数会低一些。
用户未登录时不获取屏蔽设置(Mute)
之前如果用户未登录,下载器获取屏蔽设置(Mute)会失败(401)),并且 Mute 模块会抛出错误导致抓取中止。
现在下载器会检查用户是否登录,如果未登录则不会获取屏蔽设置。
而且即使请求发生错误,下载器也可以继续抓取。
“显示更大的缩略图”功能改为默认开启
这个功能开启后会导致首页“关注用户・好P友的作品”区域的横向滚动出现异常,发现页面里似乎也有同样问题,其他地方没有问题。
之前因为上述问题,这个功能是默认关闭的,现在改为默认开启。
更新了作品发布时间数据
15.9.0 2023/07/11
添加了“停止抓取”按钮
当用户点击“开始抓取”按钮后,“停止抓取”按钮会显示出来。点击它就可以停止抓取。
如果点击时已有抓取到的作品,则会保留此时的抓取结果以供下载。
-------------
抓取流程通常分为两个阶段:
第一个阶段获取要抓取的作品 ID 列表,在各个页面的抓取实例里自行定义对应的方法(通常是 getIdList 方法,也可能是其他方法)。有些页面里这个过程是瞬间完成的(不需要发起请求,或者只需要一个请求),就没必要响应停止抓取的信号。如果是持续的过程,则会响应停止抓取的信号,取消本次抓取任务。在这个阶段停止抓取不会产生抓取结果。
第二个阶段是逐个获取作品的详细数据,可能会发起一个或多个请求。这是在虚拟类里定义的 getWorksData 公共方法,会响应停止抓取的信号,停止抓取并保留抓取到的结果。
添加屏蔽设置(Mute)的提示
在这里可以看到用户屏蔽的标签和用户:
https://www.pixiv.net/setting_mute.php
下载器会检查这里的设置,但是之前没有在日志上显示提示,现在会提示里面的屏蔽设置(如果有)。
修复了下载小说内嵌图片时的 bug
小说里一张内嵌插图被多次调用时(也就是重复出现时),下载器生成的 EPUB 文件里只会把第一次调用替换为图片。现在可以把后面的调用也替换为图片了。
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/334
修复了手动选择作品时无法点击收藏按钮(红心)的问题
在搜索页面预览抓取结果时,始终按收藏数量排序
当处于搜索页面,并且启用了“预览搜索页面的筛选结果”时,不使用“文件下载顺序”里的排序结果,而是始终按收藏数量排序。
更新了作品发布时间数据
15.8.0 2023/06/28
优化:批量收藏作品时减慢速度,以减少 429 错误发生的概率
短时间内添加大量的收藏也会引起 429 错误。下载器在一些情况下会批量添加收藏,之前没有在收藏之间添加间隔,容易引发 429 错误,现在添加了慢速收藏机制,每 2 秒发起一个收藏请求。
此外我还优化了收藏遇到 429 错误后重试的一些细节。
PS:一些单个的收藏请求(非批量收藏)会立即执行,不会等待。
-------------
我进行了大量的测试,以确保添加收藏的速度不会导致 429 错误。
有一次慢速抓取了 480 个作品,并启用下载后收藏作品。全部收藏完成也没有出现 429。
在收藏页面给未分类作品添加标签时,执行到 598 / 1180 时依然没有出现 429 错误。
不过如果用户同时还在进行抓取,那我就没办法了。
优化:当翻译后的标签是英文时,优先使用原标签
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/313
Pixiv 会把有些中文标签翻译为英文,这导致用户使用 {tags_transl_only} 保存翻译后的标签时,反而会得到英文,例如:
原神 Genshin Impact
神里綾華 Ayaka Kamisato
八重神子 Guuji Yae
明日方舟 Arknights
史尔特尔 Surtr现在进行了优化,如果中文标签被翻译成了英文,那么下载器会保存中文标签。
但是 フラミンゴ flamingo不会使用原标签,因为原标签里没有中文。此时依然会使用翻译后的英文。
优化移动端界面
在一些宽度较小的手机上,下载器的按钮不能并排,现在改成可以并排 2 个。
可以应用搜索页面的 AI 过滤条件
Pixiv 在搜索页面的过滤条件中添加了 “AI 作品”设置,查询字符串名字是 ai_type,如果 ai_type=1 则表示隐藏 AI 作品。
现在下载器在抓取时可以应用此过滤条件了。
修复 bug
之前搜索页面的横图没能占据 2 倍宽度:
https://www.pixiv.net/tags/C.C.%2010000users%E5%85%A5%E3%82%8A/artworks?s_mode=s_tag
现在修复了这个问题。
问题原因是搜索页面添加作品缩略图时,添加的元素是 IMG 而不是其容器,之前的代码没能监控到这个情况。
更新了作品发布时间数据
15.7.0 2023/06/06label
优化了在移动端浏览器的使用体验
之前下载器在移动端浏览器(如 Kiwi 浏览器)上使用时,有些功能不能正常使用,而且下载器的界面也不能完整显示。
现在修复了这些问题。
具体可以查看 notes/对移动端浏览器进行优化.md。
更新了作品发布时间数据
其他
chrome.storage.local 之前的存储上限之前我记得是 5MB,但是现在看文档显示为 10MB,可能是增大了吧。
https://developer.chrome.com/docs/extensions/reference/storage/#property-local
我之前担心过把用户的关注列表保存到这里,可能会导致超出存储限制。现在看来应该很难达到限制。
如果以后发现不够用,可以增加 unlimitedStorage 权限来提高容量。现在似乎没有必要使用此权限。
15.6.2 2023/05/28
修复一些用户的“高亮关注的用户”显示效果异常的 bug
一些用户的 pixiv 页面处于夜间模式时,被高亮的用户名可能同时具有黄色背景和黄色字体颜色。
这是错误的,此时不应该具有黄色背景。
原因是下载器之前依赖 html 标签上的特定属性来判断页面处于普通模式还是夜间模式,但是现在我发现当 html 标签上没有任何属性时,既有可能是普通模式,也有可能是夜间模式。所以有时候下载器设置的高亮效果就会出现错误。
现在下载器在 html 标签上添加了自定义的属性,解决了判断不准确的问题,修复了这个 bug。
15.6.1 2023/05/24
修复一些用户的“高亮关注的用户”功能没有高亮效果的问题
这是一处 css 问题,因为我的 pixiv 的 html 标签上总是有 data-theme 属性,如:
html[data-theme='default']
html[data-theme='light']
html[data-theme='dark']所以我就用 data-theme 区分普通模式和夜间模式。但是有的 pixiv 用户的 html 标签上没有 data-theme 属性,所以我写的样式就不会生效。
现在我修复了这个 bug。
没有 data-theme 属性的原因是该用户没有开启过 pixiv 的夜间模式。开启过一次之后就会有 data-theme 属性了,刷新页面也会有。但是切换浏览器就没有了,这应该是因为 pixiv 在 localStorage 里储存主题属性有关。pixiv 会使用 theme 作为 key 储存一个字符串如 default 或者 dark。而用户在一个新浏览器里使用 pixiv,又或者是清除了浏览器缓存,那么这个本地保存的 theme 属性没有了,就会导致 html 标签上没有 data-theme 属性。
15.6.0 2023/05/24
新增功能:高亮关注的用户
你关注(Following)的用户的名字会具有黄色背景,或者显示为黄色(这取决于你是否开启了 Pixiv 的夜间模式)。
这便于你确认自己是否关注了某个用户。
这个功能默认开启。
你可以在“更多”选项卡的“增强”分类里找到它。
-------------
为了优化此功能的效果,下载器新增了 webRequest 权限。好消息是这并未导致浏览器显示新的权限提示。
这个权限的作用是当用户点击按钮来新增或取消关注时(实际上这会发送一个网络请求),下载器可以检测到这个请求,并即时在页面上更新高亮效果。
如果不使用这个权限,那么下载器只能定时检查关注数据是否有变化,做不到实时变化。
-----------
在制作这个功能的时候我写了两个文档:
- notes/高亮关注的用户.md
- notes/在后台脚本中管理关注用户的列表.md
主要是遇到了一些复杂的情况,虽然在做这个功能之前我就预料到做起来会比较麻烦,但实际上遇到的麻烦比预想的还多不少。不管是数据结构、储存数据的位置、修改和同步数据的方式,还有一些业务流程,都经历了推翻重做。
下载完成后,清除后台保存的临时数据
下载过程中,后台脚本会以 tabID 为 key 保存 batchNo 和 idList。并且因为后台脚本在闲置时会被回收销毁,所以这些数据还进行了持久保存。
之前当发起下载的页面被关闭之后,下载器会清除它的数据。
现在增加了在下载完成后就立刻清除它的数据的功能。
这是因为用户的关注列表数据也保存在 chrome.storage.local 里,为了避免空间不够用,所以我加紧了对临时数据的清理。
不过在下载过程中是不会清除临时数据的。不过一般也不用担心。
更新了作品发布时间数据
15.5.0 2023/03/14
新增设置:标签分隔符号
https://github.com/xuejianxianzun/PixivBatchDownloader/pull/309
在“更多”选项卡的“命名”分类里添加了这个设置。
下载器默认使用 , 分割标签,如 tag1,tag2,tag3。现在你可以自定义文件名中使用的标签分隔符号,以替换默认的 ,。
这是一些可能常用的分隔符:
,
#
&
_
-分隔符不仅可以使用单个字符,也可以设置为多个字符(如果你有需要的话)。
修复了作品标题中的异常字符导致文件无法自动保存的 bug
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/306
https://www.pixiv.net/novel/show.php?id=15066191
这个小说标题里的“上”后面含有一个特殊的字符 \u0000,导致下载器保存文件时出现问题,浏览器弹出另存为对话框,并把文件名从这个特殊字符截断。
现在下载器会移除此类特殊字符,修复了这个问题。
15.4.1 2023/02/28
导出、导入、清除下载记录时会显示进度
导出下载记录时,日志上会显示详细进度,如:
导出下载记录
任务进度 0/9
任务进度 1/9
任务进度 2/9
任务进度 3/9
任务进度 4/9
任务进度 5/9
任务进度 6/9
任务进度 7/9
任务进度 8/9
任务进度 9/9
导出成功如果没有下载记录可以导出,会提示 没有数据可供使用。
-----------
导入下载记录时,日志上会显示详细进度,如:
导入下载记录
数据较多,需要花费一些时间
0/4505325
待处理 599280
待处理 46571
待处理 68285
待处理 122967
待处理 220552
待处理 401155
待处理 688776
待处理 961817
待处理 1395922
4505325/4505325
导入成功这样显示进度在导入大量数据时比较有用,避免用户觉得程序卡住了。
导入过程中,如果执行数据库操作时出现错误,下载器会显示错误信息,如 ConstraintError: Key already exists in the object store.。
清空下载记录后,导入 4505325 条下载记录,花费的时间为 9 - 10 分钟。
-----------
清除下载记录时,日志上会显示详细进度,如:
清除下载记录
任务进度 0/9
任务进度 1/9
任务进度 2/9
任务进度 3/9
任务进度 4/9
任务进度 5/9
任务进度 6/9
任务进度 7/9
任务进度 8/9
任务进度 9/9
下载记录已清除这是因为当下载记录的数量很多时,清除记录需要花费一定的时间,而非瞬间完成。 如果用户确认清除下载记录之后,马上关闭了页面,那么可能有部分数据没有被清除。
在日志上显示进度可以提醒用户,让用户等待操作完成。
当数据库中有 4505325 条下载记录时,清除全部记录花费的时间超过了一分钟。
15.4.0 2023/02/26
新增功能:预览作品时,按快捷键 C 下载当前显示的这张图片
之前用户在预览作品时,可以按快捷键 D 下载这个作品。
但是一个作品可能有多张图片,用户有时只想下载预览的这张图片(例如:这个作品的第 2 张图片),而不是下载作品里的所有图片。
现在可以按快捷键 C 只下载当前显示的图片。
之所以使用快捷键 C,是因为它是 “currently” 的首字母。
从抓取结果里移除了 dlCount 属性
dlCount 表示下载器需要从这个作品里下载几个文件。它不是作品本身数据的一部分,现在我把它保存到单独的变量,不再保存到抓取结果里了。
导出抓取结果时不会导出它。
未完成的下载任务数据里也没有它,当恢复任务后,下载器会重新生成它。
新增功能:重新显示帮助
在“管理设置”的按钮里添加了“重新显示帮助”按钮。
这是因为下载器添加的帮助信息逐渐增多,有些提示只会显示一次。但是之后用户也许会忘了某些提示的内容(主要是可能忘记快捷键是什么),点击“重新显示帮助”按钮,这些提示就可以再次显示。
15.3.2 2023/02/26
替换第三方库 UZIP.js 为 pako.min.js
以前下载器转换动图为 APNG 图像时用到一个第三方库 pako.js 来压缩数据,在两个月前我把它替换成了 UZIP.js。
UZIP.js 生成的 APNG 文件体积比 pako.js 大一些,但是它压缩数据时可以节省越 20% 的时间。同时它生成的依然是符合标准的 APNG 文件。
但是 HoneyView 在播放修改后生成的某些 APNG 图像时不正常。所以我现在把 UZIP.js 换回了 pako.min.js,这样 HoneyView 可以正常播放。
关于此问题的详细情况,参见 notes 目录中的笔记 HoneyView 播放某些 APNG 文件不正常的问题.md。
更新了作品发布时间数据
15.3.1 2023/02/18
修复了画师名字里含有特定异常字符导致无法下载的问题
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/301
https://www.pixiv.net/users/46532390
这个画师的名字是 con.fundo_,问题不是出在点 . 上,因为这个 . 没有出现在路径开头或结尾,是合法的。
问题在于 con 是 Windows 的保留文件名,并且还同时满足以下条件,才导致了文件名非法,无法下载:
- 保留文件名出现在某一层路径的开头(如果出现在路径中间或者是结尾,则是合法的)
- 保留文件名后跟着一个 .(如果跟着的不是 . 而是其他字符,则是合法的)
根据以上规则,可以判断出 {user}/aux.1/{id} 也是非法的。测试正确。
如果在 aux 前面添加任意字符如 1aux.1,或者把 . 改为其他字符如 aux-1,就是合法的了。
现在下载器可以检测此问题,并把半角的 . 替换成全角的 .,修复了这个问题。
更新了作品发布时间数据
15.3.0 2023/02/07
优化提示:增加了一个显示在标题栏上的标记 ☑
以前当下载完成时,下载器会在页面标题上显示 ✓ 标记。
现在下载器添加了 ☑ 标记,如果你看到 ☑,就意味着这次完成的下载任务不是从当前页面建立的。这在某些时候可以避免混淆。
它会在发生以下情况时取代 ✓ :
1. 下载完成时,页面网址相比开始抓取时发生了变化。
2. 下载完成后,如果用户改变当前页面的页码(也就是翻页),则 ✓ 会变成 ☑。
---------
这个标记判断的是 抓取开始 时的 URL。这个 URL 保存在 store.URLWhenCrawlStart。在保存和恢复未完成任务时,这个变量也会被保存和恢复。
添加了一些提示
用户以前可能容易忽略掉一些提示和快捷键。现在下载器会在首次使用相关功能时,显示对应的提示。
清除下载记录时会弹出一个确认框,以避免误操作
添加了日语的 README 文档
感谢 lunae-f 的翻译,我把这个文档加入到了仓库里。
https://github.com/xuejianxianzun/PixivBatchDownloader/issues/296
15.2.0 2023/01/28
新增设置项:文件下载顺序
文件下载顺序 - 排序依据 o作品 ID o收藏数量 o收藏时间 | o降序 o升序你可以在“更多”选项卡的“下载”分类中找到这个设置。
这个功能默认未启用。
这不是必须的设置;如果你有需要,可以启用此设置。
----------
注意: 启用此设置可能会增加下载完成所需要的时间。
这是因为当下载器同时下载多个文件时,后面的文件可能比前面的文件更早完成下载。为了保持下载顺序,下载器会让后面的文件等待一段时间。
例如下载线程为 5,下载的文件的顺序编号是 1、2、3、4、5,但是 5 最先完成下载。下载器会让 5 等待 1、2、3、4 全部下载并保存到硬盘上之后,再保存 5。这就导致 5 需要等待一段时间,所以这有可能导致下载时间增加。
当下载的文件中有动图时,等待时间很容易进一步增加。假如一个动图下载后开始转换(甚至假设它是第一个,还没下载完,更没有开始转换),此时后面的图片已经下载完了,但是由于动图没转换完,所以后面的图片都要等待这个动图转换完成。也就是说其他下载线程被这个动图阻塞了。由于动图转换花费的时间可能会比较久,所以等待时间也会变多。
----------
当上一个文件未保存成功时,下载器会等待 50ms 之后再次查询。
这个间隔值不能太大,否则会增加下载过程中等待的时间,等于浪费了。
如果文件体积都很小下载的很快,或者有缓存,都是瞬间下载完成的,此时 50ms 的等待时间已经会造成明显的浪费。
新增功能:移除本页面中所有作品的标签
当你在自己的收藏页面时,可以在“更多”选项卡里看到这个按钮。
点击这个按钮之后,本页面中的所有作品会变成未分类状态。
慢速抓取改为默认开启
以前慢速抓取是默认关闭的,现在改为默认开启,以减少 429 问题出现的概率。
同时,当出现 429 错误时,下载器会在日志里显示新的提示。
并且我对 429 错误的提示使用了防抖函数,以避免短时间内出现多条重复的日志。
429 时打开作品页面会看到提示信息,但并没有明确说明原因:
发生了错误
出现错误。请稍后再试。404 错误的作品提示的原因则是暂无权限:
发生了错误
尚无权限浏览该作品早期的更新记录
因为完整的更新记录已经接近 10000 行了,导致这个 MD 文档体积大,预览速度慢,所以我把 2022 年及更早的更新记录单独保存到了这个文件里:
CHANGELOG-Early.md
---
README
English |
简体中文 |
繁體中文 |
日本語 |
韩国语 |
Russian
- Introduction
- Online Installation
- Offline Installation
- How to use
- Wiki
- Patreon
- Thanks
- Development
Introduction
Powerful Pixiv Downloader
This is a browser extension that lets you download images and novels from Pixiv in batch.
Available languages: Simplified Chinese, Traditional Chinese, Japanese, English、Korean、Russian.
The main function:
- Batch download all works, bookmarks, followed users, rankings, search results, etc. from a Pixiv user;
- Set various filtering conditions to select the works you want to download;
- Create folders using usernames, work titles, custom text, and other rules;
- Customize file names;
- Download illustrations, manga, Ugoira, novels;
- One-click download any work you see;
- Manually select (multi-select) the works you want to download;
- Scheduled crawling and downloading;
- Convert Ugoira to WebP, WebM, GIF, APNG formats;
- Save novels in TXT, EPUB formats;
- Save user avatars and cover images;
- Save download progress and resume incomplete downloads;
- Save download history to avoid duplicates;
- Batch bookmark works;
- Add tags to unclassified works in bookmarks;
- Various enhancement features to optimize Pixiv usage experience and efficiency;
- Preview works and view original images without entering the work page;
- Built-in image viewer to view multi-image works;
- Highlight followed users;
Screenshot:
Online Installation
Browsers with Chromium core, such as Chrome and Edge, can install this extension from the Chrome Web Store.
Firefox browsers can install this extension from Add-Ons.
Offline Installation
Please check the Wiki page:
Offline Installation
If you want to use this extension on Android, please check the Wiki page:
Install on Microsoft Edge Canary Browser
How to use
This downloader runs on Pixiv.net pages. When you browse Pixiv, you can open the downloader panel at any time to batch download the works on the current page.
Wiki
Patreon
<a href='https://www.patreon.com/xuejianxianzun'><img src='https://c5.patreon.com/external/logo/become_a_patron_button.png' alt='Become a patron' width='140px' /></a>
Thank you for your support!
Thanks
- Thanks 道滿 , VHlqg for translating traditional Chinese.
- Thanks 光の軌跡 for translating traditional Japanese.
- Thanks bropines for translating traditional Russia.
- Thanks KOZ39 for translating traditional Korean.
- Thanks z2n for improvements to the program.
Development
1. This tool needs to be installed Node.JS first during development.
2. Clone this project (or fork first) and install dependencies:
git clone https://github.com/xuejianxianzun/PixivBatchDownloader.gitcd ./PixivBatchDownloader
npm i
So far, the initialization is complete.
You can load the dist folder as an extension in the extension management of your browser for local debugging.
-----------
The npm command of this project:
npm run ts // compile ts file to dist folder
npm run less // compile less files to the dist folder
npm run fmt // format all filesnpm run pre-build // execute fmt, ts, less commands (compile all code, but do not package)
npm run build // execute fmt, ts, less commands, and copy other files needed for packaging to the dist folder, and finally pack the dist folder into a zip file
When you modify the code and compile it, the code will be compiled to the dist folder. You need to refresh the offline loaded extension in the browser's extension management, and then refresh the pixiv page to apply the new code.
---