- // ==UserScript==
- // @name WordPress 系博客验证码 自动填表
- // @author 极品小猫
- // @version 1.2.4
- // @description 支持“胡萝卜周”、“殁漂遥”、“独孤求软”、“蓝点网”,理论上是支持 WordPress 模板的网站,但是需要自行添加 include
- // @namespace https://gf.qytechs.cn/zh-CN/users/3128
- // @grant GM_setValue
- // @grant GM_getValue
- // @grant GM_addStyle
- // @grant GM_xmlhttpRequest
- // @grant unsafeWindow
- // @grant GM_info
- // @include http://www.carrotchou.blog/*.html
- // @include https://mpyit.com/*.html*
- // @include https://www.mpyit.com/*.html*
- // @include http://www.dugubest.com/archives/*
- // @include https://huajiakeji.com/downloadstart.html#*
- // @include https://www.landiannews.com/archives/*
- // @exclude http*://mail.*
- // @require http://cdn.staticfile.org/jquery/2.1.4/jquery.min.js
- // @run-at document-idle
- // @license MIT
- // ==/UserScript==
-
- let u=unsafeWindow,
- urls=location.href,
- host=location.hostname,
- hosts=location.hostname.replace(/^www\./i,''),
- paths=location.pathname,
- searchs=location.search.replace(/^\?/,''),
- ToDay=getDate(),
- CodeData={};
-
- if(typeof(GM_getValue('CodeData'))=='undefined') GM_setValue('CodeData', {});
- else CodeData=GM_getValue('CodeData');
-
- let WordPress = ['carrotchou.blog', 'mpyit.com', 'dugubest.com','landiannews.com']; //WordPress 模板网站清单
-
- let HostList={
- 'WordPress':{//WordPress 模板博客通用规则
- 'id':'#verifycode, [name="huoduan_laomome"], #gogogo',
- 'val': '',//默认密码
- 'btn':'#verifybtn',
- callback: function(){
- let config=CodeData[hosts];
-
- //重新记录密码
- if(config.verifycode=='none') {
- config.verifycode=this.val;
- config.date=ToDay;
- CodeData[hosts]=config;
- GM_setValue('CodeData', CodeData);
- }
- },
- pre : function(conf, e){ //预定义行为
- let config=CodeData[hosts]||{date:"", verifycode:""};
-
- //密码检测阶段1,日期不符
- /*
- if((!config.date||config.date!==ToDay)&&config.verifycode=='none') {
- config.verifycode=prompt('填写今天的暗号:', config.verifycode);
- }
- */
-
- //密码检测阶段2,暗号出错
- $('script:not([src]):not([type="text/javascript"])').each(function(){
- if(/暗号出错|验证码错误/.test(this.textContent)&&config.verifycode!=='none') {
- config.verifycode=prompt('验证码错误,请重写(输入none则今天不会再打扰你了):', config.verifycode);
- }
- });
-
- //密码检测阶段3,循环检测没有输入密码
- while((!config.verifycode||config.verifycode=='null')&&config.verifycode!=='none') config.verifycode=prompt('没有写入暗号,请重写(输入none则不会再打扰你了):', config.verifycode||'none');
-
- config.date=ToDay;
- CodeData[hosts]=config;
- GM_setValue('CodeData', CodeData);
-
- conf.val=config.verifycode;
- document.body.oncopy=function(){return false;};
- return conf;
- }
- }
- }
- for(let i in WordPress) HostList[WordPress[i]]=HostList['WordPress']; //生成 HostList
- if((u.wpp_params||u.wp&&(u.wp_url||u.wppay_ajax_url)) && !HostList[hosts]) HostList[hosts]=HostList['WordPress'];
-
- if(HostList[hosts]) {
- let conf=HostList[hosts];
-
- //检查密码框目标是否存在
- if($(conf['id']).length>0) {
- if(conf['pre']) conf=conf['pre'](conf); //执行预定义行为
-
- $(document).ready(function(){
- //用户名填表
- var t=setInterval(function(){
- if($('#username,[name="username"], #password,[name="password"]').length>0) {
- setTimeout(function(){
- $('#username,[name="username"]').val(conf.username).keydown();
- $('#password,[name="password"]').val(conf.password).keydown();
- },100)
- clearInterval(t);
- }
- },1000);
-
- if(conf['callback']) $(conf['btn']).on('click', conf['callback']); //绑定密码重置
- if(conf['val']&&conf['val']!=='none') { //存在密码时,自动填写
- $(conf['id']).val(conf['val']);
- $(conf['btn']).click();
- }
- });
- }
-
- //跳转链处理
- $('body').on('click', 'a', function(e){
- if(/\/go\?url=/i.test(this.href)) this.href=getUrlParam('url', this.href);
- });
- }
-
- function getUrlParam(name, url, option, newVal) {
- var search = url ? url.replace(/^.+\?/,'') : location.search;
- var reg = new RegExp("(?:^|&)(" + name + ")=([^&]*)(?:&|$)", "i");
- var str = search.replace(/^\?/,'').match(reg);
-
- if (str !== null) {
- switch(option) {
- case 0:
- return unescape(str[0]);
- case 1:
- return unescape(str[1]);
- case 2:
- return unescape(str[2]);
- case 'new':
- return url.replace(str[1]+'='+str[2], str[1]+'='+newVal);
- default:
- return unescape(str[2]);
- }
- } else {
- return false;
- }
- }
-
- function getDate(type) {
- var myDate = new Date();
-
- var year=myDate.getFullYear();
- var month=myDate.getMonth()+1;
- var day=myDate.getDate();
-
- switch(type) {
- case '/': return year+type+month+type+day;
- break;
- default :
- return year+'-'+month+'-'+day;
- }
- }