第二个脚本——自动登录学习通

news2024/12/29 3:02:31

目录

本篇主要内容:

详细步骤:

第一步:对登入页面进行分析

第二步:模拟点击,表单填写和多边框操作原理介绍

模拟点击

表单填写

操作多选框:

第三步,实现自动登录

完整代码:


本篇主要内容:

本篇主要是自动填写账号密码,自动点击登入

详细步骤:

第一步:对登入页面进行分析

首先将鼠标放置上图红框处,右键——检查/审查元素

我们可以在右边页面找到,账号处的 id 或 name 元素的名称(此页面没有name元素,只有id为phone),接下来我们需要这些来填充账号

同理,我们可以得到相应的密码对应元素名称(id为pwd)以及登入键对应的元素名称(id为loginBtn)

到这里我们就得到了所有需要的元素了,接下来就是填充和模拟点击

第二步:模拟点击,表单填写和多边框操作原理介绍

模拟点击

方法一:直接点击

HTML中的直接点击,但是局限性很大,也不常用,就不做过多介绍了

方法二:js监听

首先,我们可以用”document.querySelector”找到XXX元素,然后执行点击(最推荐)

其次,我们也可以用jQuery,document.getElementByXXX之类的方法,只要能够找到并操作DOM元素就行了

接下来我们对上面的登入键进行一下模拟点击:

var loginBtn=document.querySelector('#loginBtn');
loginBtn.click();

还可以写成:注意单双引号哦!!

var loginBtn=document.querySelector('[id="loginBtn"]');
loginBtn.click();

还可以简单写成:

document.querySelector('#loginBtn').click();

document.querySelector('[id="loginBtn"]').click();

表单填写

关于表单填写也就是form,我们需要自动化的实现在input,checkbox,select等元素中填写或者选择我们希望的内容,例如自动选择正确答案和自动填写账号.其实也很简单,我们只需要使用querySelector查到我们想操作的元素就行了.
例如我想输入上方对应的账号: 

var input=document.querySelector('#phone');
input.value="XXXX";
//此处的XXXX表示你要输入的账号

简单写就是:

document.querySelector('#phone').value="XXXX";
//此处的XXXX表示你要输入的账号

操作多选框:

操作框在这里没有用到,就不作过多介绍了,以后再详解

此处的意思是,勾选自动登入,但我们没有没有用到。。。

var checkbox=document.querySelector('#checkbox');
checkbox.checked=true;

第三步,实现自动登录

首先,我们需要判断是否已登录

在这里用的是通过编辑框判断是否是登陆状态(方法不唯一)

在这里,我们通过判断账号框是否存在(不存在=null)来判断。可以看见它有一个id和一些其它信息,id一般是这个页面唯一的,那么我们可以直接使用id来查询它,来看看它在不在这个页面上,在就表示没有登录。

如代码:

if(document.querySelector("#phone")==null){
//没有找到表示登录了,不再执行后续代码
return;
}
//未登录,执行登录代码

其次,就是对账号密码等信息进行填充,如有自动登入选项可以进行勾选

document.querySelector("#phone").value="账号";
document.querySelector("#pwd").value="pwd";
//document.querySelector("#自动登录选项框的id").checked=true;

最后,模拟点击登录按钮

document.querySelector("loginBtn").click();

如果没有遇到没有登录元素对应的id,不要慌,我们可以通过它的上级class和type等信息来定位:

此时代码如下:

document.querySelector(".btns-box button").click();

但到这里还没有完,有时编辑框加载过慢,编辑框加载出来前,我们的代码已经运行完了,此时因代码运行过快而没有达到要求,此时需要使用延迟函数,将代码运行时间延后一下就可以了,当然,不同的页面可以加载时间也不同,在这里我们用2—3秒就可以了

所用到的延迟方法为:Window setTimeout() 方法

setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。

提示: 1000 毫秒= 1 秒。

提示: 如果你只想重复执行可以使用 setInterval() 方法。

提示: 使用 clearTimeout() 方法来阻止函数的执行。

如:

