[UI] 全部下载功能 #34

Open
opened 2023-06-16 19:45:19 +00:00 by lsr · 17 comments
Owner
No description provided.
lsr added the
component-ui
label 2023-06-18 17:08:46 +00:00

function sleep(delay) {
var start = (new Date()).getTime();
while ((new Date()).getTime() - start < delay) {
continue;
}
}
script = document.getElementsByClassName("chakra-link css-181sfzb")
for (var i = 0; i < script.length; i++) {
if (script[i].target != "") {
continue;
}
console.log(script[i].href);
console.log(script[i].download);
console.log(i);
script[i].click();
sleep(150*Math.log((i + 1)));
}

function sleep(delay) { var start = (new Date()).getTime(); while ((new Date()).getTime() - start < delay) { continue; } } script = document.getElementsByClassName("chakra-link css-181sfzb") for (var i = 0; i < script.length; i++) { if (script[i].target != "") { continue; } console.log(script[i].href); console.log(script[i].download); console.log(i); script[i].click(); sleep(150*Math.log((i + 1))); }

如果在浏览器环境下全部下载的话,一般会导致弹出大量的下载框;我刚刚给electron封装添加了全部下载功能,原理是用electron劫持下载操作,直接保存进选择的一个文件夹;下载链接使用CSS选择器搜索a[href^=blob]
https://github.com/CarlGao4/um-react-electron/releases
@jixunmoe

如果在浏览器环境下全部下载的话,一般会导致弹出大量的下载框;我刚刚给electron封装添加了全部下载功能,原理是用electron劫持下载操作,直接保存进选择的一个文件夹;下载链接使用CSS选择器搜索`a[href^=blob]` https://github.com/CarlGao4/um-react-electron/releases @jixunmoe
Author
Owner

如果在浏览器环境下全部下载的话,一般会导致弹出大量的下载框;

理论上可以利用新的文件系统 api 来打开目录批量写出,但好像没有火狐浏览器的支持:

https://developer.mozilla.org/en-US/docs/Web/API/File_System_API

另一种方案则是提供一个第三方可执行程序,监听本地端口,等待请求命中后写出。基本上支持跨域访问的浏览器都支持。

> 如果在浏览器环境下全部下载的话,一般会导致弹出大量的下载框; 理论上可以利用新的文件系统 api 来打开目录批量写出,但好像没有火狐浏览器的支持: https://developer.mozilla.org/en-US/docs/Web/API/File_System_API 另一种方案则是提供一个第三方可执行程序,监听本地端口,等待请求命中后写出。基本上支持跨域访问的浏览器都支持。

另一种方案则是提供一个第三方可执行程序,监听本地端口,等待请求命中后写出。基本上支持跨域访问的浏览器都支持。

C++有一个跨平台支持的httplib(yhirose/cpp-httplib),用法倒是很简单,写一个本地接收程序开个小型http服务器也不难,但是也许有点为难用户了吧…

