遇到的以下问题,都已在脚本中解决:
- 获取到的元素赋值在页面显示,但是底层的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.obse