使用 python 的 selenium + chrome 来模拟登陆学校教务系统

完整代码传至 github,增加了一个自动识别验证码的功能,不过是用的别人的轮子,识别度也不高

这是需要手动输入验证码的

获取验证码是在一个网页上,访问以后随机生成的,想要让生成的跟我们登录时要输入的验证码对起来,需要保证使用的是同一个cookie

  1. from bs4 import BeautifulSoup
  2. from selenium import webdriver
  3. import requests
  4. import time
  5. from selenium.webdriver.common.keys import Keys
  6. from requests.cookies import RequestsCookieJar
  7.  
  8. #browser=webdriver.PhantomJS(executable_path='D:/software/phantomjs-2.1.1-windows/bin/phantomjs')
  9. #browser.get("http://jwxt.sdaeu.edu.cn/jwweb/home.aspx")
  10. #为了验证,暂时不用无界
  11.  
  12. #chromeOptions = webdriver.ChromeOptions()
  13. #chromeOptions.add_argument("--proxy-server=http://127.0.0.1:8080")
  14. #给chrome设置代理
  15.  
  16. #browser = webdriver.Chrome(chrome_options = chromeOptions)
  17. browser = webdriver.Chrome()
  18. browser.get('http://jwxt.sdaeu.edu.cn/jwweb/home.aspx')
  19. #打开chrome
  20.  
  21. time.sleep(2)
  22. browser.switch_to_frame('frm_login')
  23. #跳转表单
  24.  
  25. browser.find_element_by_id("txt_sdertfgsadscxcadsads").click()
  26. jpg=browser.find_element_by_id('imgCode')
  27. img_src=jpg.get_attribute("src")
  28. #print(img_src)
  29. #拿到验证码url
  30.  
  31. #在这里应该使用browser的ASP.NET_SessionId的值
  32. cookie_bro = browser.get_cookies()
  33. #获取browser的cookie字典
  34. #print(cookie_bro)
  35.  
  36. cookie1=cookie_bro[0]['value']
  37. print("\n当前cookie为: "+cookie1)
  38.  
  39. headers1={
  40. 'Host':'jwxt.sdaeu.edu.cn',
  41. 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36',
  42. 'Accept':'image/webp,image/apng,image/*,*/*;q=0.8',
  43. 'Referer':'http://jwxt.sdaeu.edu.cn/jwweb/_data/login_home.aspx',
  44. 'Accept-Encoding':'gzip, deflate',
  45. 'Accept-Language':'zh-CN,zh;q=0.9',
  46. 'Cookie':'myCookie=;'+'ASP.NET_SessionId='+cookie1,
  47. 'Connection':'close'
  48. }
  49.  
  50. #proxy1={"http":"http://127.0.0.1:8080"}
  51. #r=requests.get(img_src,headers=headers1,proxies=proxy1)
  52. #requests代理
  53.  
  54. r=requests.get(img_src,headers=headers1)
  55. img_content=r.content
  56. print("[*]正在下载验证码...\n")
  57. with open('check.jpg','wb') as f:
  58. f.write(img_content)
  59.  
  60. #把对应的“学号”和“密码”换成自己的
  61. browser.find_element_by_id("txt_asmcdefsddsd").send_keys("1803120102")
  62. browser.find_element_by_id("txt_asmcdefsddsd").send_keys(Keys.TAB)
  63. browser.find_element_by_id("txt_pewerwedsdfsdff").send_keys("wuxiange360")
  64.  
  65. #没有识别功能手动输入
  66. code = input("[*]请输入验证码: ")
  67. browser.find_element_by_id("txt_sdertfgsadscxcadsads").send_keys(code)
  68. browser.find_element_by_id("btn_login").click()
  69.  
  70. #browser.close()
  71. #关闭浏览器

