Python实现智慧校园自动评教全新版


Posted in Python onJune 18, 2021

前言

因为前面的文章中已经涉及到了登录智慧校园的验证码处理问题,所以本文将略过此过程。如登录时遇到验证码的情况,请参考此文。其实第一次使用有验证码的话,可以在浏览器先登录一次,然后再使用python代码模拟登录,验证码就没了。因为CQCET智慧校园验证码弹出是有限定条件的!

一、准备工作

导包

import json
import requests
import uuid
from fake_useragent import UserAgent # 随机生成UserAgent

生成uuid和UA

# 随机生成uuid
uuid = uuid.uuid4()
# 随机UA
headers = {'User-Agent': UserAgent().random}

二、登录智慧校园

此过程不再做过多的赘述,直接上代码吧!

# 登录智慧校园
def login():
    login_url = 'http://sso.cqcet.edu.cn/uaa/login_process'
    data = {'type': 1, 'deviceId': uuid, 'username': '19030****', 'password': 'xl*****5', 'img_code': ''}
    session = requests.session()
    session.post(url=login_url, headers=headers, data=data)
    return session

注: username:账号 password:密码

三、进行评教操作

1、进入评教页面观察

教学评价(学生)教学评价点击学生虽然能够看到教学评价页面但是并非真的教学评价对应的网址,故而需要在network中查看真正的教学评价页面对应的网址。按F12检查网页,然后进行如下图步骤的操作,就可以发现真正的教学评价网址了。

Python实现智慧校园自动评教全新版

2、抓取评教时发起url请求操作

同样在此教学评价页面按F12调出开发者工具转至Network那一栏,然后对一节课进行评教。然后你会发现进行评教的url请求操作,如下图所示!

Python实现智慧校园自动评教全新版     

因此我们只需要用python模拟出同样的请求操作就可以完成评教了!但是这个是个需要携带data的post请求,那么问题来了,数据该从那儿去获取呢?

# 以下为部分所需携带的data
advice: 无
xh: 1903011753
xm: xue
kkdm: 
skjsjgh: 200720020
skjsmc: 上课老师姓名
remark: 无
year: 2020-2021
term: 2
weekLy: 周次
taskId: 202020*********08

缺什么就去找什么,很容易发现在add的下面有一个list。可以其对应的url发起post请求获取上述所需信息。
代码实现:

# 评教页面
def evaluation(session):
    session.get(url='http://ossc.cqcet.edu.cn/xg/teaching/student/xskb')
    data = {'pageSize': '10', 'pageNum': '1', 'isAsc': 'asc', 'xnxq': '2020-2021-2', 'weekly': '16'
                                                                                               ''}
    eval_jsons = json.loads(session.post(url='http://ossc.cqcet.edu.cn/xg/teaching/student/xskb/list', data=data).text)

    add_data = {
        'evaluationProject': '[{"name": "老师教得怎么样?", "id": "teach_situation", "value": "5"},\
                              {"name": "学习收获怎么样?", "id": "learn_harvest", "value": "5"},\
                              {"name": "纪律管理怎么样?", "id": "discipline", "value": "5"},\
                              {"name": "课堂互动怎么样?", "id": "interaction", "value": "5"},\
                              {"name": "课后交流怎么样?", "id": "communicat", "value": "5"}]',
        'advice': '无',
        'remark': '无',
        'kkdm': ''
    }
    for eval_json in eval_jsons['rows']:
        isFlag = eval_json['complete']
        if isFlag:
            print(eval_json['skjsmc'] + '老师的《' + eval_json['kcmc'] + '》已评价!')

        else:
            add_data['xh'] = eval_json['xh']
            add_data['xm'] = eval_json['xm']
            add_data['skjsjgh'] = eval_json['skjsjgh']
            add_data['skjsmc'] = eval_json['skjsmc']
            add_data['year'] = eval_json['xn']
            add_data['term'] = eval_json['xq']
            add_data['weekLy'] = eval_json['weekly']
            add_data['taskId'] = eval_json['yxh']
            eval_add_url = 'http://ossc.cqcet.edu.cn/xg/teaching/student/teach/add'
            # print(session.get(url=eval_url).text)
            print(session.post(url=eval_add_url, data=add_data).text)

3、遇到的问题

到这就已经结束了,但是在post请求请教url时我一直失败,返回{"msg":"运行时异常:error parse new","code":500},让我困惑不已,百思不得其解。最后我用fiddler抓包,对比了一下浏览器post请求与python代码发起的post请求的区别,如下图所示:

Python实现智慧校园自动评教全新版        

你会发现浏览器post请求时'evaluationProject'对应的value值为一个列表。而python的post请求时,'evaluationProject'对应多个value值,本来value应是一个列表的,活生生的本拆散了!因为当时post请求携带的数据是这么写的,如下所示:

