用python计算成绩_Python使用splinter自动登录教务系统查询并计算成绩(CUMT新版教务系统)...

矿大2017年使用的是新版的教务系统,提交的密码是经过js加密的。

虽然我最后找到了加密的文件,可是js没有学过,看了半天硬是没看懂。

最后渣渣只能另找办法了,最后发现了一个神器splinter。这个库的使用我就不再赘述了,简单介绍一下我是怎么实现登录的

#login

from splinter.browser import Browser

class Login(object):

def __init__(self):

self.txtUserName = '******' #用户名

self.TextBox2 = '******' #密码

self.txtSecretCode = '' #验证码

def submit(self):

b = Browser(driver_name="chrome")

b.visit("http://202.119.206.62/jwglxt/xtgl/login_slogin.html")

b.fill("yhm", self.txtUserName)

b.fill("mm", self.TextBox2)

button = b.find_by_id('dl')

button.click()

cookie = 'JSESSIONID' + '=' + b.cookies['JSESSIONID'] #cookie的构成

return cookie

这样就完成登录了,并拿到了登录后的cookie,接下来就是爬取成绩页面和计算成绩了。

首先是各个库的引用和实例一个login对象

import requests

import json

import xlwt

from login import Login

login = Login()

因为是异步加载的,所以拿到的是json数据,转化成字典后使用

url = 'http://202.119.206.62/jwglxt/cjcx/cjcx_cxDgXscj.html?doType=query&gnmkdm=N305005&queryModel.showCount=100&queryModel.currentPage=1&queryModel.sortName=&queryModel.sortOrder=asc&time=0'

postData = {

# 'xnm': "2016", #学年开始的年份

# 'xqm': "12", #对应第几学期,3表示第一学期,12是第二学期

}

headers = {

'cookie': login.submit(), #cookie值是临时获得生成的

'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'

}

r = requests.post(url, headers = headers, data=postData)

js = json.loads(r.text)

这里的postdata可以修改,选择那个学年哪个学期,我这里是导入整个大一大二的,所以直接注释掉了,headers中可以拿到前面登录过的cookie访问成绩查询页面。

然后写入到excel文件中

sheet1.write(0, 0, '科目')

sheet1.write(0, 1, '成绩')

sheet1.write(0, 2, '学分')

sheet1.write(0, 3, '绩点')

print(js['items'][0]['xm'], js['items'][0]['bj'])

print("所有科目共有{}条记录".format(len(js['items'])))

count = 0

jqCj = []

tplt = "{:^6}\t{:^6}\t{:^6}\t{:^20}"

print(tplt.format( "学分", "成绩", "绩点", "科目"))

for infor in js['items']:

if infor['kcxzmc'] != "通识教育公选课" and infor['kcxzmc'] != "素质教育课":

if infor['cj'] == '良好':

infor['cj'] = 80

elif infor['cj'] == '优秀':

infor['cj'] = 90

print(tplt.format( infor['xf'], infor['cj'], infor['jd'], infor['kcmc']))

jqCj.append([float(infor['xf']), float(infor['cj']), float(infor['jd'])])

sheet1.write(count, 0, infor['kcmc'])

sheet1.write(count, 1, infor['cj'])

sheet1.write(count, 2, infor['xf'])

sheet1.write(count, 3, infor['jd'])

count += 1

最后的计算我就不说了。。。2333

贴一下整个过程中的几张截图:

1.首先是自动登录

2.然后是打印成绩和计算成绩

成绩不好,大家看看就行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值