Greasy Fork镜像 支持简体中文。

通途

西南交通大学(swjtu)教务网验证码识别

目前為 2020-03-23 提交的版本,檢視 最新版本

// ==UserScript==
// @name         通途
// @namespace    http://tampermonkey.net/
// @version      2.2
// @description  西南交通大学(swjtu)教务网验证码识别
// @author       kaka
// @match        http://jwc.swjtu.edu.cn/service/login.html
// @match        http://jwc.swjtu.edu.cn/vatuu/YouthIndexAction?setAction=index
// @connect      aip.baidubce.com
// @connect      localhost
// @grant        unsafewindow
// @grant        GM_xmlhttpRequest
// @grant        GM_getValue
// @grant        GM_setValue
// @run-at       document-start
// ==/UserScript==
(function() {
    'use strict';
    let setting = {
        ran_img : document.querySelector("#randomPhoto > img"), //验证码图片元素
        ran_img_url:'http://jwc.swjtu.edu.cn/vatuu/GetRandomNumberToJPEG?test='+new Date().getTime(),//验证码图片请求url
        ran_text : document.getElementById('ranstring'),//验证码填写元素
        other_data:['document.querySelector("#password")',//其它必填项#######################自动处理,下次跟新再说(逃
                    'document.querySelector("#username")'],//必须是字符串,目前想不到更好的解决办法
        submit:document.querySelector("#submit2"),//登陆按钮

        err_total:5, //各环节允许最大错误
        apis:[['iKGARn6BhGgU82W9xzLUIatb','hES0Zae2iLdP1iotenC8zlGo9qA3r0Hc'],
              ['UjcQzcjSpyYGrXKyPy3dBdoW','65GqKnF5jH3QR9ZEIr8j1ppKWuDRLgI7'],
              ['Vt2YOiA6CZTnnpaZCEHLTTl6','LIeZdRFmg8odzPCLR8yPPdNeZDKA7yWM'],
              ['xCEG3OUq0mKzIThFiGPh9AES','mpCK1RI4sFIkX79QDDy6qO2GmCCGC6TS']],
    }




    function autologin(){
        if(other_data_done()){//其它信息也填了就登陆
            setting.submit.click();

        }

    }
    function enter_login(){
        document.onkeydown = function(ev){
            var e = ev || event;
            if(e.keyCode ==13){
                setting.submit.click();
            }
        }}
    function other_data_done(){
        if(eval(setting.other_data.join('.value&&')+'.value')){return true}
    }

    function get_random_img(callback){
        let httpRequest = new XMLHttpRequest();
        httpRequest.open('GET',setting.ran_img_url, true);
        httpRequest.responseType = 'blob';
        httpRequest.send();
        /**
         * 获取图片后进行base64编码
         */
        httpRequest.onreadystatechange = function () {
            if (httpRequest.readyState == 4 && httpRequest.status == 200) {
                let img = httpRequest.response;
                var reader = new FileReader();
                reader.readAsDataURL(img);
                reader.onload = function (e) {
                    setting.ran_img.src = e.target.result;
                    // console.log("!!!!!!!!!!!!!")
                    // console.log(ran_img.src);
                    let bs64_str_temp = e.target.result;
                    let bs64_str = bs64_str_temp.split(",")[1];
                    callback(bs64_str);
                }
            };
        };
    }
    function get_access_url(){
        let randomapi = setting.apis[setting.ran_api_num];
        return 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id='+randomapi[0]+'&client_secret='+randomapi[1]
    }

    function setCookie(cname, cvalue, exp) {
        var d = new Date();
        d.setTime(d.getTime() + (exp*1000)-5000);
        var expires = "expires="+d.toUTCString();
        document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
    }

    function getCookie(cname) {
        var name = cname + "=";
        var ca = document.cookie.split(';');
        for(var i = 0; i < ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0) == ' ') {
                c = c.substring(1);
            }
            if (c.indexOf(name)  == 0) {
                return c.substring(name.length, c.length);
            }
        }
        return "";
    }

    function get_access(){
        let access_token = getCookie("access_token_"+setting.ran_api_num);
        if (access_token != "") {//access未过期
            setting.access_token =access_token
        } else {
            try{
                GM_xmlhttpRequest({
                    method: "GET",
                    url:get_access_url(),
                    onload: function(response) {
                        let access_token =JSON.parse(this.responseText)["access_token"];
                        let expires =JSON.parse(this.responseText)["expires_in"];
                        setCookie("access_token_"+setting.ran_api_num, access_token, expires);
                        setting.access_token = access_token
                    }
                })
            }
            catch(err){
                //console.log('获取access_token失败');

                if( err_access_num<=setting.err_total){
                    err_access_num+=1;
                    get_access()
                }else{
                    setting.ran_text.placeholder = '失败,请自行输入';
                    debugger;
                }
            }
        }

    }
    function get_str(bs64_str){

        let request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/webimage";
        request_url = request_url + "?access_token=" + setting.access_token;
        let data = 'image='+encodeURIComponent(bs64_str);
        //alert(encodeURIComponent(bs64_str));
        GM_xmlhttpRequest({
            method: 'POST',
            url: request_url,
            data: data,
            headers: {
                'charset': 'UTF-8',
                "Content-Type": "text/plain"
            },
            onload: function(response) {
                // console.log("baidu_response");
                //console.log(response.responseText)
                try{
                    let temp =  JSON.parse(response.responseText);
                    let rand_str = temp['words_result'][0]['words'];
                    if(rand_str.length == 4){
                        setting.ran_text.value = rand_str; //填写验证码
                        if(other_data_done()){//其它信息也填了就登陆
                            setting.submit.click();
                        }
                    }else{  //重来
                        throw "解析失败";
                    }
                }
                catch(err){
                   // console.log(err);
                    if(err_num<=setting.err_total){
                        err_num+=1;
                        //console.log(err_num)
                        setting.ran_text.placeholder = '失败,重试中...';
                        get_random_img(function( bs64_str){
                            get_str(bs64_str)
                        });
                    }else{
                        setting.ran_text.placeholder = '失败,请自行输入';
                        return;
                    }
                }
            }
        })
    }


    //let bs64_str ;
    let err_num = 1;
    let err_access_num = 1;
    setting.ran_api_num = Math.floor(Math.random() * setting.apis.length)
    enter_login();
    setting.ran_text.placeholder = '尝试获取验证码中';
    get_random_img(function( bs64_str){
        get_access();
        get_str(bs64_str)
    });
    //setInterval(autologin,3000)
    autologin();//针对浏览器预先填写的用户

})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址