1.项目简介

因为信息门户如果用requests发post请求进行模拟登录的操作比较麻烦(自己太low,信息门户的加密算法没搞明白),所以没办法就只能考虑通过其他途径去做。
采用selenium就是一个比较好的解决办法(虽然比较慢,但是至少能用 ),模拟浏览器输入账号密码然后点击登录即可实现登录,然后获取相关cookies等信息就可以进行后续成绩获取等操作了。

2.参考代码

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author : Garyimport time
from selenium import webdriverchrome_options = webdriver.ChromeOptions()
# options.add_experimental_option('excludeSwitches', ['enable-automation'])#提示浏览器不是selenium
chrome_options.add_argument('--headless')  # 无头
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')  # 这个配置很重要
chrome_options.add_experimental_option('excludeSwitches',['enable-automation'])  # 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Seleniumclass Selenium:def __init__(self):# self.driver = webdriver.Chrome(options=chrome_options)  # 有配置的初始化浏览器self.driver = webdriver.Chrome()  # 不使用有配置的,方便看操作self.driver.maximize_window()  # 窗口最大化def login(self, username, password):self.driver.get('http://ehall.whu.edu.cn/appShow?appId=5382714380693158')  # 走信息门户认证的教务系统url,不用输入验证码# 找到输入框并输入账号密码Username = self.driver.find_element_by_id("username")Username.send_keys(username)Password = self.driver.find_element_by_id("password")Password.send_keys(password)time.sleep(0.2)self.driver.find_element_by_xpath('//*[@id="casLoginForm"]/p[5]/button').click()  # 登录按钮try:# name=self.driver.find_element_by_id("ampHeaderToolUserName").text#获取姓名,内容为空,弃用name = self.driver.find_element_by_id("nameLable").text  # 获取学生姓名acade = self.driver.find_element_by_id("acade").text  # 获取学生院系# cookies = self.driver.get_cookies()[0]# print('登录成功 ...')# self.driver.quit()# html = self.driver.execute_script("return document.documentElement.outerHTML")html = self.driver.find_element_by_xpath('//*[@id="system"]').get_attribute('onclick')# 不要用 driver.page_source,那样得到的页面源码不标准# print(html)csrftoken = html.split(",")[0].split('csrftoken=')[-1]print('登录成功!')return True, acade, name, self.driver.get_cookies(), csrftokenexcept Exception as e:print(str(e))try:msg = self.driver.find_element_by_id("msg").textexcept Exception as e:# time.sleep(5)# cpatchaError=self.driver.find_element_by_id("cpatchaError").textprint(str(e))msg = '您尝试的次数过多,请明天再试!或解决方案:通过浏览器成功登录一次信息门户。再重试认证本系统'# self.driver.quit()return False, msgif __name__ == '__main__':username = 'test'  # 你的信息门户账号password = 'test'  # 你的信息门户账号对应的密码spider = Selenium()print(spider.login(username=username, password=password))  # 查看登录结果

3. todo或者应用

  1. 登录成功后得到的cookies可以获取自己的成绩信息(计算GPA啥的)等
    2. 原本的抢课也是可以做的,但是换系统了用不了了
  2. 新的信息门户增加了滑块验证,后续有空更新

python selenium模拟浏览器操作实战(武汉大学原教务系统)相关推荐

  1. python 模拟用户点击浏览器_使用python进行模拟浏览器操作

    使用python完成模拟浏览器操作主要是使用selenium来模拟浏览器,当然还要带上浏览器的驱动比如chromedriver.exe的驱动. 一般使用selenium进行模拟操作需要注意引入一下几个 ...

  2. python selenium 模拟浏览器

    遇到的问题 (1)按钮无法点击 selenium.common.exceptions.ElementClickInterceptedException: Message: element click ...

  3. python简单模拟登录网站(以登录教务系统为例)

    简单参考 Python3实现网站模拟登录 写了个python模拟登录教务系统,具体用到了selenium浏览器自动测试框架,参考了 Flask 的文档 作接口.代码供参考. import time f ...

  4. python实现模拟浏览器操作

    from selenium import webdriver # 需要先安装谷歌驱动(http://chromedriver.storage.googleapis.com/index.html)安装你 ...

  5. python模拟浏览器下载文件在哪里_python下selenium模拟浏览器基础操作

    1.安装及下载 selenium安装: pip install selenium  即可自动安装selenium geckodriver下载:https://github.com/mozilla/ge ...

  6. python自动化模拟浏览器

    采用python自动化模拟浏览器操作 # -*- coding: utf-8 -*-""" 通过splinter刷12306火车票 可以自动填充账号密码并登陆,接下来的事 ...

  7. 孤荷凌寒自学python第八十五天配置selenium并进行模拟浏览器操作1

    孤荷凌寒自学python第八十五天配置selenium并进行模拟浏览器操作1 (完整学习过程屏幕记录视频地址在文末) 要模拟进行浏览器操作,只用requests是不行的,因此今天了解到有专门的解决方案 ...

  8. python 模拟浏览器selenium 微信_Spider-Python爬虫之使用Selenium模拟浏览器行为

    分析 他的代码比较简单,主要有以下的步骤:使用BeautifulSoup库,打开百度贴吧的首页地址,再解析得到id为new_list标签底下的img标签,最后将img标签的图片保存下来. header ...

  9. python 爬虫动态网页的区别_Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取...

    区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...

  10. python 模拟浏览器下载文件-python爬虫:使用Selenium模拟浏览器行为

    前几天有位微信读者问我一个爬虫的问题,就是在爬去百度贴吧首页的热门动态下面的图片的时候,爬取的图片总是爬取不完整,比首页看到的少.原因他也大概分析了下,就是后面的图片是动态加载的.他的问题就是这部分动 ...

最新文章

  1. python描述器做权限控制_Python装饰器14-描述器
  2. python生成pdf报表_用python的reportlab库生成PDF报表
  3. 仿微信公众平台“打标签”功能~~~
  4. 主成分分析(PCA)算法,K-L变换 角度
  5. 计算机组装与维护实验指导,计算机组装与维护实验指导书.pdf
  6. 电子工程学院的师兄弟姐们们,老师叫你们回家
  7. 后发送过慢的问题_点胶阀使用常见问题怎么解决
  8. category和extension的区别
  9. centos5.5 下面 lnmp环境遇到的小问题
  10. 中文手册_Etherscan API中文手册
  11. LPVOID lpParameter
  12. 做一个企业网站需要多少钱?
  13. 互联网晚报 | 9月15日 星期三 | iPhone 13正式发布;天猫双11正式启动商家报名;华为推出鸿蒙矿山操作系统“矿鸿”...
  14. 0、本专栏的预计更新的内容与更新时间表(2022-05-07更新目录排版)
  15. Git Github学习笔记
  16. 什么是抖音SEO,抖音seo优化怎么做?抖音seo实操教程
  17. 【java】课程设计--抽卡模拟器
  18. 职场人的购物清单出炉,来看看大家买了什么?
  19. SNS游戏服务器架构随笔
  20. 2021年低压电工复审考试及低压电工作业模拟考试

热门文章

  1. Big-Endian 和 Little-Endian 模式的区别
  2. 最新版gg服务器框架安装器,GG服务框架安装器
  3. 网络骗术 索要佣金型
  4. 用引流脚本有什么好处,引流脚本是什么意思呢
  5. Docker进阶实战
  6. vue 高德api Map事件方法封装
  7. mysql 脏页刷新_InnoDB脏页刷新机制
  8. 由偷菜/抢车位引发的思考
  9. stm32——端口重映射
  10. Elasticsearch nested嵌套类型