WordPress 系博客验证码 自动填表

支持“胡萝卜周”、“殁漂遥”、“独孤求软”、“蓝点网”,理论上是支持 WordPress 模板的网站,但是需要自行添加 include

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name           WordPress 系博客验证码 自动填表
// @author          极品小猫
// @version         1.2.4
// @description      支持“胡萝卜周”、“殁漂遥”、“独孤求软”、“蓝点网”,理论上是支持 WordPress 模板的网站,但是需要自行添加 include
// @namespace        https://greasyfork.org/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;
    }
}