> 另一种方案则是提供一个第三方可执行程序,监听本地端口,等待请求命中后写出。基本上支持跨域访问的浏览器都支持。 C++有一个跨平台支持的httplib([yhirose/cpp-httplib](https://github.com/yhirose/cpp-httplib)),用法倒是很简单,写一个本地接收程序开个小型http服务器也不难,但是也许有点为难用户了吧…
Author
Owner

C++有一个跨平台支持的httplib

库很多,golsng/rust 写的更容易编译,感觉。

但是也许有点为难用户了吧…

以后解密文件还有更麻烦的步骤

实在不行还能用 jszip 打个包下载

> C++有一个跨平台支持的httplib 库很多,golsng/rust 写的更容易编译,感觉。 > 但是也许有点为难用户了吧… 以后解密文件还有更麻烦的步骤 实在不行还能用 jszip 打个包下载

我在想的是,有没有增加一个选项,每解密一个音频就直接自动下载,毕竟最烦的不是不能批量下载而是一次性在浏览器里放太多文件比较吃内存
要是我熟悉typescript我就直接开PR了,可我主要是开发Python和C++

或者给electron和wry环境单独添加功能呢?比如如果检测到在这样的环境下就增加一个输入框选择自动保存的目录?(目前我的electron自动构建还是用的菜单栏)

我在想的是,有没有增加一个选项,每解密一个音频就直接自动下载,毕竟最烦的不是不能批量下载而是一次性在浏览器里放太多文件比较吃内存 要是我熟悉typescript我就直接开PR了,可我主要是开发Python和C++ 或者给electron和wry环境单独添加功能呢?比如如果检测到在这样的环境下就增加一个输入框选择自动保存的目录?(目前我的electron自动构建还是用的菜单栏)
Author
Owner

wry 和 electron 都可以预留接口吧,浏览器发送消息,被框架识别然后做特权操作

wry 和 electron 都可以预留接口吧,浏览器发送消息,被框架识别然后做特权操作
Author
Owner

如果只是想做个自定义的批量转码工具,你可以用这个库

https://github.com/parakeet-rs/libparakeet

如果只是想做个自定义的批量转码工具,你可以用这个库 https://github.com/parakeet-rs/libparakeet

大佬们,每次解密完在console执行我那个命令不就可以批量下载了吗?浏览器那里一律允许弹出和下载。不需要下载的就不扔进去解密就行了。是我那个有什么不方便或者不适用的地方吗?

大佬们,每次解密完在console执行我那个命令不就可以批量下载了吗?浏览器那里一律允许弹出和下载。不需要下载的就不扔进去解密就行了。是我那个有什么不方便或者不适用的地方吗?

不是的,只是在想如何让这个项目做的更好而已

不是的,只是在想如何让这个项目做的更好而已

大佬们,每次解密完在console执行我那个命令不就可以批量下载了吗?浏览器那里一律允许弹出和下载。不需要下载的就不扔进去解密就行了。是我那个有什么不方便或者不适用的地方吗?

对于typescript我了解的不多,不能确定之后在构建的时候chakra-link css-181sfzb能不能保持稳定,所以我是用document.querySelectorAll('a[href^="blob"')查找元素的

另外,我最希望解决的问题之一是避免在用户一次导入大量文件的时候把内存爆掉…我个人不认为“如果你要一次导入一大堆,那请你去用我开发的另一个项目”是个解决办法,因为这是一个应用,不是一个库

> 大佬们,每次解密完在console执行我那个命令不就可以批量下载了吗?浏览器那里一律允许弹出和下载。不需要下载的就不扔进去解密就行了。是我那个有什么不方便或者不适用的地方吗? 对于typescript我了解的不多,不能确定之后在构建的时候`chakra-link css-181sfzb`能不能保持稳定,所以我是用`document.querySelectorAll('a[href^="blob"')`查找元素的 另外,我最希望解决的问题之一是避免在用户一次导入大量文件的时候把内存爆掉…我个人不认为“如果你要一次导入一大堆,那请你去用我开发的另一个项目”是个解决办法,因为这是一个应用,不是一个库
Author
Owner

另外,我最希望解决的问题之一是避免在用户一次导入大量文件的时候把内存爆掉…

还没收到过内存爆的报告(有一例,但无法重现),等有人出问题了+能稳定重现再想想怎么修。

不过如果你会 c++,我的建议是你直接用上面的那个库写一个解决方案,这边也可以把你的项目列到“相关项目”里。

> 另外,我最希望解决的问题之一是避免在用户一次导入大量文件的时候把内存爆掉… 还没收到过内存爆的报告(有一例,但无法重现),等有人出问题了+能稳定重现再想想怎么修。 不过如果你会 c++,我的建议是你直接用上面的那个库写一个解决方案,这边也可以把你的项目列到“相关项目”里。

还没收到过内存爆的报告(有一例,但无法重现),等有人出问题了+能稳定重现再想想怎么修。

重现方法也很简单,直接一次性往里加足够多的文件(比如几百首加起来10GB的),会都先存进内存,然后会再存进磁盘缓存

个人看法,虽说线代浏览器的优化做的很多了,但也不能因为浏览器给优化了网页就当内存都是随便用的啊…

> 还没收到过内存爆的报告(有一例,但无法重现),等有人出问题了+能稳定重现再想想怎么修。 重现方法也很简单,直接一次性往里加足够多的文件(比如几百首加起来10GB的),会都先存进内存,然后会再存进磁盘缓存 个人看法,虽说线代浏览器的优化做的很多了,但也不能因为浏览器给优化了网页就当内存都是随便用的啊…
Author
Owner

个人看法,虽说线代浏览器的优化做的很多了,但也不能因为浏览器给优化了网页就当内存都是随便用的啊…

我的看法刚好相反,内存现在便宜很多,买都买了得利用起来。刚好浏览器提供了这么一个平台/方法就很棒。

主要还是因为这工具算“一锤子买卖”。用完关了就完事。

如果真的对性能/内存使用有要求,应当换用别的原生代码写 cli/gui 程序。

> 个人看法,虽说线代浏览器的优化做的很多了,但也不能因为浏览器给优化了网页就当内存都是随便用的啊… 我的看法刚好相反,内存现在便宜很多,买都买了得利用起来。刚好浏览器提供了这么一个平台/方法就很棒。 主要还是因为这工具算“一锤子买卖”。用完关了就完事。 如果真的对性能/内存使用有要求,应当换用别的原生代码写 cli/gui 程序。

另一种方案则是提供一个第三方可执行程序,监听本地端口,等待请求命中后写出。基本上支持跨域访问的浏览器都支持。

C++有一个跨平台支持的httplib(yhirose/cpp-httplib),用法倒是很简单,写一个本地接收程序开个小型http服务器也不难,但是也许有点为难用户了吧…

我觉得这个项目生成本来就需要用到python,那就直接用python做一个最简单的http服务就好了。代码如下:


import http.server
import socketserver
import os
import webbrowser

PORT = 8000 #设置端口

os.chdir('./um-react') #设置WEB服务默认主目录

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("serving at port", PORT)
webbrowser.open("http://localhost:{PORT}/".format(PORT=PORT))
httpd.serve_forever()


以上代码在windows10,python3下运行正常

> > 另一种方案则是提供一个第三方可执行程序,监听本地端口,等待请求命中后写出。基本上支持跨域访问的浏览器都支持。 > > C++有一个跨平台支持的httplib([yhirose/cpp-httplib](https://github.com/yhirose/cpp-httplib)),用法倒是很简单,写一个本地接收程序开个小型http服务器也不难,但是也许有点为难用户了吧… 我觉得这个项目生成本来就需要用到python,那就直接用python做一个最简单的http服务就好了。代码如下: ---------------------------- import http.server import socketserver import os import webbrowser PORT = 8000 #设置端口 os.chdir('./um-react') #设置WEB服务默认主目录 Handler = http.server.SimpleHTTPRequestHandler with socketserver.TCPServer(("", PORT), Handler) as httpd: print("serving at port", PORT) webbrowser.open("http://localhost:{PORT}/".format(PORT=PORT)) httpd.serve_forever() ---------------------------- 以上代码在windows10,python3下运行正常
Author
Owner

我觉得这个项目生成本来就需要用到python,那就直接用python做一个最简单的http服务就好了。代码如下:

Python 不是必须的。用它只是因为 node 的 Docker 容器里没有自带 zip 包,直接使用已有的 Python 可以更快完成构建。

> 我觉得这个项目生成本来就需要用到python,那就直接用python做一个最简单的http服务就好了。代码如下: Python 不是必须的。用它只是因为 node 的 Docker 容器里没有自带 `zip` 包,直接使用已有的 Python 可以更快完成构建。

您好!今天我在使用过程中发现 CLI 版本处理带密钥的qq音乐文件时存在一些问题,但是新版网页版没有这个问题。我写了个简单的油猴脚本,使网页版支持了文件夹选择和批量下载功能,希望能带来便捷。
感谢 UnlockMusic 团队的杰出工作!

您好!今天我在使用过程中发现 CLI 版本处理带密钥的qq音乐文件时存在一些问题,但是新版网页版没有这个问题。我写了个简单的[油猴脚本](https://greasyfork.org/zh-CN/scripts/521134-musicunlock-bulk-downloader),使网页版支持了文件夹选择和批量下载功能,希望能带来便捷。 感谢 UnlockMusic 团队的杰出工作!
Sign in to join this conversation.
No description provided.