天河网站设计,wordpress文章形式图标,wordpress剧情网,龙书浩个人网站遇到的以下问题#xff0c;都已在脚本中解决#xff1a;
获取到的元素赋值在页面显示#xff0c;但是底层的value并没有改写#xff0c;导致请求就是获取不到数据元素的加载时机不定#xff0c;尤其是弱网情况下#xff0c;只靠延迟还是有可能获取不到#xff0c;且登陆…遇到的以下问题都已在脚本中解决
获取到的元素赋值在页面显示但是底层的value并没有改写导致请求就是获取不到数据元素的加载时机不定尤其是弱网情况下只靠延迟还是有可能获取不到且登陆不丝滑通过元素发现机制解决此问题并做到丝滑登陆根据密钥计算校验码之前做过本次引入了一个外部依赖默认的计算跟预期不一致卡了10分钟 参考资料入门篇 | 油猴开发指南 // UserScript
// name 阿里云自动登录
// namespace http://tampermonkey.net/
// version 0.1
// description 自动填写阿里云登录表单
// author 你
// match https://signin.aliyun.com/*.onaliyun.com/login.htm?callback*// grant GM_getResourceText
// resource user_info_url file://D:/temp/csdn/userinfo.json// /UserScript(function() {use strict;// 注意这里应该替换为你的实际用户名和密码var username 帐号; // 替换为你的用户名var password 密码; // 替换为你的密码var secretKey 填入密钥// 用户信息保存在本地let info_content GM_getResourceText(user_info_url);let user_info_json JSON.parse(info_content);var username user_info_json[username]var password user_info_json[password]// 用来计算双因子验证码 的密钥var secretKey user_info_json[secretKey]// 定义一个辅助函数来等待某个选择器对应的元素出现function waitForElement(inputSelect,tag, callback) {const observer new MutationObserver((mutations) {var ele_input document.querySelector(inputSelect);var but_next document.querySelector(.next-btn.next-large.next-btn-primary)// 判断所有想到的元素都已加载完成才进行数据改写if (ele_input but_next.innerText tag) {observer.disconnect();callback(ele_input,tag);}});observer.observe(document.body, { childList: true, subtree: true });}// 对元素进行赋值function freshReactValue(input){const evt new Event(change);// 对其进行事件触发input.dispatchEvent(evt);// 获取元素的所有键名并通过find函数进行查找// find函数会根据传入的函数进行判断返回正确的值// 而我们的函数是判断前缀是否是__reactEventHandlersconst prop Object.keys(input).find((p) p.startsWith(__reactEventHandlers));// 获取到对应键名的对象得到该对象的onchange函数并且传入eventinput[prop].onChange(evt);}window.addEventListener(load, () {// 用户名登陆m,waitForElement(#loginName,下一步, (loginInput,tag) {loginInput.value username;console.error(username)// 刷新freshReactValue(loginInput);// 点击下一步var but_pass document.querySelector(.next-btn.next-large.next-btn-primary)but_pass.click();});// 密码登陆waitForElement(#loginPassword,登录, (passInput,tag) {passInput.value password;// 刷新freshReactValue(passInput);// 点击下一步var but_pass document.querySelector(.next-btn.next-large.next-btn-primary)but_pass.click();});// 双因子验证码waitForElement(.next-input.next-medium input[placeholder请输入 6 位数字安全码],提交验证, (secr_input,tag) {// 计算验证码const secret GenerateTOTP(secretKey);secr_input.value secret;// 刷新freshReactValue(secr_input);// 点击下一步var but_pass document.querySelector(.next-btn.next-large.next-btn-primary)but_pass.click();});});// 双因子计算原始库也可以使用远程引用 但是想着使用的文件不大就直接放进来 了use strict;var sjcl{cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function(a){this.toStringfunction(){returnCORRUPT: this.message};this.messagea},invalid:function(a){this.toStringfunction(){returnINVALID: this.message};this.messagea},bug:function(a){this.toStringfunction(){returnBUG: this.message};this.messagea},notReady:function(a){this.toStringfunction(){returnNOT READY: this.message};this.messagea}}};undefined!typeof modulemodule.exports(module.exportssjcl);sjcl.bitArray{bitSlice:function(a,b,c){asjcl.bitArray.g(a.slice(b/32),32-(b31)).slice(1);return void 0c?a:sjcl.bitArray.clamp(a,c-b)},extract:function(a,b,c){var dMath.floor(-b-c31);return((bc-1^b)-32?a[b/32|0]32-d^a[b/321|0]d:a[b/32|0]d)(1c)-1},concat:function(a,b){if(0a.length||0b.length)return a.concat(b);var ca[a.length-1],dsjcl.bitArray.getPartial(c);return 32d?a.concat(b):sjcl.bitArray.g(b,d,c|0,a.slice(0,a.length-1))},bitLength:function(a){var ba.length;return 0b?0:32*(b-1)sjcl.bitArray.getPartial(a[b-1])},clamp:function(a,b){if(32*a.lengthb)return a;aa.slice(0,Math.ceil(b/32));var ca.length;b31;0cb(a[c-1]sjcl.bitArray.partial(b,a[c-1]2147483648b-1,1));return a},partial:function(a,b,c){return 32a?b:(c?b|0:b32-a)0x10000000000*a},getPartial:function(a){return Math.round(a/0x10000000000)||32},equal:function(a,b){if(sjcl.bitArray.bitLength(a)!sjcl.bitArray.bitLength(b))return!1;var c0,d;for(d0;da.length;d)c|a[d]^b[d];return 0c},g:function(a,b,c,d){var e;e0;for(void 0d(d[]);32b;b-32)d.push(c),c0;if(0b)return d.concat(a);for(e0;ea.length;e)d.push(c|a[e]b),ca[e]32-b;ea.length?a[a.length-1]:0;asjcl.bitArray.getPartial(e);d.push(sjcl.bitArray.partial(ba31,32ba?c:d.pop(),1));return d},j:function(a,b){return[a[0]^b[0],a[1]^b[1],a[2]^b[2],a[3]^b[3]]}};sjcl.codec.base32{e:ABCDEFGHIJKLMNOPQRSTUVWXYZ234567,fromBits:function(a,b){var c,d,e0,gsjcl.codec.base32.e,f0,ksjcl.bitArray.bitLength(a);for(d0;5*c.lengthk;)cg.charAt((f^a[d]e)27),5e?(fa[d]5-e,e27,d):(f5,e-5);for(;c.length5!b;)c;return c},toBits:function(a){aa.replace(/\s|/g,).toUpperCase();var b[],c,d0,esjcl.codec.base32.e,g0,f;for(c0;ca.length;c){fe.indexOf(a.charAt(c));if(0f)throw new sjcl.exception.invalid(this isnt base32!);27d?(d-
27,b.push(g^fd),gf32-d):(d5,g^f32-d)}d56b.push(sjcl.bitArray.partial(d56,g,1));return b}};sjcl.hash.sha1function(a){a?(this.da.d.slice(0),this.ba.b.slice(0),this.aa.a):this.reset()};sjcl.hash.sha1.hashfunction(a){return(new sjcl.hash.sha1).update(a).finalize()};sjcl.hash.sha1.prototype{blockSize:512,reset:function(){this.dthis.h.slice(0);this.b[];this.a0;return this},update:function(a){stringtypeof a(asjcl.codec.utf8String.toBits(a));var b,cthis.bsjcl.bitArray.concat(this.b,a);bthis.a;athis.absjcl.bitArray.bitLength(a);for(bthis.blockSizeb-this.blockSize;ba;bthis.blockSize)n(this,c.splice(0,16));return this},finalize:function(){var a,bthis.b,cthis.d,bsjcl.bitArray.concat(b,[sjcl.bitArray.partial(1,1)]);for(ab.length2;a15;a)b.push(0);
b.push(Math.floor(this.a/0x100000000));for(b.push(this.a|0);b.length;)n(this,b.splice(0,16));this.reset();return c},h:[1732584193,4023233417,2562383102,271733878,3285377520],i:[1518500249,1859775393,2400959708,3395469782]};function n(a,b){var c,d,e,g,f,k,m,lb.slice(0),ha.d;eh[0];gh[1];fh[2];kh[3];mh[4];for(c0;79c;c)16c(l[c](l[c-3]^l[c-8]^l[c-14]^l[c-16])1|(l[c-3]^l[c-8]^l[c-14]^l[c-16])31),d19c?gf|~gk:39c?g^f^k:59c?gf|gk|fk:79c?g^f^k:void 0,d(e5|e27)dml[c]a.i[Math.floor(c/20)]|0,mk,kf,fg30|g2,ge,ed;h[0]h[0]e|0;h[1]h[1]g|0;h[2]h[2]f|0;h[3]h[3]k|0;h[4]h[4]m|0}sjcl.misc.hmacfunction(a,b){this.fbb||sjcl.hash.sha256;var c[[],[]],d,eb.prototype.blockSize/32;this.c[new b,new b];a.lengthe(ab.hash(a));for(d0;de;d)c[0][d]a[d]^909522486,c[1][d]a[d]^1549556828;this.c[0].update(c[0]);this.c[1].update(c[1])};sjcl.misc.hmac.prototype.encryptsjcl.misc.hmac.prototype.macfunction(a){a(new this.f(this.c[0])).update(a).finalize();return(new this.f(this.c[1])).update(a).finalize()};function HOTP(K, C){var key sjcl.codec.base32.toBits(K);// Count is 64 bits long. Note that JavaScript bitwise operations make// the MSB effectively 0 in this case.var count [((C 0xffffffff00000000) 32), C 0xffffffff];var otplength 6;var hmacsha1 new sjcl.misc.hmac(key, sjcl.hash.sha1);var code hmacsha1.encrypt(count);var offset sjcl.bitArray.extract(code, 152, 8) 0x0f;var startBits offset * 8;var endBits startBits 4 * 8;var slice sjcl.bitArray.bitSlice(code, startBits, endBits);var dbc1 slice[0];var dbc2 dbc1 0x7fffffff;var otp dbc2 % Math.pow(10, otplength);var result otp.toString();while (result.length otplength){result 0 result;}return result}// 计算双因子function GenerateTOTP(secret) {var ctime Math.floor((new Date() - 0) / 30000);var code HOTP(secret, ctime);return code;}})();