3 秒(3000 毫秒)后弹出 "Hello" :

setTimeout(function(){ alert("Hello"); }, 3000);

完整代码:

// ==UserScript==
// @name         自动登录学习通0.1
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        http://passport2.chaoxing.com/*
// @icon         none
// @grant        none
// ==/UserScript==

let time=setInterval(()=>{
    if(document.querySelector('[id="phone"]')!==null){
            clearInterval(time)
    }
    if(document.querySelector('[id="phone"]')==null){
        return
    }
    document.querySelector('[id="phone"]').value='17832730227'
    document.querySelector('[id="pwd"]').value='zyj520..'
    document.querySelector('[id="loginBtn"]').click()
    clearInterval(time)
},3000
)

// ==UserScript==
// @name         自动登录学习通
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        http://passport2.chaoxing.com/*
// @icon         none
// @grant        none
// ==/UserScript==

window.addEventListener("load", function(event) {
    console.log(document.querySelector("#phone"));
    setTimeout(function(){//2s后再进行登录
        if(document.querySelector("#phone")==null){
            //没有找到表示登录了,不再执行后续代码
            return;
        }
        //未登录,执行登录代码
        document.querySelector('#phone').value='XXXX';
        document.querySelector("#pwd").value='XXXX';
        document.querySelector('#loginBtn').click();
    },3000);
});

本次就到这里了,有不对的请大家见谅,并及时留言,我及时改正,谢谢大家!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/126526.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

日百万流量网站励志一生被K

我是卢松松,点点上面的头像,欢迎关注我哦! 曾经每天小百万IP的网站、Z-blog流量最大的网址之一,励志一生这两周被百度K了,流量瞬间没有了,联盟广告收入估计日落千丈。这个网站有多牛可能很多人不清楚&#…

Linux内存管理:NUMA技术详解(非一致内存访问架构)

一.背景 所谓物理内存,就是安装在机器上的,实打实的内存设备(不包括硬件cache),被CPU通过总线访问。在多核系统中,如果物理内存对所有CPU来说没有区别,每个CPU访问内存的方式也一样&#xff0c…

基于springboot+jpa 实现多租户动态切换多数据源 - 使用Flyway实现多数据源数据库脚本管理和迭代更新

多租户动态多数据源系列 1、基于springbootjpa 实现多租户动态切换多数据源 - 数据隔离方案选择分库还是分表 2、基于springbootjpa 实现多租户动态切换多数据源 - 基于dynamic-datasource实现多租户动态切换数据源 3、基于springbootjpa 实现多租户动态切换多数据源 - 使用Fl…

Kafka Producer Acks机制

Kafka Producer Acks 设置ACK props.put("acks", "all");通过上述代码,配置kafka生产者发送消息后,是否等待Broker的回执信息。在集群环境下,该配置是kafka保证数据不丢的重要的参数之一,今天来学习一下&…

深入理解Elasticsearch分片

了解分片的基本原理,对Elasticsearch性能调优有帮助。 关系梳理 ES底层使用的是Lucene库,ES的分片(shard )是Lucene的索引,ES的索引是分片的集合,Lucene的索引是由多个段(segment)…

青岛OJ如何导入题库详细图示

打开你的后台管理 找到问题位置 增加题目是可以编辑题目,导入数据。 导入导出是用题目和数据直接导入的。 这个ID的话就是题目ID不能设置一样的 然后题目输入输出就都不说了 按照格式就可以了,这里说一下Tag是标签,每次都要设置&#xff…

shell-条件测试

1、编写一个 Shell脚本,程序执行时从键盘读入一个目录名,如果用户输入的目录不存在,则提示file does not exist;如果用户输入的不是目录则提示用户必须输入目录名;如果用户输入的是目录则显示这个目录下所有文件的信息…

小程序版 Three.js 框架下载及目录配置

1.库文件说明 由于微信官方提供的threejs适配库已经很久没有更新,而且开发者普遍反映使用起来很难用。 我这里分享的是独立的库文件,不需要npm安装,下载后将库文件放到项目中即可使用。 2.下载后的压缩包文件 3.解压后的文件夹结构 4.文件…

