endpointimpl怎么填参数_你还在为填学业完成情况表发愁吗?看看这里吧!

2a4ce04c70d534922b793f4eedc818da.gif

0x00 前言

为什么会想到做这个呢?

今年4月初的时候要填学业指导表,于是查教务系统的课程编号,各种ctrl+c和ctrl+v,看公式手算gpa,做完这些起码要花半个多小时,工程比较繁琐。

41e241f62e0d255d25ddbd1905e323c6.png

当时就萌生了一个想法,要是直接给我生成个学业指导表就好了,不用花那么多时间和功夫去做这个。

但是学校又没有提供直接生成学业指导表的工具,那只能自己想办法写一个了,我对Python比较熟,决定用Python来写,然后可以用Python的request+docx两个库,request负责获取信息,docx生成关键文档,request后再加个解析请求的BeautifulSoup库,觉得可行性很高,便把想法定了下来。

ac89bfbfc1af99b3e0350bb7935d6889.png
五月上旬的空闲时间比较多,docx库也是第一次接触,看了三天的官方文档,熟悉得差不多了开始写代码,然后断断续续的写了两个星期,做好了初版,后面7,8月里修复了各种bug,也改了好多接口,最终决定在10月份发布这篇文章,其他的也就不说了,开始我们的正题。
bbc70c681a77a895a3ece5fcc92aef48.png
不是专业的前端,不喜勿怪,以我目前的前端水平也就只能做出这些来了,输入学号密码,耐心等待后台生成学业完成情况表,整个过程大概需要十多秒的时间,弹出“创建成功”后跳转到下载页面。
84cd727a11679c54a26a10afa781833e.png
如果同时访问的人太多了,服务器会无法处理那么多请求,从而出现超时的情况,这时候同学们挑人少的时候来访问就好,别问我为啥不买个好点的服务器,我也想,但是条件不允许。
30cde101eddeffbdb2c966e1c01e481f.png
动手能力强的同学还可以直接 git clone 整个项目下来,pip 安装所需依赖后,修改 getinfo.py 文件里的 xxxedu 为 peizheng ,在生成前修改模板文档 demo.docx 里的 xxxx 为学校的名字,然后
 python main.py studentid password
05d48fa823a49d5e6a1d4d955dba5a45.png
自己动手,给其他同学一个机会,给作者服务器少一点压力。
b5dc79c23d20fdcbb833e0b249bcffbd.png
给大家看两张生成后的效果图,红色字体和圈起来的都是设定的默认值,大家要认真校对,根据自己的实际情况填写。
bcd42858704ac6a0680d31dc6e8ff270.png
946fa2dd6d367e4b9a69431220852ded.png
从图上可以看到,最为麻烦的gpa计算,学分计算以及两个学期的课程内容,已经自动生成好了,更为贴心的是,连签名和签名日期都帮你填好了,感不感动,有没有爱上我?
4140854db0cef14caae6fd52a3ea9c23.png
话不多说,下面和大家讲讲如何用python写这样的一个自动生成学业完成情况表的利器,涉及到很多代码,没有需要的同学可以直接拉到文末,有在线生成地址,浏览器打开又或者直接阅读原文跳转过去。

----

怎么用python来实现这个呢,暂时可以分为两步:

  • 获取所需的数据

  • 利用获取的数据生成一个docx文档

那么问题来了

403a152bc5a5fabc7ca2f2058cbe3554.png

我们要哪些数据呢?
又能从哪里获取到呢?
获取到后又要怎样处理呢?
怎么生成一个docx文档?
文档的表格又该如何处理?
文档又如何写入数据

a04c66226aff569879969bccb54b08a9.png

0x01 获取接口

数据从哪获取?这是一个非常重要的问题,第一步就是寻找接口。举个简单的例子,比如我们想要获取到成绩的具体数据,去教务系统的成绩查询那里,按F12,在network那里,
f488d16f7b48a80f6744ba5077a23151.png
查询后在 cjcx_lis 这里可以看到 Preview 处有数据
d2984de4ac768aea1b433eb47933b9b9.png
看一下 header 头,可以发现这个接口是使用 post 的方式去发出请求,而这个就是我们要找的接口,
43fbd0d6d91da2a987ed24196e423fdb.png
拉下来可以看到 post 过去的参数,
1743870df0067475a39e28ba4da22537.png
google浏览器使用ctrl+shift+c,然后鼠标移动到按钮上,可以看到 kksj 是开课时间的意思,其他的参数也同理
74f4368c26ea16e7615c16b87040e753.png
先找到数据在哪,然后使用这样的方式去分析、去寻找所需的接口,然后调用接口去获取数据,再对数据进行处理,筛选处所需的数据。接下来直接上代码- 高能预警!!!(代码可左右滑动)

Getinfo

登录

定义login函数,使用base64加密密码,cookiejar获取cookies,返回opener对象,用于模拟用户登录教务系统
def login(header):
    LOGIN_URL = "http://qzjw.peizheng.edu.cn/jsxsd/xk/LoginToXk"

    values = {}

    values['userAccoun'] = username
    values['userPassword'] = ''
    st = base64.b64encode(bytes(username, 'utf8')).decode(
    )+'%%%'+base64.b64encode(bytes(password, 'utf8')).decode()
    values['encoded'] = st

    postdata = parse.urlencode(values).encode('utf-8')
    cookie = cookiejar.CookieJar()
    handler = urllib.request.HTTPCookieProcessor(cookie)
    opener = urllib.request.build_opener(handler)

    request = urllib.request.Request(LOGIN_URL, postdata, headers=header)
    opener.open(request)

    return opener

处理数据

去除成绩列表中的不需要的数据,有些数据是多余的,可以舍弃掉,对于空的数据,用正则去匹配,将null加入列表,使列表数据保持一致,方便处理
def cjcx_rule(soup, flag=False, kk=False):            list_test[18] = soup.find('input', id='xb')["value"] #18 性别
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值