首页 > 其他分享 >使用 Tampermonkey5.1.1_0加自定义编写的js脚本实现自动填充表单

使用 Tampermonkey5.1.1_0加自定义编写的js脚本实现自动填充表单

时间:2024-08-27 19:16:12浏览次数:4  
标签:console 自定义 填充 表单 登录 js Tampermonkey5.1 log

最近有碰到要使用单点登录的需求,最开始是按照固定流程使用OAuth2.0或者jwt等技术
通过父子系统交互的方式实现单点登录。
缺点:代码繁琐,而且需要子系统配合提供单点登录接口,并且跳转时子系统需要携带其token等参数
优点:安全,通过系统交互的方式鉴权访问接口。

由于要集成的子系统很多,而且类似企业邮箱这种很少能提供标准的鉴权接口,所以便想了一个非常取巧的方式实现:
浏览器控制台可以执行js文件,例如console.log("xxx"),可不可以直接通过js获取表单元素直接填充登录账号和密码实现另类的单点登录?

找了半天发现浏览器扩展油猴脚本Tampermonkey可以解决这个问题,于是便有了这篇文章,使用Tampermonkey插件监听访问的网站,
用户通过访问url携带参数来交给油猴脚本(也就是js代码)截取,js代码中通过获取表单元素,然后填充截取的参数到表单,再给登录按钮一个
点击事件。完成

执行样例使用网易企业邮箱为例,示例图在文末,此处单独拉出js代码进行分析
文末提供油猴插件下载链接和js脚本链接,感兴趣的可以在浏览器安装扩展并使用此脚本自定义自己的填充策略。不止可以登录哦,表单元素获取填充还可以去除繁重的表单录入工作

 

 

 

 

 

 

脚本样例代码和油猴脚本插件,在浏览器安装扩展即可


js代码分析:其中@match是拦截所需要的请求网址,这里以网易企业邮箱为例,最后的访问路径为https://qy.163.com/login/?username=username.cn&password=password
// ==UserScript==
// @name Auto Fill Login with URL Params
// @namespace http://tampermonkey.net/
// @version 1.4
// @description 自动填充多个登录页面
// @AuThor You


// @match https://qy.163.com/login/*

// @grant none
// @run-at document-idle
// ==/UserScript==

(function() {
'use strict';

// 解析URL参数的函数
function getQueryParam(param) {
let url = window.location.search
if(url == '' && window.location.href.includes('#')){
let split = window.location.href.split('?')
if(split.length == 2){
url = '?' + split[1]
}
}
let urlParams = new URLSearchParams(url);
return urlParams.get(param);
}

// 强制页面滚动,触发懒加载
window.scrollTo(0, document.body.scrollHeight);

const username = getQueryParam('username');
const password = getQueryParam('password');

if (!username || !password) {
console.log('未找到参数!');
return;
}

const maxRetries = 10;
let retryCount = 0;

const intervalId = setInterval(function() {
let usernameField, passwordField, loginButton;

// 根据不同的URL匹配不同的元素
if (window.location.href.includes("https://qy.163.com/login/")) {
console.log('企业邮箱页面');
usernameField = document.querySelector('#accname');
passwordField = document.querySelector('#accpwd');
loginButton = document.querySelector('.w-button.w-button-account.js-loginbtn');
}

if (usernameField && passwordField) {
// 填充
usernameField.value = username;
usernameField.dispatchEvent(new Event('input', { bubbles: true }));

// 填充
passwordField.value = password;
passwordField.dispatchEvent(new Event('input', { bubbles: true }));

console.log('已填充');

// 如果需要自动点击登录按钮
if (loginButton) {
loginButton.click();
console.log('已点击');
}

// 清除定时器,停止继续查找
clearInterval(intervalId);
} else {
retryCount++;
console.log('等待表单加载...');
}

if (retryCount >= maxRetries) {
console.log('未能找到表单元素,停止尝试');
clearInterval(intervalId);
}
}, 1000); // 每隔 1000ms 尝试查找一次

})();

我用夸克网盘分享了「Desktop.zip」,点击链接即可保存。
链接:https://pan.quark.cn/s/88807341ef49
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/jiangnanggd/article/details/141608315

标签:console,自定义,填充,表单,登录,js,Tampermonkey5.1,log
From: https://www.cnblogs.com/jy6634/p/18383344

相关文章

  • 基于nodejs+vue北京冬奥会志愿者管理系统[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着2022年北京冬奥会的日益临近,志愿者作为赛事成功举办不可或缺的重要力量,其管理效率与服务质量直接关系到冬奥会的整体形象与国际影响力。传统的人工管理......
  • 基于nodejs+vue北朝艺术博物馆文物在线观赏系统[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着数字时代的到来,互联网技术的飞速发展正深刻改变着人们的生活方式与文化体验。北朝艺术,作为中国古代文化艺术的重要组成部分,其丰富的历史底蕴与艺术价值......
  • 基于nodejs+vue报刊杂志订阅系统[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,数字化阅读逐渐普及,但传统报刊杂志作为信息传播的重要载体,其订阅服务依然占据不可或缺的地位。特别是在学术、专业领域及特定兴趣群......
  • 基于nodejs+vue北京冬奥会志愿者管理系统[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着北京冬奥会的日益临近,作为全球瞩目的体育盛事,其成功举办不仅依赖于高水平的竞技比赛,更离不开一支高效、专业、热忱的志愿者队伍。志愿者作为连接赛事与......
  • JS基础: array 对象
    数组的属性有:length、constructor、prototype数组的方法有以下:filter:过滤筛选出符合条件的数组,filter不会改变原始数组。语法:arr.filter(function(currentValue,index,arr);constarr=[ {name:'hz',distance:95}, {name:'qz',distance:56}, {name:'nb',distanc......
  • [Jsprit]Jsprit学习笔记-一个简单的示例
    学习官网提供的例子示例代码publicclassSimpleExample{publicstaticvoidmain(String[]args){/**somepreparation-createoutputfolder */Filedir=newFile("output");//ifthedirectorydoesnotexist,......
  • 宠物医院管理效率低?Node.js+Vue技术助你提升系统性能
    博主介绍:✌十余年IT大项目实战经验、在某机构培训学员上千名、专注于本行业领域✌技术范围:Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫+大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战项目。主要内容:系统功能设计、开题报告......
  • js 封装日志上传模块,实现异常日志的上报
    封装定义日志上传模块,实现异常日志的上报,包含触发方式:1、主动调取方法上报2、覆盖原生console.error实现,收集所有console.error打印的日志3、window注册绑定error事件,触发 window.addEventListener('error',/***客户端日志上传模块,实现异常日志的上报*使用时在HTML......
  • 安装nvm,并通过nvm安装nodejs
    转载请注明出处:1.安装nvm打开终端,然后运行以下命令来下载并安装nvm:curl-o-https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh|bash              或者使用wget:wget-qO-https://raw.githubusercontent.com/nvm-......
  • .NET Core 处理 WebAPI JSON 返回烦人的null为空
    前言   项目开发中不管是前台还是后台都会遇到烦人的null,数据库表中字段允许空值,则代码实体类中对应的字段类型为可空类型Nullable<>,如int?,DateTime?,null值字段序列化返回的值都为null,前台对应字段赋值需要做null值判断,怎么才能全局把null替换为空。    本文分享Web......