'evaluationProject': [{"name": "老师教得怎么样?", "id": "teach_situation", "value": "5"},
                                  {"name": "学习收获怎么样?", "id": "learn_harvest", "value": "5"},
                                  {"name": "纪律管理怎么样?", "id": "discipline", "value": "5"},
                                  {"name": "课堂互动怎么样?", "id": "interaction", "value": "5"},
                                  {"name": "课后交流怎么样?", "id": "communicat", "value": "5"}],

直接让evaluationProject与一个列表形成键值对,找到原因之后我就想把这个列表放在字符串中,但是还是报错。因为我忘了,一个字符串换行需要用续行符连接,最后改成下面那样才算成功!

'evaluationProject': '[{"name": "老师教得怎么样?", "id": "teach_situation", "value": "5"},\
                              {"name": "学习收获怎么样?", "id": "learn_harvest", "value": "5"},\
                              {"name": "纪律管理怎么样?", "id": "discipline", "value": "5"},\
                              {"name": "课堂互动怎么样?", "id": "interaction", "value": "5"},\
                              {"name": "课后交流怎么样?", "id": "communicat", "value": "5"}]',

四、总结

此次实现自动评教并不难,主要在于一些细节问题困扰了我好久,果然是细节决定成败。我也长记性了,python中字符串为多行时,一定要用\这个续行符!

到此这篇关于Python实现智慧校园自动评教全新版的文章就介绍到这了,更多相关Python智慧校园自动评教内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python采集博客中上传的QQ截图文件
Jul 18 Python
python语言使用技巧分享
May 31 Python
用Django实现一个可运行的区块链应用
Mar 08 Python
对Python发送带header的http请求方法详解
Jan 02 Python
Python中时间datetime的处理与转换用法总结
Feb 18 Python
python3 property装饰器实现原理与用法示例
May 15 Python
Python对接支付宝支付自实现功能
Oct 10 Python
简单了解Python3 bytes和str类型的区别和联系
Dec 19 Python
Python统计时间内的并发数代码实例
Dec 28 Python
Python实现AI换脸功能
Apr 10 Python
基于python实现模拟数据结构模型
Jun 12 Python
Python实现生成bmp图像的方法
Jun 13 Python
python用海龟绘图写贪吃蛇游戏
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 #Python
Python turtle实现贪吃蛇游戏
python中%格式表达式实例用法
Jun 18 #Python
如何用python清洗文件中的数据
Jun 18 #Python
Python中glob库实现文件名的匹配
python中的装饰器该如何使用
Jun 18 #Python
You might like
详解Laravel设置多态关系模型别名的方式
2019/10/17 PHP
IE下js调试工具Companion.JS
2010/10/15 Javascript
找出字符串中出现次数最多的字母和出现次数精简版
2012/11/07 Javascript
html5的自定义data-*属性和jquery的data()方法的使用示例
2013/08/21 Javascript
jquery实现加载等待效果示例
2013/09/25 Javascript
Javscript调用iframe框架页面中函数的方法
2014/11/01 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
2015/11/29 Javascript
JavaScript中省略元素对数组长度的影响
2016/10/26 Javascript
微信小程序 wxapp地图 map详解
2016/10/31 Javascript
nodejs的压缩文件模块archiver用法示例
2017/01/18 NodeJs
JS常见简单正则表达式验证功能小结【手机,地址,企业税号,金额,身份证等】
2017/01/22 Javascript
jQuery ajax动态生成table功能示例
2017/06/14 jQuery
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
vue用Object.defineProperty手写一个简单的双向绑定的示例
2018/07/09 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
2019/05/22 Javascript
BootStrap表单验证中的非Submit类型按钮点击时触发验证的坑
2019/09/05 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
2020/04/11 Javascript
JavaScript实现点击切换功能
2021/01/27 Javascript
[46:59]完美世界DOTA2联赛PWL S2 GXR vs Ink 第二场 11.19
2020/11/20 DOTA
Python中使用装饰器和元编程实现结构体类实例
2015/01/28 Python
Python中IPYTHON入门实例
2015/05/11 Python
Python使用ntplib库同步校准当地时间的方法
2016/07/02 Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
2019/07/05 Python
django admin 添加自定义链接方式
2020/03/11 Python
Python多进程编程multiprocessing代码实例
2020/03/12 Python
Python环境管理virtualenv&virtualenvwrapper的配置详解
2020/07/01 Python
用python写爬虫简单吗
2020/07/28 Python
小程序瀑布流解决左右两边高度差距过大的问题
2019/02/20 HTML / CSS
Yves Rocher捷克官方网站:植物化妆品的创造者
2019/07/31 全球购物
广州御银科技股份有限公司试卷(C++)
2016/11/04 面试题
如何填写个人简历自我评价
2013/12/10 职场文书
公司领导九九重阳节发言稿2014
2014/09/25 职场文书
商品陈列协议书
2014/09/29 职场文书
学生抄袭作业的检讨书
2014/10/02 职场文书
2016大学生暑期社会实践心得体会
2016/01/14 职场文书
python神经网络Xception模型
2022/05/06 Python