上次遇到的问题
上次发了这么个东西:技术贴:使用UserScript自动通过百度网盘/360云盘提取码
从很多人的反应来看,上次的代码很多人还是感兴趣的,但是成功的人很少。这主要是因为以下俩原因。
脚本没搞对
上次的文章里,提供了三段脚本。但我只是在第一个脚本那里说了新建脚本的步骤。
然而天真的我以为后面就可以不用再说新建脚本的步骤了……
直到我看到很多人把三段脚本放在同一个脚本文件里……
但并不是啊!一般来说是每个网站新建一个脚本啊!方便管理啊!剩下的俩脚本要分别新建啊!然后 @match 需要单独设置啊!
脚本错误
这个也是我的责任,我应该早点就发现的。
原因在于以下这行代码:
document.querySelectorAll("a[href*='pan.baidu.com'], a[href*='yunpan.cn']").forEach
正常情况下,document.querySelectorAll
返回的是一个NodeList
,并不是一个数组,所以它并没有forEach
的方法,所以有的同学会发现这样的错误。
那我为什么没有发现呢?我觉得我应该甩锅……
……为什么会这样?我也不知道,我不会告诉你这都是Chrome浏览器,所以Chrome浏览器自己的实现都有差异。
要解决这个兼容性问题也很简单,就是使用 Array.prototype.slice
来转换为一个真正的数组:
Array.prototype.slice.call(document.querySelectorAll("a[href*='pan.baidu.com'], a[href*='yunpan.cn']")).forEach( function (link) { var txt = link.nextSibling && link.nextSibling.nodeValue; var code = /码.*?([a-z\d]{4})/i.exec(txt) && RegExp.$1; if (!code) { txt = link.parentNode.innerText; code = /码.*?([a-z\d]{4})/i.exec(txt) && RegExp.$1; } if (code) { var href = link.getAttribute("href"); link.setAttribute("href", href + "#" + code); } } );
添加对新浪微盘的支持
有些网站有用新浪微盘做分享。而这分享也可以加码。
既然有码,那么一样可以添加支持。具体的分析过程这里不谈了,因为大致思路都一样。
// ==UserScript== // @name 新浪微博微盘工具 // @namespace http://tampermonkey.net/ // @version 0.1 // @description try to take over the world! // @author You // @match http://vdisk.weibo.com/* // @grant none // ==/UserScript== /* jshint -W097 */ 'use strict'; (function () { if (self.location.pathname.indexOf("/lc/") === -1) return; var hash = self.location.hash.slice(1, 5); var input = document.querySelector("#keypass"); if (!/[a-z\d]{4}/i.test(hash) || !input) return; input.value = hash; document.querySelector("#validate a").click(); })();
在对新浪微盘添加支持后,需要在之前的转换链接中也添加对vdisk的转换,方法很简单,就是将选择器修改一下就好了,毕竟链接格式都差不多……
Array.prototype.slice.call(document.querySelectorAll("a[href*='pan.baidu.com'], a[href*='yunpan.cn'], a[href*='vdisk.weibo.com']"))
添加对软件站的支持
我们之前只添加了zd423网站的支持,倘若你发现自己常去的啥站也是用这些网盘加密分享的,那么应该怎么办呢?简单,最简单的方法就是修改zd423的那个脚本,将对应的网站加入@match
中即可。
注意:仅针对普通软件站。如果软件站有自己特殊的显示逻辑或加载逻辑,那么可能需要有特征性地去改写了。
授人以渔
我突然意识到,授人以渔的时候,你要是在学不会,那我只能直接给你鱼了
SO,拿去。。
网盘自动过验证码脚本 201603172258知道怎么导入不……
强大啊 厉害厉害
为什么我下载你做好的压缩包导入进去 百度的不行 我用的是Chrome浏览器
求助贴吧的怎么破。这个对贴吧链接的无效啊
可以试试这个 https://greasyfork.org/zh-CN/scripts/18733-%E7%BD%91%E7%9B%98%E6%8F%90%E5%8F%96%E5%B7%A5%E5%85%B7
博主这个是全局的?
这个脚本和您的有何异同呢?
https://greasyfork.org/zh-CN/scripts/13463-%E7%BD%91%E7%9B%98%E8%87%AA%E5%8A%A8%E5%A1%AB%E5%86%99%E5%AF%86%E7%A0%81-%E5%A2%9E%E5%BC%BA%E7%89%88
我看该作者的脚本描述里有这么一段:
本脚本增加了网盘密码自动提取功能,为了避免脚本占用不必要的资源,脚本生效于网页DOM加载完毕,不会事先融合超链接与密码,而是在点击超链接时产生进行融合。
是什么意思呢?烦请解惑,谢了.
看了下,大概差不多。它说的意思是点击链接的时候才判断是否是网盘链接是否有提取码,这样可以避免提前判断占用资源。只不过我觉得这样可以省资源可能只是想象中的吧(毕竟这样需要监听所有的链接点击)。
感谢解惑.
安装这种全局性的脚本不会影响打开网页的速度什么的吧?
全局会有影响,但脚本不复杂,影响不大。
明白了.感谢您的耐心解答和指教.
多谢.
请问博主,为什么在这页面http://www.zdfans.com/2860.html,用你那集合的脚本,第一个链接竟然不会检测到访问码,鼠标移动到链接上面显示不了,开发者工具里面,错误显示“because its MIME type ('image/gif') is not executable”“Uncaught ReferenceError: text is not defined”
后面我看一下。。。。。。。。。。
好的,THX
鱼大看了好久了。。
这段时间忙。。。。刚更新了Github上的bug列表,可以参考下 https://github.com/iccfish/netdisk-helper/milestone/1
LZ是个好人!大大的好人!向楼主看齐!
大神,请问一下,我用搜狗浏览器,安装tampermonkey legacy,导入您的脚本后可以自动通过百度云和360云盘;
用360极速浏览器安装tampermonkey legacy,导入您的脚本后,可以自动通过百度云,却对360云盘不太灵光,怎么回事呢?
直觉告诉我可能是数字的浏览器对自家的域名做了特殊的限制吧。。。。
我这里360激素 脚本对360云盘支持挺好的
感谢,导入后就能用了啊,下载软件方便了许多.
awesome!awesome!awesome!写点汉字
不要白日做梦了