Skip to content

Feature 增加网盘文件夹下载 #181

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# 忽略所有文件
!网盘直链下载助手.user.js # 保留这个文件
!给开发者hmjz100的话.md

/config/
node_modules/
package-lock.json
*.json
*.css
LICENSE
README.md
114 changes: 114 additions & 0 deletions 给开发者hmjz100的话.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
我增加了下载文件夹功能,一键下载文件夹下所有的文件(多个)文件夹嵌套文件夹的这种目录组织都能下载下来,测试环境 win11、edge 浏览器、RPC 发 Aira2
这些下载器我基本都不认识,我只能简单测试下,可能要你去仔细试试,路径我都在网页元素那写好了,"dpath"元素就是。

我只动了(改)网盘直链下载助手.user,其它我都没改
我虽然会写代码,但方向不是这方面的,油猴我第 1 次做,爬网站数据是第 2 次,上次还是咸鱼捡二手的提醒,
我虽然会 JS 但并不是主 JS 的,对 js 同步异步这边不是很熟悉,你可以看情况修改
标注 TODO 的都是要注意一下的。

我是从 gitee 上找到这项目的,结果我改好了,才看到你 github 也上传了,你 gitee 上没写 github 上的链接,然后发现你 Gitee 上没同步,进度落下几个月……。
我 Gitee 和 GitHub 都同时推送,你可以选择任意一个合并,Gitee 毕竟是国内的,政策之类的怕删代码我不怎么用。

因为目录算是特殊的文件,我始终假设返回的是文件,统一起 file 这系列的名字,后续再判断是否文件夹

获取下载链接的时候,我觉得每获取 1 个都展示出来太快,会晃花眼,我调整了下每批次才展示 1 次,你觉得不合适可以改回去

有的网盘给的链接时效短,推荐拉高下载器同时任务数,或者等失败了再用脚本再请求次再下载(需要注意设置不覆盖同名文件)。

广度和递归遍历文件夹我犹豫了很久,广度可以改成并发访问多个文件夹加快速度,甚至写了一半了,后来还是觉得递归好点,一是更贴合人类访问逻辑,防反爬,二是一般人分享文件,不会存那么多个文件夹,会是少数几个文件夹里放大量的文件,导致广度并发比递归快不了多少。

我平时不怎么下载东西,所以以下只是简单测试,不知道有没有问题

好像 1 次只能操作 1 个网盘,比如操作阿里的时候操作移动网盘会卡住,不过也没人这么闲我就不细看了。

API:
测试环境: win11 的 Edge 浏览器。
Blob 流,老实说,我不太会修改下载路径,浏览器和用户操作系统平台不同导致调用的 API 可能不同,适配起来麻烦,老实说我不推荐用户用这种不确定的下载方式。
我姑且做了点:File System Access API 主要支持 Chromium 内核浏览器(Chrome/Edge),测试了下 win11 下的 Edge 浏览器可行。如果的确懒得改,请告诉用户然后不改算了。
win11 Edge 好像要点下浏览器的是否将所做更改保存到 XXXX,好像每种网盘只用点 1 次就行,而且好像下载完后再点也可以,有时又不行,我不确定别的浏览器会不会也这样,你可能要做下适配。

Aria:
测试环境: win11 的 Aira2c 的控制台命令行。
因为增加了文件夹下载功能,修改了下载路径。(话说这个有必要吗?不也是 RPC 发到 Aria2?)。

RPC:
测试环境:我发到 win11 和轻 nas armbian 上的 Aira2 的都可以
因为增加了文件夹下载功能,修改了下载路径。

cURL:
测试环境:win11、armbian(linux)
win11 用 curl 命令,如果目录不存在会失败,所以加了创建目录的代码,但是在命令行里测的,不知其它平台和下载器是否适用,如果不行就删掉吧。
AI 说 为了使命令在 Linux/macOS 上也能工作,可以将其修改为:mkdir -p "下载测试 2" >/dev/null && curl ……
我在 armbian(linux)上测试了上面这条成功,但我没苹果电脑,只有苹果手机,就没测试。
TODO 如果有 header 的话(比如阿里盘),会提示'refer' 不是内部或外部命令,也不是可运行的程序,因为我不知道你测试环境,我不敢改。详见 TODO

BC:
测试环境:win11
老实说,我不会修改下载路径,如果的确没法改,请告诉用户。
我没改什么所以也没测试。

百度(853 个文件,文件夹嵌套文件夹,并有大量记事本文件和少量零散文件模拟文件夹):
Blob:正常
Aira:命令提示符总随机漏 2/853 个,报 errorCode=22 , status=408,链接本身没问题,可能是服务器限制。power shell 正常。
RPC:正常
curl:win 平台正常,armbian(linux)不完全测试正常、macOS 没测。

