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的re模块正则表达式操作
May 25 Python
Python如何获取系统iops示例代码
Sep 06 Python
Python使用django搭建web开发环境
Jun 09 Python
http请求 request失败自动重新尝试代码示例
Jan 25 Python
PyQt5每天必学之滑块控件QSlider
Apr 20 Python
tensorflow: 查看 tensor详细数值方法
Jun 13 Python
Python中list查询及所需时间计算操作示例
Jun 21 Python
Python实现通过继承覆盖方法示例
Jul 02 Python
Python 处理图片像素点的实例
Jan 08 Python
django使用haystack调用Elasticsearch实现索引搜索
Jul 24 Python
Python读取yaml文件的详细教程
Jul 21 Python
pytorch--之halfTensor的使用详解
May 24 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
PHP中调用C/C++制作的动态链接库的教程
2016/03/10 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
PHP读取word文档的方法分析【基于COM组件】
2017/08/01 PHP
php 处理png图片白色背景色改为透明色的实例代码
2018/12/10 PHP
jquery简单瀑布流实现原理及ie8下测试代码
2013/01/23 Javascript
自动刷新网页,自动刷新当前页面,JS调用
2013/06/24 Javascript
JavaScript中的值类型转换介绍
2014/12/31 Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
2015/03/12 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
2015/11/26 Javascript
基于Javascript倒计时效果
2016/12/22 Javascript
js 判断登录界面的账号密码是否为空
2017/02/08 Javascript
jquery使用iscorll实现上拉、下拉加载刷新
2017/10/26 jQuery
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
2018/12/05 Javascript
JavaScript中this的全面解析及常见实例
2019/05/14 Javascript
微信小程序实现商城倒计时
2020/11/01 Javascript
JS一次前端面试经历记录
2020/03/19 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
[59:35]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第一场 1月8日
2021/03/11 DOTA
从零学python系列之教你如何根据图片生成字符画
2014/05/23 Python
Python本地与全局命名空间用法实例
2015/06/16 Python
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
Python连接phoenix的方法示例
2017/09/29 Python
浅谈numpy数组中冒号和负号的含义
2018/04/18 Python
3个用于数据科学的顶级Python库
2018/09/29 Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
2018/11/29 Python
Python中的枚举类型示例介绍
2019/01/09 Python
详解Python3中ceil()函数用法
2019/02/19 Python
将tf.batch_matmul替换成tf.matmul的实现
2020/06/18 Python
matplotlib 范围选区(SpanSelector)的使用
2021/02/24 Python
Pharmacy Online中文直邮网站:澳洲大型药房
2020/06/27 全球购物
上课睡觉检讨书300字
2014/11/18 职场文书
大学生逃课检讨书
2015/05/04 职场文书
2016年学校党支部公开承诺书
2016/03/25 职场文书
创业不要错过,这4种餐饮新模式
2019/07/18 职场文书
Python time库的时间时钟处理
2021/05/02 Python
nginx 配置指令之location使用详解
2022/05/25 Servers