selenium模拟登陆教务系统

之前学习了selenium的安装和上手,现在来一次模拟登陆教务系统。有基础的同学可以直接拿走代码,去写抢课的脚本,但是估计效果不会蛮好。登陆页面如下
在这里插入图片描述

解除右键禁用

当然在此之前因为这个教务系统网站不能右键检查元素,所以我们用之前学的方法解除右键禁用

定位元素

在这里插入图片描述

首先检查元素发现这个登陆页面是作为一个iframe嵌在主页面中的,所以要想用selenium定位到这个登陆页面的元素的话,得先定位到iframe中

window.switch_to.frame('frm_login')	

之后就是常规的获取元素,但是这里有个坑,就是在密码处有两个input,有一个是假的,最后会hidden,所以一开始我用这个假的填写密码就一直显示账号或者密码错误。直到我亲自模拟了一遍登录操作后才发现,一开始input1会隐藏,但是当鼠标点击密码框时,input2隐藏,input1就会出现了。所以真正充当密码框的是input1.下次模拟登陆时遇到两个input时最好模拟登陆一下看看这两个input的作用到底是什么
在这里插入图片描述

验证码处理

这个网站的验证码要先点击文本框,图片才能动态加载出来,而selenium可以很好地解决动态加载,这里的大致思路就是用截图获取验证码的图像,再交给超级鹰进行打码即可(当然超级鹰平台的使用我还没讲,之后基本操作我会发在我的博客里的。)。其实还是挺简单的。但是一开始我的思路错了,想着用requests获取图像,再打码。但是最后总是显示验证码不对。原因是因为用selenium已经请求过一次网站了,最后又用requests请求一次,必然会导致局部刷新,使获得的验证码与最后登录的验证码不匹配。当然如果是单纯的用requests的话,可以直接利用session,但是selenium我不知道如何使用,所以还是利用截图的方法吧,而操作起来发现截图好像更方便一点

弹窗处理

在这里插入图片描述

最后测试的时候发现可能会出现用户重复登录的情况,从而出现上面的弹窗,而这种一个按钮的属于alert弹出框,selenium中也有解决办法:

window.switch_to.alert.accept()		#确认弹窗

最后把代码给一下(想看到浏览器操作过程的话就把无头浏览器那两行代码注掉):

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from lxml import etree
import time
from chaojiying import Chaojiying_Client		#导入超级鹰打码
from selenium.webdriver.chrome.options import Options

#防止证书报错
options = webdriver.ChromeOptions()
options.add_argument('-ignore-certificate-errors')
options.add_argument('-ignore -ssl-errors')
#无头浏览器
options.add_argument('--headless')
options.add_argument('--disable-gpu')

s = Service(executable_path='./chromedriver')										#找驱动
window = webdriver.Chrome(service=s,chrome_options = options)						#指定浏览器


window.get('http://jwmis.hnie.edu.cn/jwweb/home.aspx')		#访问该网址

window.switch_to.frame('frm_login')						#获取到登录栏

user_name=window.find_element('id','txt_asmcdefsddsd')	#获取用户账号框
user_name.click()
user_name.send_keys('这里填写你的学号')

time.sleep(1)
user_passw=window.find_element('id','txt_psasas')		#终于明白这两个框是干嘛的了,用来骗你的,事实上点其中一个框之后另一个会被隐藏,所以真正作为密码框的是最后一个
user_pass=window.find_element('id','txt_pewerwedsdfsdff')
user_passw.click()
user_pass.send_keys('这里填写你的密码')

text=window.find_element('id','txt_sdertfgsadscxcadsads')	#验证码框
login=window.find_element('id','btn_login')				#获取登录键

text.click()	#为的是动态加载验证码
img = window.find_element('id','imgCode')	#定位验证码图片
img.screenshot('yzm.png')						#提取图片

chaojiying = Chaojiying_Client('超级鹰平台账号', '密码', '你申请的软件id')				#用户中心>>软件ID 生成一个替换 96001,第三个参数是指超级鹰你申请的软件ID
im = open('yzm.png', 'rb').read()													#本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
yzm=(chaojiying.PostPic(im, 1902))['pic_str']										#后面的1902是类型,看验证码是什么类型的,一般的数字+字母就不用改了
print(yzm)


time.sleep(1)
#进行登录操作
text.send_keys(yzm)
time.sleep(10)
login.click()
print("success")

#弹出框确认 三种弹出框alert(一个按钮),confirm(两个按钮),prompt(两个按钮+输入框)
window.switch_to.alert.accept()		#确认弹窗

time.sleep(60)


window.quit()

踩坑不易,给个关注不过分吧?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值