本文章为小川先生原创,转载可以,请标明出处。

每次听说出成绩了, 然后就急急忙忙上教务, 点开网站, 输入帐号, 密码, 验证码, 然后还要点好多次才能看到成绩. 然而作为一个懒癌晚期患者, 这是没有办法忍受的. 那好吧, 自己写个工具好了.

Idea 1. POST登录教务, 然后查成绩

python3.4

先登录好吧. 我这里使用的是Chrome浏览器和自带的调试工具, 按F12就可呼出.

上教务咯.(jw.djtu.edu.cn)

按F12, 然后点Network, 然后输入帐号密码验证码, 然后点登录. 好的, 然后你就会看到下面的Network窗口一直冒出数据. 滚轮滑到最上边. 这里看到有一个POST请求.

点进去.

这个URL提示我们了, 这是一个security_check, 应该就是向服务器提交我们的帐号密码, 把窗口往下拖.

不小心看到浏览器偷偷提交的数据了, 哈

第一个参数groupId, 我也不知道干啥的, 可能跟教务的权限控制有关? 哎呀, 不小心泄漏太多- –

第二个参数j_username, 用户名, 不解释

第三个参数login, 应该是说明行为的, 不管, 照抄

第四个参数j_password, 密码, 明文!!!

第五个参数j_captcha, 咋一看, 这一堆数字啥玩意儿啊, 唉, 怎么好像是我刚才输入的验证码.

既然参数都搞懂了, 那就用postman(Chrome 插件)试试吧, 哈哈

填入URL, 这个就是刚才抓包时显示的Request URL.

User-Agent也在刚才抓的那个包里, 在Request Headers里. 很多网站用UA判断网络请求是人发起的, 还是机器发起的. 比如python默认的UA就是python 3.4/ , 还有就是一些客户端识别, 以前很常见的那种软件, 用它发微博就显示来自iPhone, 也是这个原理, 就是发微博的时候, 使用iPhone默认的UA.

选择第二个,x-www-from-urlencoded. 这是默认的表单提交方式.

如图所示, 填入必要参数, 对了, 验证码的话….直接看浏览器里教务的图片吧, 然后填在这里

点Send.

唉嘛, 这是咋回事, 参数应该都是对的啊~~~, 好吧, 要不试试interceptor, 兴许跟cookies有关.

装好后, 在postman的右上角开启它, 再点Send, 唉, 怎么就好使了.

其实是interceptor使用了chrome浏览器的 Cookie, 所以提交就好使了.

为啥带上cookie就好使了呢, 这邪门.

其实是这样的, 你的浏览器加载验证码的时候, 服务器会给你一个JESSIONID, 用于作为用户的临时识别代码, 所以他能判断你获取到了哪张验证码, 所以才能判断验证码是否正确.

盗取别人的cookie的话, 差不多相当于盗取了他用户的临时使用权, 这就是为啥你点了一些奇怪的链接之后, 你的qq或者其它的帐号就被盗了. (恶意网页代码扒你的保存在电脑上的cookie, 然后用他去提交数据)

好了, 瞎BB了那么多, 该上主题了.

当然, 咱这个方法还是要输入验证码的, 所以先自动获取验证码的图片, 然后人眼识别, 然后输入验证码. 登录成功.

先获取验证码:

开F12调试, 多点几次验证码, 就能看出规律了.

http://jw.djtu.edu.cn/academic/getCaptcha.do?0.06245193560607731

后面的一堆数字其实就是随机数.

Python有个random模块.

里面有个random.random()方法

返回一个[0,1)的小数

>>>random.random()
0.6363492206638173
>>>random.random()
0.8982103132246348
>>>random.random()
0.20045321977485753
>>>random.random()
0.18511221787593868

python3获取验证码, 并写到本地目录的jwpost.jpg文件, 而且返回cookie值:

def getCheckcode(cookie=None):url = 'http://jw.djtu.edu.cn/academic/getCaptcha.do?' + str(random.random())res = superxc.xcUrlopen(url, ck=cookie)with open('jwpost.jpg', 'wb') as f:f.write(res.read())if cookie==None:ck = res.info()['Set-Cookie']ck = ck[0:ck.find(';')]return ck

superxc是我自己的一个库, 里面的xcUrlopen:

