// ==UserScript== // @name 古诗文网自动填充验证码 // @namespace https://github.com/waahah/ // @version 0.2.4 // @description 自动识别填充验证码以及账号信息并登录,不需要到代码中修改账号,登陆一次之后就会自动登录 // @author waahah // @license Apache License 2.0 // @require https://unpkg.com/tesseract.js@2.1.4/dist/tesseract.min.js // @match *://so.gushiwen.cn/user/login.aspx* // @icon data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3Cpath d='M15 3h6v5h-2V5h-4V3zM9 3v2H5v3H3V3h6zm6 18v-2h4v-3h2v5h-6zm-6 0H3v-5h2v3h4v2zM3 11h18v2H3v-2z'/%3E%3C/svg%3E // @grant unsafeWindow // @grant GM_registerMenuCommand // ==/UserScript== (function () { 'use strict'; class Sleep { constructor(timeout) { this.timeout = timeout; } then(resolve, reject) { const startTime = Date.now(); setTimeout( () => resolve(Date.now() - startTime), this.timeout ); } } let name, pwd, valName, valPwd; const host_name = `${location.host}_nmae`; const host_pwd = `${location.host}_pwd`; //存放自己写好的工具类方法的对象 const utils = { async get_utils () { valName = localStorage.getItem(host_name); valPwd = localStorage.getItem(host_pwd); return this.get_utils; }, set_utils: async () => { window.localStorage.setItem(host_name, name); window.localStorage.setItem(host_pwd, pwd); } }; utils.del_utils = async () => { if (window.localStorage.getItem(host_name) !== null) { window.localStorage.removeItem(host_name); } if (window.localStorage.getItem(host_pwd) !== null) { window.localStorage.removeItem(host_pwd); } } GM_registerMenuCommand("删除保存在本地的账号密码", utils.del_utils); utils.get_utils(); if (valName == undefined && valPwd == undefined) { name = prompt('第一次需输入邮箱/手机号:', ''); pwd = prompt('第一次需输入密码:', ''); utils.set_utils(); utils.get_utils(); console.log(localStorage); } const account = document.querySelector('#email'); const password = document.querySelector('#pwd'); const core = document.querySelector('#code'); const randcode = document.querySelector('#imgCode'); const submit = document.querySelector('#denglu'); const emailNo = document.getElementById('emailNo').style.display; const pwdNo = document.getElementById('pwdNo').style.display; const login = async () => { $("#leftLogin").fadeOut("slow");//立即停止显示微信扫码登录 clearInterval(intervalErweima); if (account.value == '邮箱 / 手机号' && password.value == '') { //onEmial();//消除提示 account.value = valName; //onPwd();消除提示 password.value = valPwd; } else if (zhanghao.value !== valName || password.value !== valPwd) { zhanghao.value = valName; password.value = valPwd; } return new Promise(resolve => { console.log('开始尝试登录...'); }) } const security = async () => { //GetCodeImg(); const exampleImage = "/RandCode.ashx"; console.log(`exampleImage:${exampleImage}`); const worker = Tesseract.createWorker({ logger: m => console.log(m) }); Tesseract.setLogging(true); work(); async function work() { await worker.load(); await worker.loadLanguage('eng'); await worker.initialize('eng'); let result = await worker.recognize(exampleImage); console.log(result.data); console.log(`识别成功率:${result.data.confidence}`); await worker.terminate(); core.value = result.data.text; if (emailNo == 'none' && pwdNo == 'none' && result.data.confidence > 50) { submit.click(); } if (result.data.confidence < 60) { (async () => GetCodeImg()) ().then( async () => { await new Sleep(500); await security(); } ); } } } window.onload = async () => { await login().then( async () => { await security(); }, err => { console.log(err); } ); } })();