【python】青果教务系统模拟登陆的更多相关文章

  1. 使用php的curl爬去青果教务系统 课表(转)

    1. 分析 首先我们要了解 Http Cookie 的作用(可参考HTTP cookies 详解),简单来说就是维持一个会话,这样我们就能在登陆一个网页后,就能进入这个网页需要登陆的界面. 现在我们需 ...

  2. python urllib2 模拟网站登陆

    python urllib2 模拟网站登陆 1. 可用浏览器先登陆,然后查看网页源码,分析登录表单 2. 使用python urllib2,cookielib 模拟网页登录 import urllib ...

  3. Python实现网站模拟登陆

    一.实验简介 1.1 基本介绍 本实验中我们将通过分析登陆流程并使用 Python 实现模拟登陆到一个实验提供的网站,在实验过程中将学习并实践 Python 的网络编程,Python 实现模拟登陆的方 ...

  4. 使用python的Paramiko模块登陆SSH

    使用python的Paramiko模块登陆SSH paramiko是用Python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. python的paramiko模块 ...

  5. Python tkinter 实现简单登陆注册 基于B/S三层体系结构,实现用户身份验证

    Python tkinter 实现简单登陆注册 最终效果 开始界面 ​ 注册 登陆 ​ 源码 login.py # encoding=utf-8 from tkinter import * from ...

  6. Python Selenium + phantomJS 模拟登陆教务管理系统 “抢课”

    # _*_coding:utf-8_*_ from selenium import webdriver from selenium.webdriver.common.action_chains imp ...

  7. Redis & Python/Django 简单用户登陆

    一.Redis key相关操作: 1.del key [key..] 删除一个或多个key,如果不存在则忽略 2.keys pattern keys模式匹配,符合glob风格通配符,glob风格的通配 ...

  8. Python作业之三次登陆锁定用户

    作业之三次登陆锁定用户 作业要求如下: 1. 输入用户名和密码 2. 认证成功提示欢迎信息 3. 认证失败三次锁定用户 具体代码如下: 方法1: import os#导入os模块 if os.path ...

  9. 广州商学院Python正方教务系统爬虫(获取个人信息成绩课表修改密码)

    使用python的requests库简单爬取,使用xpath解析内容 可以获取个人信息.个人照片.成绩单和课表 github地址:https://github.com/PythonerKK/GZCC- ...

随机推荐

  1. [luogu4466]和与积

    令$d=\gcd(i,j)$,$i'=\frac{i}{d}$,$j'=\frac{j}{d}$,则$(i',j')=1$,可得$(i'+j',i'j')=1$(假设有公因子$p$,必然有$p|i'或 ...

  2. opencv 视频处理相关

    包含视频格式知识(编解码和封装格式):如何获取视频信息及视频编解码格式:opencv读取及保存视频,及opencv fourcc编码格式 一.基础知识 视频的编解码格式和封装格式 参考如山似水 视频编 ...

  3. Dapr初体验之服务调用

    初次理解服务调用 在微服务中,有一个难点就是:如果你想使用各个服务组件,你就得知道不同服务的地址和端口,也就是服务发现. 在传统应用我们是怎么做的?就是在web项目里配置上api地址,如下: 在一个w ...

  4. [CSP-S2019] 树上的数

    考虑处理字典序的一类经典操作: 按位枚举. 我们思考一些性质: 一个点的权值出去则不会再回来. 一条边不会使用两次. 那么我们从小到大来操作. 那么存在矛盾当且仅当: 起点在之前非开始边被操作过 中间 ...

  5. Codeforces 193E - Fibonacci Number(打表找规律+乱搞)

    Codeforces 题目传送门 & 洛谷题目传送门 蠢蠢的我竟然第一眼想套通项公式?然鹅显然 \(5\) 在 \(\bmod 10^{13}\) 意义下并没有二次剩余--我真是活回去了... ...

  6. ClickHouse数据定义

    数据定义   ClickHouse的数据类型 ClickHouse是一款分析型数据库,有多种数据库类型,分为基础类型.复合类型和特殊类型.其中基础类型使用ClickHouse具备了描述数据的基本能力, ...

  7. 【Python小试】根据外显子位置生成CDS序列

    已知 genomic_dna.txt TCGATCGTACCGTCGACGATGCTACGATCGTCGATCGTAGTCGATCATCGATCGATCGACTGATCGATCGATCGATCGATC ...

  8. Linux—linux 查看一个文件有多少M

    ls -l --block-size=M   #就把目录下的所有文件按M单位呈现

  9. A Child's History of England.2

    They made boats of basket-work, covered with the skins of animals, but seldom, if ever, ventured far ...

  10. Spark基础:(三)Spark 键值对操作

    1.pair RDD的简介 Spark为包含键值对类型的RDD提供了一些专有的操作,这些RDD就被称为pair RDD 那么如何创建pair RDD呢? 在不同的语言中有着不同的创建方式 在pytho ...