什么是Tampermonkey?是一个用来在浏览器中运行自定义js脚本的插件,用来弥补一些网站人性化的不足。最初,OilMonkey诞生于firefox平台,凭借以上优势受到前端开发者的青睐。原来的Greasemonkey叫做Greasemonkey,后来又出现了一个新的插件Tampermonkey,兼容Greasemonkey的功能,支持跨浏览器运行。所以现在大家普遍称Tampermonkey为油猴。说到浏览器,可能每个人用的都不一样。有firefox、chrome、Microsoftedge、Applesafari、360和chromium内核的qq浏览器,还有一些旧的浏览器。Tampermonkey是一个免费的浏览器扩展程序,也是Chrome、MicrosoftEdge、Safari、OperaNext和Firefox最受欢迎的用户脚本管理器。360/qq浏览器请到自家应用商店查看Safari下的插件是否付费(10.15后变为付费,win版Safari不支持插件功能)如何安装Tampermonkey?网址:https://www.tampermonkey.net/下载适合您浏览器的插件插件能做什么?使用插件无法实现任何功能。它只是一个平台,具体功能需要到以下网站下载。GreasyFork和OpenUserJS这边已经有很多功能脚本了,基本可以满足需求。搜索满意的脚本,点击安装。Tampermonkey支持脚本备份导出功能,方便您在不同平台共享脚本。如果还是不能满足你的需求,那就继续看下面的文章吧。如何编写脚本?首先,编写脚本需要满足技术要求:掌握js脚本掌握jquery模块(可选)正则表达式(可选)使用console调试发布脚本(可选)其中jquery不是必须掌握,但是当你了解它之后,你的效率会事半功倍,但是这个模块的一些网站会失败。这时候就需要使用基本的js来控制网页元素了。创建脚本点击插件按钮创建一个新脚本:包含脚本的描述和结构,作为您自己努力的结果,需要附上您的个人网站和您自己的名字。同时,脚本最重要的是脚本名称,脚本版本号,脚本的描述,以及匹配的网站。这些可以随时更改,包括脚本名称。底部是脚本的内容。该脚本默认启动严格模式。严格的好处是提醒代码错误。放置代码的位置在Yourcodehere。如果要匹配整个网站,可以使用//@include*如果包含特定的网址,可以使用它只匹配b站首页//@matchhttps://www.bilibili.com/全网匹配//@matchhttp*://*/*or//@include*Exclude匹配//@excludehttps://mail.google.com/*扩展支持因为提到了jquery所以加了这里//@requirehttps://cdn.staticfile.org/jquery/3.3.1/jquery.min.js其他扩展根据你的需要来,你可以添加vue扩展,但尽量保持简单,甚至很多插件为了适应更多的网站,我什至放弃了jquery为了某个需求写什么样的脚本。在这里我有一个想法。百度网盘在网上分布很广,但是每次点进去都要复制密码,很麻烦。大部分功能可以通过脚本实现吗?网上有专门的脚本可以实现网盘的密码复制和自动填充。让我看看我是否可以在这里实现它。试一试~~写代码现在可以正式开始写代码了,不过不用担心,代码就写到这里,既晦涩又不直观。打开控制台。当然,在打开控制台之前,必须先打开相应的网站,否则打开控制台也不能有效工作。首先我们要知道网站的URL:window.location.href获取起来很方便,可以在控制台试试。其次,如何获取URL的二级域名?答案是正则:\/\/(.+?\..*?)(\/|\?)简单说明一下正则的作用,它会查询以//开头,/结尾的URL或者?结尾字符串中有些字符是命令字符,所以要表达其原意,需要在前面加上\形成\?来表达原意。如果有正则,则执行正则获取域名,判断域名。如果域名不是百度网盘,则搜索网盘并提取代码,将密码通过#整合到网盘的链接中。然后通过正则(code|ask)[\s|:|:]*([a-zA-Z0-9]{4})复制提取码,通过提取码附近的链接找到跳链链接:`find('a[href*="pan.baidu.com"]')提取其链接:attr('href')拼接可以比较特殊:有些网站不直接贴出百度网站的网址,而是添加统计跳转链接。这时候需要ajax分析扩展判断非百度的urlif(link.indexOf('https://pan.baidu.com')!=0)执行分析$.ajax({type:'get',url:link,success:function(res){正则提取解析出的百度网盘网址:(https:\/\/pan.baidu.com\/.*?\/(\d|\w|-)+)拼接网盘网址和提取码百度网盘网址处理:定时分析网址上的提取码:#([a-zA-Z0-9]{4})唯一输入框填入:$('input').first().val(提取码)自动打开,我们偷懒$('a[title="extractfile"]').click()脚本,验证多个网站,相当提交脚本到网站注册一个greasyfork.org账号就好了,你需要准备以下内容,方便你了解脚本的功能,下载脚本代码本身,脚本说明和运行截图脚本。提交脚本后,您需要在脚本更新后回来更新脚本。记住版本号就是需要迭代的成品URLvarlabel='Zszen'varregexp_codeback=/#([a-zA-Z0-9]{4})/varregexp_code=/(code|ask)[\s|:|:]*([a-zA-Z0-9]{4})/varregexp_url=/(https:\/\/pan.baidu.com\/.*?\/(\d|\w|-)+)/varurl=window.location.href;varres=/\/\/(.+?\..*?)(\/|\?)/.exec(url);var站点=res[1];e.log(站点);//解析if(site=="pan.baidu.com"){$('input').first().val(regexp_codeback.exec(url)[1]);$('a[title="提取文件"]').click();}else{//dealvararea=$(':contains("提取码")').last();如果(面积。长度>0)replaceUrl(面积);area=$(':contains("密码:")').last();如果(面积。长度>0)replaceUrl(面积);}functionreplaceUrl(area){varcode=regexp_code.exec(area.text())[2];varatag=area.find('a[href*="pan.baidu.com"]');if(atag.length==0){atag=area.find('a');}varlink=atag.attr('href');控制台日志(链接);if(link.indexOf('https://pan.baidu.com')!=0){$.ajax({type:'get',url:link,success:function(res){link=regexp_url.exec(res)[0];area.find('a').attr('href',link+"#"+code);}});}else{area.find('a').attr('href',link+"#"+code);}}弃弃Jquery如果插件对应比较广泛的网站,最好尽量减少外部js调用,包括jquery调用。其实原始元素查询速度并不慢,写法也不算多余。需要自己实现搜索处理功能,才能正常使用。另外,由于忘记自己二次跳转到了百度云的网站,所以没有处理二次分析,后面再说。贴出最新代码varlabel='Zszen'varregexp_codeback=/#([a-zA-Z0-9]{4})/varregexp_code=/(code|ask)[\s|:|:]*([a-zA-Z0-9]{4})/varregexp_url=/(https:\/\/pan.baidu.com\/.*?\/(\d|\w|-)+)/varurl=window.location.href;varres=/\/\/(.+?\..*?)(\/|\?)/.exec(url);变种网站=资源[1];if(site=="pan.baidu.com"){//解析console.log(label,'panget');varpss=regexp_codeback.exec(url);varinputs=ELs('输入');varas=ELs('a',el=>el.textContent.indexOf('提取文件')>=0);如果(pss!=null&&pss.length>1&&inputs.length>0&&as.length>0){inputs[0].value=pss[1];as[0].click()}}else{//dealconsole.log(label,'panfind');ELs('a',(el)=>regexp_code.test(el.parentElement.textContent)&®exp_url.test(el.href),el=>{varps=regexp_code.exec(el.parentElement.textContent)el.href=el.href+'#'+ps[2]});}functionELs(tagName,conditionFun,dealFun){v??artags=[...document.getElementsByTagName(tagName)];如果(conditionFun){tags=tags.filter(conditionFun);}if(dealFun){tags.forEach(dealFun);}返回标签;}GM功能集成tampermonkey,提供gm功能,帮助你实现很多附加功能。使用前需要引入grant权限,也就是下面注释的代码。虽然是评论,但确实是tm的权限api申请。申请全局变量的读写//@grantGM_getValue//@grantGM_setValue与cookies不同的是设置是针对网站的,即当前插件设置是唯一的使用方式://读取GM_getValue("key")//设置GM_setValue("key",value)申请数据请求(支持跨域)//@grantGM_xmlhttpRequest插件提供访问权限,让您可以跨域请求,当然是请求跨域对于域,tm插件会提示你是否允许跨域请求GM_xmlhttpRequest({method:"GET",url:链接地址,onload:(res)=>{//返回值处理})通过以上两个API,我实现了开启关闭百度网盘自动下载功能和解析非百度网盘功能:可以看这个网站,实现pre-查看检测提取码,然后反推找到链接,判断链接是否需要进一步分析,从而完成第二次跳转到自动分析的比较:插件无效时:插件有效时有效:成品网址散,欢迎交流支持
