python建立考试系统_Python+Selenium模拟登录医视界考试系统

一、背景说明

医视界医学考试系统(https://exam.mvwchina.com/pc/student/login.html)后台使用token来验证会话身份。使用爬虫抓取题库时,要么在浏览器手动登录、然后抓包获取token,要么使用python模拟登录、自动获取token。

使用Fiddler抓取到的一个登录的会话(https://exam.mvwchina.com/user3/login ),而不清楚cookies是怎么生成的(可能是用JS本地生成再提交到服务器)。直接用request.post用户名和密码,不提交cookies也可以登录,但经常出现“发现您的账号在其它地方登录,请点击下方确认,重新登录”的提示、且无法模拟“点击确认”。

因此考虑使用Selenium直接模拟登录。

二、环境搭建

2.1 下载驱动

其中Chrome驱动要注意Driver版本与浏览器版本对应要求。医视界医学考试系统支持chrome,因此使用chromedriver。Chrome驱动下载地址:http://chromedriver.chromium.org/downloads

下载驱动文件,放到后续python文件同级目录下或加入到环境变量中即可。

2.2 安装selenium

pip install selenium

三、程序实现

3.1 系统状况

手动登录系统,使用Fiddler抓取一个token值,在chrome控制台/Application/Storage中搜索发现:这个token其实就是Cookies中的access-key

网页的图片验证码也是最简单的情况,直接把验证码内容放在元素文字内容中。提取后去除空格即可。

3.2 代码实现

# 使用selenium登录并获取tokenimport jsonimport timefrom selenium import webdriverfrom selenium.webdriver.chrome.options import Optionsimport time# 参考https://www.cnblogs.com/lsdb/p/10515759.html# https://www.cnblogs.com/ruichow/p/11340476.htmldef GetToken(): # 登录用户名密码,改成目标系统用户名密码 username = '' password = '' #浏览器模式设置 chrome_options=Options() chrome_options.add_argument('--headless') """最终的效果:不会弹出浏览器窗口""" driver = webdriver.Chrome(chrome_options=chrome_options) # driver = webdriver.Chrome() # 登录页面url,改成目标系统登录页面 url = "https://exam.mvwchina.com/pc/student/login.html" #操作浏览器,打开url,用户名密码登陆 driver.get(url) driver.find_element_by_name("login").send_keys(username) driver.find_element_by_name("pwd").send_keys(password) # 获取验证码图片对应的文字,删除空格 yzm = driver.find_element_by_class_name('code-yzm').text.replace(" ", "") print(yzm) driver.find_element_by_class_name("input-yzm").send_keys(yzm)driver.find_element_by_class_name('btn-enter').click() # 强制等待5秒,待session和token都成功返回并存到浏览器中 time.sleep(5)#获取单项Cookie,单项Cookie是字典 cookie = driver.get_cookie('access-key')['value'] # 去F12 Application中查找发现,原来token就是cookie中的access-key print(cookie) driver.close() # 退出程序时关闭浏览器 return cookie

私信小编01 领取完整项目代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值