def xcUrlopen(url, data=None, ck=None):req = urllib.request.Request(url, data)req.add_header('User-Agent', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36')if ck!=None:req.add_header('Cookie', ck)res = urllib.request.urlopen(req)return res

urllib.request.Request()创建一个Request对象, data必须是已经编码过的.

req.add_header()添加协议头UA

xcUrlopen返回一个Request对象, 可以像文件对象, 使用read()之类的方法

Python实现教务在线登录:

def xcLogin(cookie):url = 'http://jw.djtu.edu.cn/academic/j_acegi_security_check'while True:while True:sys.stdout.write('Code:')sys.stdout.flush()os.system('eog jwpost.jpg')checkcode = input()if checkcode=='-1':getCheckcode(cookie)else:breakdta = {}dta['groupId'] = ''dta['j_username'] = '1418140323'dta['login'] = '登录'dta['j_password'] = 'yourPassword'dta['j_captcha'] = checkcodedta = urllib.parse.urlencode(dta).encode('utf-8')res = superxc.xcUrlopen(url, dta, cookie)s = res.read().decode('gbk')if s.find('验证码不正确')!=-1:print('Error checkcode')getCheckcode(cookie)elif s.find('密码不匹配')!=-1:print('Wrong password')exit()elif s.find('不支持框架')!=-1:print('Login success.')breakelse:print('Unknow erro.')exit()

os.system() 是执行命令. eog jwpost.jpg 就是调用ubuntu默认的图片查看器打开验证码图片.

为什么上面用sys.stdout.write()呢, 因为直接用input(“Code:”)的话, 验证码弹出的时候, 命令行界面是不显示’Code:’的, 要等验证码图片被关闭后才能显示, 不友善, 所以改成这sys.stdout.write()

被要求输入验证码时, 可以输入-1, 表示验证码太模糊, 请求再来一张.

表单数据必须编码后才能提交, 表单数据是不是看着像dict, 没错, 就是它.

urllib.parse.urlencode(dta) 把dict编码成可提交数据,

楼上.encode(‘utf-8’) 服务器交换数据默认使用utf-8编码

好了, 现在你应该会使用python登录教务在线了, 查询成绩嘛, 再来一个GET就好了.

Idea 2. 超级课程表成绩查询

手机打开超级课程表, 然后点成绩查询.

然后右上角, 使用Safari打开, 然后复制URL到电脑上, 用浏览器打开.

URL差不多是这样的

http://112.124.54.19/Score/score.html?schoolIdentity=7937305C7B2C414514D8431493656089&identity=***bu gei kan***

identity好像是个人身份识别码

scholIdentity是学校识别码, 如果你跟我一样, 那么咱应该是校友, 握手- –

Idea 3. 大交助手成绩查询

微信关注大交助手, 绑定后, 它会给你分配一个openid, 用作用户身份识别.

你点成绩查询, 照样在Safari打开.

URL是类似这样的

http://djzs.vipsinaapp.com/chengji.php?openid=**bu gei kan**

如果openid不写的话, 好像直接返回大交助手作者的成绩信息- –

喂, 喂, 这网址咋一看, 像SAE的, 一个post直接查成绩, 不用帐号密码验证码. 当然了, 帐号是否安全, 不好说. 哈哈

再次膜拜这位大神.

作者水平有限, 大家一起学习.哈哈

更多关于Python爬虫教程, 自行doodle.

最后的最后, 展示下我写的成绩查询, 基于Idea 2, 超级课程表.

再次声明, 海燕是个坑货- –

本文章为小川先生原创,转载可以,请标明出处。

Python登录大连交通大学教务在线实现成绩查询相关推荐

  1. Python模拟登陆大连交通大学教务在线

    Python模拟登陆大连交通大学教务在线,使用wxPython做的界面,urllib2发送数据,可以实现登陆后获取首页登陆数据的功能,目前只做登陆,其他的暂时没做 Python2.7代码 # -*- ...

  2. 泉州信息工程学院 计算机考试,泉州信息工程学院教务网络管理系统成绩查询、网上选课查分登录入口...

    泉州信息工程学院教务网络管理系统成绩查询.网上选课查分登录入口 http://jw.qziedu.cn:7777/jwweb/home.aspx 泉州信息职业技术学院教务系统_泉州信息工程学院 ● 关 ...

  3. 安徽文达信息工程学院计算机二级成绩查询,安徽文达信息工程学院教务网络管理系统成绩查询选课登录入口...

    安徽文达信息工程学院教务网络管理系统成绩查询.网上选课选课查分登录入口 http://218.22.58.76:2346 安徽文达信息工程学院教务处 2019年7月24日 - 2017-11-13关于 ...

  4. 学业水平考试网登录_江西学业水平考试成绩查询登录入口

    江西省学业水平考试成绩查询网站111.75.211.156,好学网的中考频道为学友整理.      江西省学业水平考试网:       点击登录:江西学业水平考试成绩查询系统       下方为江西会 ...

  5. 中南大学python考试_中南大学教务系统学生成绩爬虫【图】

    中南大学教务系统学生成绩爬虫[图] 08-20栏目:技术 TAG:中南大学教务管理 中南大学教务管理系统 写本博客的原因 其实这个项目很早前我就做完了,当时由于·时间仓促,仅在csdn上传了打包后的程 ...

  6. 爬取正方教务系统完成成绩查询

    刚刚开始接触爬虫,在爬过起点中文网这种不要登陆的网页后转向教务系统这种需要登陆的网页,登录这个因为还有验证码,刚接触所以花费了很长时间,说到底其实就是把你的信息交给网站让它可以认得你的过程,而登录过后 ...

  7. JNU教务系统一键成绩查询

    由于最近出于出成绩时期,每天都会查一下成绩,学校的教务系统cookie不操作一段时间会过期,又要重新登入.需要输入验证码.就感觉挺麻烦的,所以就搞了个自动查询吧. 待解决问题: 如何访问学校教务系统网 ...

  8. 大连八中2021年高考成绩查询,2021年大连市高中排名前十名

    2021年辽宁省大连市高中排名前十名: 十.大连市第三十六中学(西岗区) 九.大连市第二十高级中学(甘井子区) 八.大连理工大学附属高中(甘井子区) 七.大连市第一中学(西岗区) 六.大连市第十二中学 ...

  9. 大连交大教务一键教学评价

    以前在贴吧发过,贴吧搜索现在越来越差了,最近几年的帖子都不让搜 原帖地址:http://tieba.baidu.com/p/3162751611 这里备份一段代码做个纪念 /************* ...

最新文章

  1. c# 小票打印机打条形码_C#打印小票自带条形码打印
  2. SAP QM 事务代码QAC2的BUG?
  3. 在不久的将来,脑控机器人可以给我们喂水、给我们喂食
  4. Bootstrap4+MySQL前后端综合实训-Day04-PM【PowerDesigner 图形化数据库设计软件(设置依赖关系、自动增长主键、生成sql语句)、SQLyog软件(备份数据库)】
  5. Mybatis中typeAliases标签和package标签
  6. 2018: 跑图(深搜)
  7. Python配置opencv并在命令行运行
  8. mobile的一些link
  9. android方法不混淆,Android 混淆时不混淆注解方法
  10. mysql聚集索引与非聚集索引
  11. 手把手教你 Charles 的使用「部分逆向的解决方法」
  12. hdu 6202 cube cube cube
  13. 【二分查找】详细讲解(C语言折半查找)
  14. 函数间断点类型及其判别方法
  15. JAVA 编写一个员工类,成员变量和成员方法自拟,编写一个测试类
  16. 电脑桌面切屏的快捷键
  17. VeraCrypt的只读问题
  18. 【BI学习心得03-推荐系统眼中的你——用户画像】
  19. php 图片抠图,php 图像处理 抠图,生成背景透明png 图片
  20. 做销售如何有效地维护好与客户的关系

热门文章

  1. LiteOS学习笔记-5通信模组之LiteOS的SAL及socket编程
  2. Android 实现三级联动 国家统计局全国省市县行政区域最新划分数据库
  3. 手动实现最简单的Android热修复(最新最全详细小白教程)
  4. 基于QQ云输入法,用python实现的输入法(demo 版)
  5. 使用 gitbook 制作 pdf 电子书
  6. 设计模式期末考试复习客观题
  7. 华为手机隐藏的5个技巧,每一个值得收藏
  8. 智能盆栽养花,不一样的养殖趣味
  9. 【C++】迷宫的简单实现
  10. Chart.js使用