阿里(1127 个文件):
Blob、Aira:可能太多太频繁,会有下失败的,只下到约 300/1127 个。下载 124 个文件正常。
RPC:只支持 1001 个文件,下载 524 个文件正常。
curl: 如果有 header 的话,提示'refer' 不是内部或外部命令,也不是可运行的程序,因为我不知道你测试环境,我不敢改。详见 TODO

移动(386 个文件):
Blob:正常
Aria:正常
RPC:下载正常。但文件数量多如几百个的时,发 RPC 会卡住,但是正常发 RPC,发完才能操作,这边应该是你这边的问题,请看下(测试环境: windows 发本地的 AriaNg Native 客户端)。
curl:win 正常,armbian(linux)不完全测试正常、macOS 没测。

天翼(553 个文件):
拿分享的时候有 1 次不完整,不知是不是我看错了
TODO 我调试过程中 res 出现过 check ip error - curIp=2409::xxxx:xxxx:xxxx:xxxx:xxxx:xxxx, cookiesIp=120.xxx.xxx.xxx,不知是抓 IP 还是 cookies 有问题,注意下
blob:正常。
aria:链接有效期这么短的吗?5 分钟?我连 power shell aria 都没跑完,链接就失效了。
rpc:正常
curl:cmd 正常,power shell 超过 5 分钟了,armbian(linux)不完全测试正常,macOS 没测。

迅雷(1015 个文件):
迅雷可能限制得严,大量下载容易被限制。
1000 个文件可能请求太多,后面就经常大量获取失败。
blob:正常。
aria:正常。
RPC:ariaNG 只显示 1001 个文件(实际应该有下到的,当时没注意看),缩小数目到 524 个文件正常。
curl:第 1 天 524 、124 个文件都下不全(curl: (52) Empty reply from server)可能已经风控了。
win cmd 第 2 天尝试下载 124 个文件成功,power shell 时可能还是被风控了缺文件,armbian(linux)不完全测试正常,macOS 没测。

夸克(93 个文件):
我认为连续访问网盘的接口不如直接拿全部 ID 合适,post 协议本身不作数据长度上限,即使后台限制为 1M,也有 65536 个文件 ID 了,你如果觉得不合适可以修改
我发觉我下个 37 个 G 的单个文件,只有 30 几 K 的速度,连接数只有 1,其它小点的十多个 G 的文件都是正常的,先骂个夸克。
blob:总有几个缺的?
aria:正常
rpc:正常
curl:win 正常,armbian(linux)不完全测试正常、macOS 没测。

UC(1102 个文件):
1、我看到 user-agent 写的是夸克的,怕你写错,你注意下。
2、我认为连续访问网盘的接口不如直接拿全部 ID 合适,post 协议本身不作数据长度上限,即使后台限制为 1M,也有 65536 个文件 ID 了,你如果觉得不合适可以修改
blob:正常。
Aira:正常
RPC:正常。
curl:win 正常,armbian(linux)不完全测试正常、macOS 没测。

123(782 个文件):
1、我测试时发现大量上传名字按顺序,但内容一样的记事本,它会提示风控,但名字内容随机就没所谓,可能抓得严,你注意下。
2、遍历文件的请求 URL 中间有 XXX=时间戳-XXX-XXX 的格式,我发觉那放 3 个随机数竟然也行,如果不合适你就找下。
cookies 有串 CNZZDATA128030xxxx=191082xxxx-174757xxxx 看起来有点像,可以试试
3、123 网盘的分享站有 3 个,www.123pan.com、www.123684.com、www.123912.com,这3个站请求的url不一样,但都适配www.123pan.com,如果反爬虫你注意下
4、我想测试下带密码的那种分享的,哎呀妈呀,都没找到网盘资源,好不容易找到个网站,还有 2 个钟就关站了,注册都卡界面 404,BING 找到几个分享,还都不用密码……,最后我分享我自己的,但这样可能会有问题,比如天翼就是进自己的分享和进别人的分享状况不一样,要不你自己测试下。
5、123 网盘你没做需要密码的分享的那种适配,不用密码的功能正常。我简单看了看,在 cookies 没找到密码,按理说应该有的,我就懒得看代码了。不过按理来说,123 的分享一般都是没密码的,实在不行转换思维让用户自己输密码。
6、123 用着夸克的系统?我看着有的就像从夸克那没注意抄过来的我就删除了,你注意下。
7、然后平台是 IOS 不是 WEB?我就改了下,觉得不行你就改回来。
8、TODO Aria、Aria2 下载约 30M 的 zip 时 HTTP 状态码 210 异常,blob 提示下载完成其实没下载、但 curl 能下载,(win11 cmd 1.00.67.zip),是不是需要特定请求头的问题?
9、TODO 可能限制得严,大量下载容易被限制,测起来困难,我可能已经被风控了,就没继续测下去。
blob:不知是弹出保存文件的确认框太慢还是风控,没保存到几个。
aria:TODO
rpc:TODO
curl:728 个文件被限制下载。
Loading