Vue2和Vue3的双向数据绑定原理

目录前言:vue2.x 是如何实现响应式系统的:defineProperty 的痛点:Object.defineProperty 代码的使用Proxy 方法的理解Proxy 代码的使用:总结:前言: 今天小编给大家讲解一下,Vue2和Vue3的双向数据…

CAPL学习之路-测试功能集函数(诊断测试)

TestCollectDiagEcuInformation 向诊断目标的诊断类下的所有诊断服务发送诊断请求,并将诊断响应写入测试报告中 testcase TCExample() {int status;status = TestCollectDiagEcuInformation( "Door", "Sessions");if( status == 0)TestStepPass( "EC…

javaweb项目接入CAS单点认证(含自身系统的三员过滤)

一、搭建cas server 1.下载war包 2.打开cmd窗口执行以下命令,命令如下(指定ip): keytool -genkey -v -alias casbm -keyalg RSA -keystore D:\cas\keystore\casbm.keystore -ext SANIP:192.168.2.166 3.我们生成秘钥库后需要从秘钥库中导出证书&#x…

D. Distinct Characters Queries(set维护)

Problem - 1234D - Codeforces 给你一个由小写拉丁字母组成的字符串s和对这个字符串的q个查询。 回顾一下,字符串s的子串s[l;r]就是字符串slsl1...sr。例如,"codeforces "的子串是 "code"、"force"、"f"、&quo…

spring6(概念;ioc详解,各种数据的注入方式)

第一章 启示录 一个普通的三层架构,不借助spring的情况下。需要程序员自己去new对象。 如果使用这种方式,那么代码上就把功能写死了,这时候需要更改一个数据库连接。这是时候数据交互层的代码就需要修改。这违背了OCP开闭原则。 1.1 OCP开闭…

Bert 得到中文词向量

通过bert中文预训练模型得到中文词向量和句向量,步骤如下: 下载 bert-base-chiese模型 只需下载以下三个文件,然后放到bert-base-chinese命名的文件夹中 得到中文词向量的代码如下 import torch from transformers import BertTokenizer,…

can8.0-基础知识

1、canopen协议概述 1.1对象字典 CANopen 协议采用了带有 16 位索引和 8 位子索引的对象字典,对象字典的结构如表 1.2 常用的通信对象 1) 网络管理对象 (NMT) 2) 服务数据对象 (SDO) 3) 过程数据对象 (PDO) 4) 同步对象 (SYNC) 5) 紧急报文 (EMCY) 1.3 通信对象…

PISR 数据库,区块链和大数据的下一个最佳结合

据集合。如今,在大数据时代,数据管理越来越受到重视,已经成为一项非常重要的资产。因此,数据安全也变得越来越重要,应该引起重视。尽管现有数据库可以满足单个公司的存储依赖性,但它们很难确保公司之间协作…

React学习03-基于脚手架的React应用

初始化脚手架 使用 npx 创建 npx create-react-app 项目名使用 npm install 创建 全局安装create-react-app包: npm install -g create-react-app创建脚手架: create-react-app 项目名npm 镜像 执行 create-react-app时,还会自动安装一…

C++程序员学习资料汇总

小白入门 计算机网络微课堂(有字幕无背景音乐版) 非常适合小白学习,没有废话,非常生动 《计算机是怎样跑起来的》 《程序是怎样跑起来的》 《网络是怎样连接的》 基础 资料名备注状态阅读时间《深入理解计算机系统》很多大厂面…

实验室预约系统|基于Springboot+Vue实现学校实验室预约管理系统

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

JAVA中那些令人眼花缭乱的锁

一、开局一张图带你了解java相关的锁 二、乐观锁和悲观锁 1、悲观锁 悲观锁对应于生活中悲观的人,悲观的人总是想着事情往坏的方向发展。 举个生活中的例子,假设厕所只有一个坑位了,悲观锁上厕所会第一时间把门反锁上,这样其他…