JwinfoAutomationLogin

Automaticly complete Verification code in ZJU jwinfobsys .

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey, Greasemonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्क्रिप्ट व्यवस्थापक एक्स्टेंशन इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्क्रिप्ट व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्टाईल व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

// ==UserScript==
// @name         JwinfoAutomationLogin
// @namespace    https://github.com/6769/m14kabing
// @version      1.0.1
// @description  Automaticly complete Verification code in ZJU jwinfobsys .
// @author       5pipi
// @match        http://10.202.78.11/default2.aspx
// @match        http://jwbinfosys.zju.edu.cn/default2.aspx
// @grant        none
// @license      GPL version 3
// @encoding     utf-8
// @usage		 In StudentID,change a dozen zeros to your id,and the password.The service site ,I provide an available one use Niginx+uWSGI+Flask on linux.
// ==/UserScript==
'use strict';
var StudentID="0000000000";//Your StudentsID;

var PassworD="";//Your password of the site,if you don't like to fill here,keep[ "" ];


var StudentBox="TextBox1";
var PassworDBox="TextBox2";
var VerifyCodeBox="Textbox3";
var ErrorCode="0";
var RegularExpress="\\d{5}";

var Debug=0;//1 === Debug;	0 === Release;
var StringOfImage;
var Host="http://api.5pipi.tk/api/zjuocr";


//environment initialized;
function DebugSwitch(booleanvalue){
    if(!booleanvalue){
        console.log=function(){
            //pass
        };
    }
}
function inputVerifyCode (jsonobject_str) {
	var number ;

	number= eval("("+jsonobject_str+")")['verify']


	//optional choice.
	number.replace(/B/g,'8');
	//try to fix OCR's limited point when using in reality.Api return "verify": "70B41" .
    var number_confirm=new RegExp(RegularExpress);
    var number_int;
    if (number.length===5 && typeof(number)==='string') 
        if(number=number.match(number_confirm)){
            //regular express;
            number_int=parseInt(number);
            document.getElementById(VerifyCodeBox).value=number;
        }
    else{
        document.getElementById(VerifyCodeBox).value=ErrorCode;
    }
    else{
        document.getElementById(VerifyCodeBox).value=ErrorCode;
    }






}

//use VerifyCodeImage;
function getBase64Image(img) {
    // Create an empty canvas element
    var canvas = document.createElement("canvas");
    // canvas.width = img.width-5;//60*22,actually 65*24
    // canvas.height = img.height-2;
    canvas.width =img.naturalWidth;
    canvas.height =img.naturalHeight;
    // Copy the image contents to the canvas
    var ctx = canvas.getContext("2d");
    ctx.drawImage(img, 0, 0);
    //another problem will happened if img hasn't loaded over.->get broken picture.

    // Get the data-URL formatted image
    // Firefox supports PNG and JPEG. You could check img.src to
    // guess the original format, but be aware the using "image/jpg"
    // will re-encode the image.
    var dataURL = canvas.toDataURL("image/png");


    //debugtest
    console.log(dataURL);
    //window.open(dataURL);

    //Bug_0
    //during most periods,Base64code presents well ,Howerver,B64String length become very short,
    //It's happens 5/20;
    var pure_b64string=dataURL.replace("data:image/png;base64,",'');
    var urlsafe_pure_b64string=pure_b64string.replace(/\+/g,'-');
    return urlsafe_pure_b64string.replace(/\//g ,'_');
}

function httpGetAsync(theUrl, callback)
{
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.onreadystatechange = function() { 
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
        {
            console.log(xmlHttp.responseText);
            callback(xmlHttp.responseText);}
    }
    console.log(theUrl);
    xmlHttp.open("GET", theUrl, true); // true for asynchronous 
    xmlHttp.send(null);
}



function maintask ( ) {
    var b64string;
    var img;
    DebugSwitch(Debug);

    //convertImage->string
    img=document.getElementsByTagName('img')[0];
    
    img.onload = function() {
    // when image is loaded...
    console.log(getBase64Image(img));
    b64string=getBase64Image(img);
    //
    StringOfImage=Host+"?img="+b64string;


    httpGetAsync(StringOfImage,inputVerifyCode);

    document.getElementById(StudentBox).value=StudentID;
    document.getElementById(PassworDBox).value=PassworD;
	};

}

maintask();

/*Thanks to 
http://stackoverflow.com/questions/934012/get-image-data-in-javascript
http://stackoverflow.com/questions/23493147/error-when-converting-image-to-base64

*/