-
修复更新提示中,商店网址错误的问题
-
TODO
提示更新内容
单例模式
reTryGetIllustData responseError 改成通用的,可以用在抓取列表上的。
获取指定日期之后的作品
图标改成 svg
优化代码逻辑
模块化
- 重新上架谷歌应用商店
因为担心继续用之前的名字,会通不过审核,所以改了名字:Powerful Pixiv Downloader。
删除了清单文件的 key 字段。一方面是上架扩展需要删掉它,另外它似乎也会导致 Chrome 重启后,离线安装的这个扩展被删除,需要重新加载。
通过商店审核后,在程序内增加了一些提示,修改了 wiki 和官网里安装部分的说明。
- 修复收藏选项在其他页面显示的问题
上个版本的修改导致快速收藏选项在切换到其他页面时也显示。现在修正这个问题。
- 优化日语文本
感谢 光の軌跡 改进日文翻译。
-
适配“大家的新作”页面
-
修复 bug
修复了筛选必须的 tag 的结果错误的 bug。
修复了抓取作品时设置 ajax 请求数会出错的 bug。
修复了连续使用快速筛选时,快速筛选标签一直累加的 bug。
发现页面的 class 变了,适配之。
- 一些优化
搜索页面“设置页面数量”的默认值,从 -1 改为了 1000(意思是下载所有页面),方便用户理解。 -1 依然可以使用。
但是有些页面的页数/个数是无法预先知道的,不适合用明确的数字,仍然用“-1”作为标记比较好。
修改了快速筛选的插入位置,使它能够稳定在顶部出现。之前因为 p 站页面动态加载,有时它显示的位置是异常的。
关注的新作品,大家的新作品 页面里,都添加了跳转到 R18 版本的链接。
- 修复 bug
修复了 收藏夹的“未分类”功能下抓取不到图片 的问题。这是因为重构导致对 tag 多包装了一层 encodeURI 导致的。实际上这影响了所有非英文标签,现在修改。
- 修复 bug
修复了转换 gif 失败的 bug
修复了用户在自己作品页时,快速收藏出错的问题(因为这种情况不会有收藏按钮)
修复了 pixivision.net 初始化时恢复配置失败的 bug
修复了中间面板的 html 缺少结束标记的问题
- 优化扩展
上个版本把日志区域添加到 body 前面去了,修正
把 css 加载放在了 content_scripts 里
去掉了 background.ts 里设置 referer 的部分,经过测试发现它现在没有必要了
给清单文件添加了 key,这样如果扩展有多个拷贝,加载之后只会在扩展管理里显示最新的那个,而不是每次加载都生成一个扩展。
感谢 Reinford 的帮助!
- 重构代码
之前的代码是面向过程编程,按照业务流程编写一个个的函数来解决需求。
现在尝试改为面向对象,抽象出一些类。
目前重构尚未完成,但是 p 站最近改了很多地方,所以只好先发布。
- 适配新版搜索页
由于新版搜索页不显示收藏数了,所以之前按收藏数过滤的功能不好实现,砍掉了。很可惜,不知道以后 p 站会不会加上收藏数。
-
修复了若干 bug,引入了若干新 bug
-
指导规则
- 抽象类
- 拆分成小的类
- 函数做了多件事的,拆分
- 使用异常替代返回错误码或者 false,避免后续判断。
- 使用依赖注入解耦。
- 优化命名规则
之前把一些特殊字符(标点)替换成下划线 _
,现在会把它们替换成对应的全角的字符,使用起来更方便。
\ \
/ /
: :
? ?
" "
< <
> >
* *
| |
~ ~
. .
注意:
- 点
.
的替换只限于路径首尾,文件名中间部分是可以有点.
的。 - 命名规则里的斜线不会替换(
/
到/
),因为这是作为(路径)文件夹分隔符的。 - 斜线的前后不能有空格,因为这样前后两部分是两个路径,路径的开头结尾不允许有空格。现在本程序会自动去掉路径首尾的空格。
即使像下面一样的命名规则也不会出错:
/\ / : ? " < > * | ~///" *{id}-| /?~{user}> * | -{tags_translate} ? " /
- 优化交互体验
现在鼠标经过界面上的按钮,按钮样式会有一些改变,增加舒适度。
- 优化日志功能
修复了一些颜色不对的地方
在日志上显示下载进度
转换文件时显示提示,避免分不清是在转换还是卡了
- 修复 bug
2.7.3 版本使用的变量 taskBatch 有个问题,刷新页面后重新从 0 计算。如果下载时刷新了页面,后台储存的标记是 0,刷新后再下载又是 0 ,就会被认为是重复下载,导致下载无法继续。现在修复这个问题。
- 隐藏一些广告
隐藏 tag 搜索页的广告位
- 修复了 “给未分类作品添加 tag” 功能
之前一次获取 999999 个未分类作品,进行处理。现在 p 站改了,一次只能获取 100 个,需要多次获取。修复了因此引发的问题。
- 优化了输出日志的功能
支持颜色,使用起来更加规范,加强代码的可维护性。在此过程中优化了一些文本。
- 添加后台的错误处理
当 Chrome 后台下载失败时,向前台返回消息,输出错误信息。之后前台会尝试重新下载。
- 加强检验
在首页输入 id 下载时,用 Set 结构过滤掉重复的 id
- 优化下载流程控制
感谢 Reinford0 的帮助和测试。
因为前后台通信的延迟不稳定,有时可能超过 1 秒,所以在处理遗留任务时,不再依赖前后台通信来解决,而是在后台储存任务列表。如果前台发送的任务在后台已有记录,则不进行处理。这样就杜绝了多次下载同一个文件,以及因此引起的弹框问题。当前台重新开始下载时(多次下载,或者停止后重新开始),后台重置任务列表。
去掉了上个版本增加的延迟。
对动图转换之前,也会判断任务状态,避免不必要的转换。
- 优化界面
把中间部分的按钮从 div 改成了 button,可以 tab 到了。
- 优化文件名截断处理
在 chrome 77 版本中测试,发现 chrome 会自动把超长的文件名截断,这样能尽可能地让文件名使用更多的字符,非常不错。所以本程序不再对文件名进行截断了,而是交给 chrome 处理。
另外,如果设置了创建文件夹,那么文件夹的长度对文件名是有影响的。尽量不要让文件夹长度超长(不过本来也很少会超长就是了)。
chrome 是不会截断文件夹名的。
- 如果文件夹名字的长度没有超长,chrome 会先建立文件夹,之后把文件名截断到可用的最大长度,正常保存。
- 如果文件夹名字的长度超长,会导致 chrome 无法创建文件夹(如果有多层文件夹,chrome 先尝试正常创建文件夹,直到某一层无法创建为止)。之后 chrome 会弹出另存为对话框,定位到 chrome 的下载目录,让用户保存文件。这时候 chrome 会把文件名截断到 255 长度(如果没有超出 255 则不截断),而不是截断到实际可用的最大长度。这时候能不能保存成功就看文件名实际有多长了。
- 优化下载流程控制
这部分感谢 Reinford0 的帮助和测试。
现在,当用户点击暂停或者停止时,扩展后台会把后台进行中的下载任务取消掉。
这样,不需要在前台识别遗留任务了,流程更加简单不易出错,而且,这也很大程度上避免了弹出另存为对话框的问题。
弹框问题是 chrome 77 出现的,两次下载同一个文件时,如果完成的时间间隔很短,可能会弹出另存为对话框,而不是预期的覆盖文件。猜测是这时两个文件都没保存完,也就没法覆盖了,但它们却是同名的,所以就弹框让用户处理。以前版本怎么没有这个问题呢。
为了更加彻底的杜绝弹框,这次更新还把之前去掉了的 canStartTime 加回来了,就是在暂停、停止之后,过一段时间才允许点击下载按钮(现在是 500 ms)。这样把时间间隔加大,就不会容易出现弹框了。
- 代码优化
getQuery
函数查询 url 里的搜索字段,之前是自己编写的方法,现在使用 js 的 URL 对象查询。
- 添加一些提醒文字
提醒命名规则里一定要带 id。有的人没有使用 id,只是用序号,导致文件名重复,互相覆盖。
提醒 id_num 标记的特点,每个作品都会重新计数。
- 修复 bug
新版 url 可能含有语言标记,如
https://www.pixiv.net/en/artworks/77019145
之前没发现这个问题,会导致看图器加载失败,现在修复。
- 新增 {type} 标记
新增 {type} 标记,保存作品类型(illustration、manga、ugoira)。
- 加大了命名规则输入框的宽度
- 修改 css
修复不显示“其他作品”区域的问题
- 修改 css
前段时候加了对元素 .jkOmHE
的屏蔽,隐藏它的广告。现在这个 class 被用到头像区域了,导致头像区域被隐藏,现在去掉对它的屏蔽。
- 修复 bug
修复了上个版本没有在新版页面启用图片查看器的错误
- 优化命名规则
- 适配作品页面新的 url 格式
现在新版 url 格式如下:
https://www.pixiv.net/artworks/76898963
- 优化重试功能
之前,重试功能在有多个下载进程同时出错时(如断网),可能导致用户手动的暂停和停止不能停止重试。现在修复这个问题。
- 修改了头部注释
- 修改安全文件名的规则
- 去掉了对单引号
'
的替换。之前有段时间,chrome 不允许它用作文件名,现在测试可以了,所以不再屏蔽它。 - Reinford 测试出了不允许做文件名的字符,这次都添加进去,希望以后不会再被特殊字符所困扰。
- 修改了右侧下载按钮的样式
把背景从纯色改为了渐变。
- 支持了未登录时的下载
pixiv 最近支持了未登录也可以查看很多页面。我看到公告后支持了一下,目前支持未登录时,下载作品页内、作品列表页、排行榜、tag 搜索页。但是 tag 搜索页未登录时不显示收藏数,所以按收藏数筛选必须设置为 0。
- 添加向前下载功能
以前在作品页内,只能从本页向后抓取,这次添加了向前抓取功能。
- 修复了在手机浏览器上使时,下载出错的问题
- 上线了官网
- 优化了重试的逻辑
以前重试时,用户手动暂停、停止任务不能阻止程序继续重试。现在改为可以取消重试。
- 添加了一个特殊字符
\u0009 " " issues 25
- 获取作品信息出错时可以重试
如果因为网络原因(断开、超时),导致获取作品信息的请求失败,会进行重试。
getIllustData 出错时会通过 reTryGetIllustData 重试。间隔时间为 2 秒。
- 更改了目录结构
优化了项目结构和打包流程
- 添加检测更新功能
因为现在从应用商店下架了,所以在 GitHub 上发布,并使用 api 检查更新。
- 修复 bug
上个版本的修改导致从 pageType 1 进入 2 时出错,现在修复。
- 优化文件名截断处理
对于带文件夹的文件名,本程序会将文件夹和文件名的字符合到一起计算长度,如果长度超过 200,则截断。
但是快速下载时,有时是不需要创建文件夹的,此时应该只计算文件名的长度。之前这里仍然计算了文件夹的长度,现在我发现了这个问题,修复之。
有时候文件名长度并没有超过 200,但是加上文件夹长度超过了 200,导致文件名被截断。很可惜。
- 新增功能
排行榜页面可以设置下载前多少张,并且增加了 {rank} 命名标记保存作品的排名。
- 新增功能
可以下载自己书签页面下方推荐的作品。只下载已经加载出来的。
目前的观察,当没有选择 tag 的时候,最多会加载 100 个。如果有选择的 tag,最多会加载 500 个。目前根据用户的需求,只下载页面上已经加载出来的,而不是下载从 api 获取的全部作品。
下面是从 api 获取数据的代码。
// 从包含数据信息的元素中匹配
const element = document.querySelector(
'.layout-column-2>script'
) as HTMLScriptElement
// 取出 sample illust 列表
const text = element.innerText.match(/"(.*?)"/)!
const sampleIllusts = encodeURIComponent(text[1])
// 拼接请求的 url
const url = `https://www.pixiv.net/rpc/recommender.php?type=illust&sample_illusts=${sampleIllusts}&num_recommendations=100`
// 发起请求
const response = await fetch(url)
if (response.ok) {
const recommendations: Recommendations = await response.json()
const idList = recommendations.recommendations
}
- 修复 bug
- 修复了下载收藏的“未分类”标签时,下载的是所有书签作品的 bug。 issues 24
- 修复了重复抓取时可能把 title 错误截断的问题。
- 优化体验
之前下载停止后,如果仍然有下载到文件,已下载数量会从 1 开始算,看起来觉得诡异。现在优化此处,停止时不清空之前的下载数量。
- 修复 bug
有的图片的静态图是 gif 后缀的,会被扩展当作要转换成 gif 图片,导致出错。现在修复了这个 bug。测试 id 76764342。
2.4.0 里,加了一个功能,如果当前页面不是 p 站页面,则打开 p 站页面。但之后被 Google 人工审核,判定扩展违法,被下架。
之后我去掉了这个跳转功能,重新发布扩展,但又被下架。并且我的开发者账户也被停用。
到底是什么意思呢?我搞不懂了。
两次通知邮件的内容一模一样,都是例行公事的那种,并没有提到具体是哪部分的问题,我也没有途径和他们取得联系。
Your item did not comply with the following section of our policy: We don't allow content that contains nudity, graphic sex acts, or sexually explicit material. We also don't allow content that drives traffic to commercial pornography sites. Google has a zero-tolerance policy against child pornography.
翻译:
您的商品不符合我们政策的以下部分:我们不允许包含裸露,图片性行为或露骨色情内容的内容。我们也不允许内容为商业色情网站带来流量。谷歌对儿童色情制品采取零容忍政策。
扩展本身是没有任何色情内容的。如果说下载 pixiv 内容就是色情行为,为什么其他 pixiv 下载器都没事呢?
反正,我已经不想再和谷歌折腾了。它爱咋样就咋样吧。
修复 bug issues 21
- 屏蔽了一些广告
- 减小了重试下载的时间间隔(现为 1 秒)
- 修改了对图片 url 的权限
之前匹配的图片 url 是 i.pximg.net
,但今天发现有些人的前缀不是 i,而是 tc-i
,所以修改了此处。
- 代码优化
优化了一些代码逻辑,并修复了一个存在了很久的 bug。
这个 bug 以前的表现是:点击暂停后快速点击开始,这样下载完后可能会发现有一些图片漏下。越是多次这样操作,漏的图越多。
之后我加了延时,暂停后过一段时间才允许点击开始,其实也能杜绝这个现象,但这终究只是“治标”。
今天又想到这个地方,想通了问题在哪里:
以前,当一个文件下载完成后,downloaded + 1。然后根据 downloaded 判断是否全部下载完成。
但是用户暂停了任务时,有的任务处于【已经接收完文件,发给浏览器下载,但还没有最终下载完成】的状态中,还没有增加 downloaded。
在这个过程中,用户又点击了开始,这些未完成的任务又要下载。新一轮的下载中,刚才那些还没下载完成的任务下载完了,downloaded + 1。但新一轮里又把它们下载了一次,downloaded + 2。
也就是说,一个这样的任务就会导致 downloaded 增加 2。这样的 downloaded 是错误的,当程序判断 downloaded 等于要下载的文件数量时,认为任务下载完毕了,但其实这样的任务占用了两倍的次数,实际上文件并没有下载完,最终表现为漏下。
以前加的延时是 2.5 秒,大于【从接收完文件,到浏览器下载完】的所需时间,所以解决了问题。但最近的版本加了转换动图的功能,接收完文件之后还要转换很久,估计这个延时在这种情况下又会失效。
现在从根本上解决了问题,不是每次下载完之后 downloaded + 1,而是根据下载任务的状态列表计算 downloaded。因为多次下载同一个文件,在状态列表里计算也只是一个,不会导致 downloaded 增加多次。这也体现了状态列表的重要性。
- 代码优化
优化了一些代码逻辑,进行了一些解构。
- 修复 bug
2.5.0 版本修改标题时,一处正则是贪婪匹配,现在修正。
// mode=big 类型在 pc 端可能已经消失了,但是移动端查看大图还是big https://www.pixiv.net/member_illust.php?mode=big&illust_id=66745241
- 重新在应用商店发布
之前版本因为跳转到 p 站的功能被下架了,只能重新发布。导致安装页面的 url 也变了。
- 去掉打开 pixiv 页面的功能
2.4.0 里,加了一个功能,如果当前页面不是 p 站页面,则打开 p 站页面。但之后被 Google 人工审核,认为此行为是把流量导航到色情网站,判定扩展违法。
现在去掉这个功能。
- 修复 bug
优化了对零宽字符的替换处理。issues 20
- 新增功能
批量下载动图时转换为 gif。
- 修改文本
设置作品类型 改为 下载作品类型。
- 修复 bug
修正了设置 title 是导致的一处问题。设置 title 时尽量使用的是 og:title,但是有些页面上,og:title 的内容和实际的 title 不一致,这时候就不能用 og:title。
- 修改下载线程数限制
最大下载线程数限制从 10 下降到 5 了。这是因为最近加了动图的转换功能,如果同时转换很多文件,资源占用太大。为了防止一些人不懂得减小线程,所以做此修改。
- 修复bug
2.4.0 版本把宽高比的输入值用 parseInt 解析了,导致出现 bug,现在进行修正。
- 优化了在 title 上添加提醒的代码
优化了此部分的逻辑。但是有了新的问题。之前用了一个变量保存旧标题,切换页面后可以保持标题不变,但也会导致标题一直是旧标题。现在修改后去掉了这个变量,所以切换页面之后,标题会变成新页面的标题。下载途中切换页面就会导致标题变成没有提醒的了。
- 修复了 pageInfo 的 bug
上个版本造成了 bug,现在修复,并优化这部分的逻辑。
命名
- 使用了 typescript
- 点击扩展的图标时,如果当前页面不是 p 站页面,则打开 p 站首页
- 之前把 viewerjs 的 js 文件和 css 文件混合了,现在拆分开。
- 修改了一些代码
略微优化了文本和样式。
- 新增 {date} 命名标记
作品的创建日期,格式为 yyyy-MM-dd。如 2019-08-29
- 多图作品设置 改为 设置作品张数
相应的也把设置里的变量名改了(xzSetting.imgNumberPerWork),如果是之前版本升级上来的,没有这个属性,则设置为默认值 0.
- 改善下载逻辑
下载时,文件接收完成之后还要一段延迟时间才会让浏览器下载,浏览器下载完成又要一段时间。之前,如果在这两个时间段里停止了任务,还是会继续下载已经就绪的文件,以及显示下载进度。现在优化了这部分的逻辑。
- 代码优化
优化了一些变量名和代码结构。
有用户报告说 pixiv 有一些图片的源文件可能损毁了,图片是 404 的。例如:
以前没遇到过这个情况,这会导致下载器卡住、不停的重试。现在针对这种情况做了改进:
- 在页面顶部的输出信息里添加提示
- 创建一个 txt 后缀的文件,内容是提示这个文件不存在。
- 修改了一处文字
- 略微修改下拉框的样式
- 网络较差时自动重试下载
当网络状况较差时,下载可能会因为超时、断开而卡住、出错。现在本程序检测到出错时会自动暂停下载,并在一定时间后尝试继续下载(目前的设置是 20 秒)。如果问题依然存在,会一直进行尝试。
- 代码优化
- 修复和优化暂停、停止下载时的状态变化。
- 抽离出下载相关的方法,方便调用。
- 删除已经无用的 timeDelay 变量。
- 修复 bug
- 当一个下载进度条开始它的第二个下载任务,但还没有收到响应时,应该显示为初始状态。之前在这个阶段会停留在上一条任务的完成状态,现在修正。
- 解决漏下问题。以前用 downloaded 作为下载时的索引,但这是不可靠的。网络较好的情况下没有问题,但是网络差卡住时,频繁暂停、继续下载,就会暴露出问题,导致一些图片漏下。现在新增了 downloadedList 保存任务的下载状态,修复了这个问题。downloaded 只作为已下载数量使用。(因为下载任务的完成顺序并不是按添加顺序的,假设 downloaded 为 5,而已下载的是 1、2、3、4、6,暂停后使用 downloaded 作为索引,则应该下载 6,这样就漏下了 5,重复下载了 6。
- 更新了新版本的提示。
- 优化代码
- 之前 changeWantPage 里隐藏页数设置时,没有使用 hideNotNeedOption。现在将其改为通过 hideNotNeedOption 处理。
- 预览文件名时,之前动图的左侧不是原文件名,现在修正。这样是为了方便用第三方下载器的用户下载后,用预览文件名的结果进行重命名。不过修改后 pixivision 里预览时左侧可能会有一些后缀名与真实后缀名不符,暂且忽略。
- 之前计算文件的体积时,是把字节数除以 1000 作为 KB,现在改为 1024。并且小数部分的处理改为向下取整,因为 Windows 在显示 100 KB - 1 MB 之间的文件的体积时,就是向下取整的(如计算结果时 119.66 KB,Windows 显示为 119 KB),为了保持一致本程序也向下取整。
- 当下载暂停或停止时,使用
xhr.abort()
中断下载请求。之前没有中断,网络请求其实是在继续的。 - 两次下载任务之间需要一定的间隔,现在优化了此部分的逻辑,并且把间隔值 time_interval 调小。效果表现为略微加快了建立任务的速度。
- 抓取页面时的并发连接数从 5 增加到 6,并且取消了每个请求中间的间隔。
- 优化了给未分类作品添加 tag 时的逻辑,改为单线程依次添加(之前的方式可能造成网络堵塞)。
- 取消了一些不必要的 setTimeout 定时器。
- checkWhatIsNew 只在 pixiv 检查,避免在 pixivision 也会弹出一次。
- 优化文本
- 抓取部分的按钮里的“下载”改为“抓取”,避免用户理解上的困扰。
- 英文的“输入”从 enter 改成 type。
- 删除已经不再使用的文本。
- 疑问
Chrome 的 HTTP 并发连接数最大为 6,但是当下载线程大于 6,比如设置为 10 的时候,看 network 面板似乎也是可以同时进行的?
- 优化一些样式
优化了一些布局问题。之前一些英文、日文按钮因为文字较多会产生换行,导致按钮的高度不一致,很难看。现在使用 flex 调整布局。
- 日文的下载控制按钮文字翻译为日文
原本因为日文太长用的是英文,如“pause download”,现在改成日文。但是日文好长啊。
-
折叠面板的两个三角形对调回去了。
-
更新了 readme 里的截图。
- 修复 bug
上次的修改出了 bug,因为 getIllustPage 里的 illustType 是数字,其他 api 里的是字符串。上次修改时把这里当成了字符串判断,导致动图下载异常,现在修复。
- 调整了主面板上各个选项的顺序
按照功能分类和使用频率,重新排列了一下选项的上下顺序。
- 记忆了折叠设置
主面板右上角的三角形可以折叠/展开选项区域,因为有用户想要记住设置,现在记忆了这个选项。
顺便对调了两个三角形。
- 修改排除作品选项
以前“下载作品类型”的选项是“单图、多图、动图”,现在改为“插画、漫画、动图”。
- 新增命名字段 {tags_translate}
有一些 tag 后面跟的有翻译后的 tag。使用 {tags_translate} 命名规则,会自动在原 tag 后附加翻译后的 tag(如果有的话)
- 新增 what`s new 提示
如果版本更新时需要对用户进行一些提醒,可以在lang.js 里添加一条提醒,并把 whatIsNewTag 设置为这个键值。
- 优化抓取流程
在多种页面类型里,在抓取列表页阶段直接检查一些设置,尽量避免抓取到不需要的作品。
- 其他优化
解耦了一些函数,优化了多处代码,优化了一些逻辑,消除了一些 bug。
加大了中间面板的层级,避免被某些页面内容挡住。
- 版本号顺延到 2.0.0
最近频繁的进行了一些修改和优化,版本号也走到了 2.0.0。以前的努力,全部没有木大,所以说,不要停下来啊!
- 优化排行榜页面的抓取效率
在抓取列表页时直接检查宽高和宽高比设置,避免抓取到不需要的作品。
- 优化代码
之前一些使用中括号来引用对象属性的代码,现在改成点 .
的写法。
一些可以用 dataset 获取的 DOM 属性都改成了用 dataset 获取。(之前有的是用 getAttribute 方法获取的)
- 发现了一个小问题
当进入自己的收藏页面时,本程序隐藏了“只下载已收藏”选项,因为自己的收藏页面里都是已收藏的作品,这个选项没有意义。
但是因为没有区分自己的收藏页面和别人的收藏页面,所以如果直接进入别人的收藏页面,也会隐藏这个选项。如果之后再切换到这个人的“插画”、“漫画”页面,也不会显示这个选项。(因为这些页面的切换是无刷新的)这时就不正常了,因为在“插画”、“漫画”页面应该显示出这个选项。
但是这个问题很少发生,因为一般都是直接进入别人的主页,或者插画分类页面,不会直接进入别人的收藏页面。如果发生了这个情况,刷新一下页面即可解决。所以此问题目前并未处理。
- 在排行榜页面,增加了 “只要首次登场” 按钮
只下载首次登场的作品
- 在排行榜页面,优化抓取流程
在抓取列表页时可以获取 tag,所以在这里就检查了一遍 tag,避免抓取到不需要的作品,浪费之后第二次检查的时间。
- 考虑到转换动图会消耗较多的资源,将默认的下载线程数从 6 降低到了 5。
- 之前在 pixivision 忘记隐藏动图保存选项了,现在隐藏它。
- 隐藏了一处广告。
-
添加了将动图批量转换为 webm 视频的功能。
可以设置将动图保存为 webm 视频还是 zip 源文件。取消了之前单个转换成 gif 的方式。 添加了相应的设置项。 踩了好多坑,花了好多时间 Orz -
tag 筛选不再区分大小写了
-
tag 搜索页在筛选阶段也可以应用 tag 筛选的条件了
-
优化了扩展的文件结构,独立出了语言配置文件
-
优化代码,修复 bug
在界面上加入了 wiki 的链接。
-
pixivision 的默认命名规则加上了文件夹部分
pixivision 的规则原本只有 {id},没有文件夹部分,现在加上了默认的 {p_title} 作为文件夹名。 -
代码优化
优化了部分变量名; 取消了发现页面的 “清空作品列表” 的按钮。
-
完善了下载“相关作品”的功能
这个相关作品指的是作品页面最底下的相关作品,最多有 180 个。以前下载相关作品时,实际上走的是 pageTpye 9 的流程,这样获取的数据和作品下面的并不一致,只有一部分会是一样的。现在改成和作品下面的完全一致了。
不过有个缺点,就是之前的方法可以获取很多个相关作品(甚至 1000 个),但现在由于作品下面是固定的 180 个,所以最多也只能下载 180 个。
相关作品列表的排列大致上算是按 id 从大到小排列,新的显示在上面。不过也并不严格,比较混杂。
当用户设置了只下载一部分时,本扩展会把 id 列表页从大到小排列,截取最前面的一部分。我严格了,p 站自己不严格,没办法。
-
放弃对 Firefox 的支持
在 1.3.0 版本由 z2n 添加了对 Firefox 的支持,而在最近的 1.8.0,因为一些修改,不支持 Firefox 了。我发现这个问题之后,进行了探究,结论是,由于本工具的下载机制,与 Chrome 相比,在 Firefox 下载是低效率、高资源占用的。经过一番思索后,我没有恢复 Firefox 的支持,希望大家使用 Chrome 带来更好的使用体验。这和 Firefox 的安全策略有关,我来解释一下原因:
在前台页面下载到了图片的数据,是 Blob 对象,之后生成一个 blob url,发送给后台下载。这个 Blob URL 类似于这样:
blob:https://www.pixiv.net/3424182d-6c92-4307-a88e-ef9c302c9b90`
Chrome 可以正常下载,Firefox 却报错,因为安全原因不允许下载。Firefox 要求这个 url 是要在后台页面生成的才行。
问题来了,要在后台页面生成 url,首先要把图片数据传给后台,但给后台传递的消息是 JSON 对象,blob 对象无法直接传递,只能转换为 Base64 再传给后台,后台再换换成 Blob,生成 Blob URL 下载。
所以,为了传递这个数据到后台,在 Firefox 上要把 Blob 先转到 Base64,后台再转回 Blob。这一套左右横跳不是没有代价的,内存和 CPU 资源占用都将极大增加。下载速度稍快,用户操作电脑就会感到明显的卡顿。之前支持 Firefox 的时候就是这样的,所以现在我也不打算恢复了。别问,问就是 Chrome 体验更好。
Chrome 上:
Blob 对象 → Blob URL → 后台 → 下载
Firefox 上:
Blob 对象 → Base64 → 后台 → Blob 对象 → Blob URL → 下载
太蛋疼了。
-
修复 bug
修复了第一次点击扩展图标时,中间区域应该显示却没有显示的 bug。
-
文件的换行方式都换成 LF
我本地的代码和 GitHub 上的代码统一了换行方式。之前本地代码文件是 CRLF 换行方式,现在改成 LF。这一点在 GitHub 看不到区别,因为 Git 会自动把提交的文件的换行方式改成 LF。
- 优化代码 ?
这次更新把 css 样式从代码中抽离成了单独的文件,在代码中通过网络请求引入。这个地方就很奇怪,在画师页面、作品页面等无刷新加载的页面里,加载样式文件只需要 20 ms 左右,然而在其他页面里,可能需要高达 200 ms。加载样式时代码是停止执行的,所以我这次代码优化算不算是优化?
本来我还打算把语言配置单独保存成未见,看来加载的延迟是个问题,语言配置就先不改了。
-
修复 bug
修复了从画师主页、列表页、书签页进入作品页时,图片查看器有时不能使用的 bug。 -
优化代码
gif、zip 库的 worker 文件通过 fetch 引入了,不在硬编码到 content.js 里了。
-
代码修改成 standard 风格
变量名都变成了驼峰命名规则,所以之前用户设置过的选项需要重新设置。 -
优化了下载时的资源占用
之前下载时,会把图片数据从 blob 转换到 base64,再转换到 blob。现在没有这个转换过程了,CPU、内存资源占用将会大幅下降。 -
修复了一些 bug
修复了 puser 在某些情况下获取错误的问题。 -
完善了注释
-
下载书签作品时会倒序下载
之前也有一些对下载顺序的处理。画师的列表页里,会按 id 从大到小下载,这样可以先下载最新作品,后下载早期作品。tag 搜索页里则是按收藏数从高到低下载(都是通过 sortByProperty 对数据进行排序的) -
移除了 url 里包含 recommended.php 的情况,它是首页的“为您推荐”栏目,现在已经被“发现”页面取代了。
-
加粗提示了文件名乱码的问题
近期打算写个 wiki。
p 站代码又变了,获取画师名的代码做了相应的修改。现在其实是更简单了,挺好的。
优化了获取 token 的方式,添加 tag 的按钮可以在书签页直接出现了。之前需要先用一次快速收藏才会出现这个按钮。
优化体验。之前在一些非书签页也会显示添加 tag 按钮,现在限制在只在书签页显示。但目前有个问题,在别人的书签页里也会显示。
在书签页面,可以给“未分类”的书签批量加上 tag。这样可以节省大量的时间。
快速下载时,如果只有一个文件,则不建立文件夹。如果大于一个图片,则建立文件夹。
-
优化繁体中文文本
-
修复快速收藏功能,感谢 yuzhan1990。
- 对合法的文件名的规则进行修改
现在的 Chrome 下载扩展 API 不允许文件名里含有~
了,所以增加了对此情况的处理。
另外增加的∋\
是一个特殊字符,有时候会遇到,它没有宽度。它会导致 chrome 下载文件时报错,文件名不合法。
画师作品列表页带 tag 时的 api 发生了变化,修改之。
-
添加了 {p_num} 标记,也就是图片的 p 数。
-
因为格式化程序的改变,函数名和括号之间增加了空格。参数列表的逗号后面也加了空格。
-
css 优化
-
其实主要原因是 Firefox 扩展被下架了,补充了一些隐私政策等信息,提交新版本进行审核。
-
更新了 readme 里的捐赠信息,之前放的博客链接,但是需要翻墙才能打开。所以现在直接放图片了。
- 修复 getUserName 的 bug
之前从 dom 里获取,但是这样 p 站一改版就出问题,所以还是从 api 获取比较好。所以添加了 getIllustInfo 函数。虽然可能会多次调用它,但是有缓存,所以问题不大。
-
css 优化
-
查看多 p 图片的页面 示例 并不能进行下载,但之前显示了下载图标,现在去掉
-
增加了 id_num 命名字段
-
停止下载时添加时间间隔。
p 站最近在 tag 搜索页的 R-18 分类里,增加了广告信息,导致抓取出错,现在修复这个问题。
修复 bug
-
优化文本
-
修复 getUserName 的 bug
之前 getUserName 会使用 old_title,这是有问题的,不同语言的 title 不一样,导致严重错误,英语语言下完全无法下载。现在修复了。
-
修改了右侧按钮样式使其更加明显
-
添加了建立文件夹的提示
-
优化日文文本
fix the notation of some of the Japanese.
-
在 sortByProperty 里把参数都转换成了数字。
之前传入的参数是字符串,按首位比较的,不准确。转换成数字以保证结果准确。 -
暂停和继续下载添加定时器。
如果点了暂停,然后点开始继续,中间间隔时间很短,可能会出问题。所以加上了延时。
文件名标记里有些值是数字(如 bmk),导致 replace 报错 once.replace(safe_fileName_rule, '_')
。现在统一转换为字符串,避免错误。
修改命名规则后,快速下载也会建立文件夹了。现在修改成不建立文件夹的状态。
修复动图额外建立了文件夹的问题。
添加命名规则的示例。
原样保留空字段,放到文件名里.
-
合并文件夹和文件名输入框
-
优化文件名生成逻辑
-
接受重复字段,去掉空值字段
-
优化一些文本描述和用户体验
-
修改了扩展的 logo 和应用商店的封面图。
-
增加提示:禁用其他下载扩展。
-
互相检测使标识不同
-
ex 不判断 Firefox
合并代码之后要搜索 Firefox 删除
-
ex 不判断 allowFolder
-
ex 中间面板没有安装扩展的提示
相关 css 代码也不同
github 的 url 不同
设置文件夹哪里没有“如何使用” -
ex 转换 gif 代码不同
initViewer() 里面不同
-
ex 设置 history _wr 方式不同
-
ex 获取 tt 不同
-
ex 获取用户名时判断登陆的代码不同
-
下载时
不判断 GMinfo,不使用 GM_xmlhttpRequest
dataurl 和 bloburl 不同
要单独处理这里的改动,以及 startDownload() -
ex 多了 readBlobAsDataURL()
-
ex 多了 browser 相关代码
同步了脚本版的修改。
每次脚本版的大改,要再同步到扩展版里都很麻烦,因为两者的代码只是部分通用。
之前上架 Mozilla 扩展时,因为 jQuery 源代码过审没通过,遭到下架。我也想不明白是为什么。现在去掉了 jQuery,可以尝试再次上架了。
Firefox 的扩展要求提供第三方库的说明
Viewerjs-mix.js Javascript part
Viewerjs-mix.js CSS part
-
感谢 z2n 对本工具做出的改进,使本工具适配了 Firefox 浏览器。
-
因为 Firefox 扩展的规定,使用的 jQuery 版本必须大于 3.0,所以升级了 jQuery 库。
-
优化了获取 token 的方式,使其更加稳定。
-
Firefox 在内存占用方面的缺点:
当下载的文件数量比较多的时候,Firefox 所需的内存占用量比 Chrome 略大。
而且下载完成后,Chrome 的内存占用很快回落到一个稳定水平,Firefox 的回落速度却明显比较慢。
以上两点可能导致 Firefox 在下载大量任务时,内存占用过多导致卡死。
上个版本出现了 bug,改回上上版本的内容。
点击扩展图标可以显示/隐藏下载面板
上个版本里,把 time_interval 改小了,结果出现了问题,极少数图片会下载重复,并且重复了几个,就会有几个正常图片下载不到,就像被“挤掉了”一样。于是把 time_interval 改回去了。
time_interval 这个参数是半年前加上的,可参考脚本版 log.md 的 5.1.0 条目。简单来说,可能是连续两个下载任务间隔时间很短的话,会导致有一个保存不上。这个参数人为的增加了延迟。
但是很奇怪的是,当初脚本版出现这种情况会导致漏下,如今扩展版的异常不是漏下,而是变成重复了,其中原因不清楚。
我不能确定这个问题是否真的是由 time_interval 导致的。因为目前这个问题仍然偶尔出现。问题总是出在前几个作品里(10 个以内),里面有 1 或 2 个重复的,并且导致有其他作品漏下了。
最近的测试里,每批 400 张图片,下载了 4 次(1600 张),出现了 1 个重复的图片。
我觉得下载越快(浏览器处理不过来),越容易出现这个问题。解决的办法可能需要继续增加 time_interval 的延迟,或者(并且)减少同时下载的线程数。但是这样下载会变慢,暂不处理。
扩展版的稳定性一直不如脚本好,很奇怪。有时候脚本版的看图组件会加载失败;有时候收藏时自动点赞失效,奇哉怪也。
之前的下载方式和脚本版是一样的,点击 a 标签下载。现在为了能自动建立文件夹,改成了发送给 chrome 来下载。
早期的一些版本升级没有写日志