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 IDLE加上自动补全和历史功能
Nov 30 Python
python写日志封装类实例
Jun 28 Python
自学python的建议和周期预算
Jan 30 Python
Python3实现计算两个数组的交集算法示例
Apr 03 Python
python flask 如何修改默认端口号的方法步骤
Jul 12 Python
python实现静态服务器
Sep 05 Python
PyCharm2018 安装及破解方法实现步骤
Sep 09 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
Jan 10 Python
python3连接MySQL8.0的两种方式
Feb 17 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
Jun 30 Python
Python常用扩展插件使用教程解析
Nov 02 Python
python Protobuf定义消息类型知识点讲解
Mar 02 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计划任务之关闭浏览器后仍然继续执行的函数
2010/07/22 PHP
通过php快速统计某个数据库中每张表的数据量
2012/09/04 PHP
使用jQuery内容过滤选择器选择元素实例讲解
2013/04/18 Javascript
Javascript 颜色渐变效果的实现代码
2013/10/01 Javascript
常见的原始JS选择器使用方法总结
2014/04/09 Javascript
javascript高级编程之函数表达式 递归和闭包函数
2015/11/29 Javascript
js实现的下拉框二级联动效果
2016/04/30 Javascript
JavaScript获取当前时间向前推三个月的方法示例
2017/02/04 Javascript
图文详解Javascript中的上下文和作用域
2017/02/15 Javascript
Three.js获取鼠标点击的三维坐标示例代码
2017/03/24 Javascript
JavaScript屏蔽Backspace键的实现代码
2017/11/02 Javascript
ionic2中使用自动生成器的方法
2018/03/04 Javascript
jQuery实现数字自动增加或者减少的动画效果示例
2018/12/11 jQuery
vue router带参数页面刷新或回退参数消失的解决方法
2019/02/27 Javascript
独立部署小程序基于nodejs的服务器过程详解
2019/06/24 NodeJs
Vue Extends 扩展选项用法完整实例
2019/09/17 Javascript
layui table单元格事件修改值的方法
2019/09/24 Javascript
openlayers实现地图弹窗
2020/09/25 Javascript
如何在vue 中引入使用jquery
2020/11/10 jQuery
JS中循环遍历数组的四种方式总结
2021/01/23 Javascript
[01:52]2020年DOTA2 TI10夏季活动预告片
2020/07/15 DOTA
python登录QQ邮箱发信的实现代码
2013/02/10 Python
python抓取京东商城手机列表url实例代码
2013/12/18 Python
opencv python 2D直方图的示例代码
2018/07/20 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
2019/08/09 Python
在django项目中导出数据到excel文件并实现下载的功能
2020/03/13 Python
应聘医药代表职位求职信
2013/10/21 职场文书
新闻专业毕业生英文求职信
2014/03/19 职场文书
领导干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
领导班子个人查摆问题对照检查材料
2014/10/02 职场文书
2014年信访工作总结
2014/11/17 职场文书
2019商业计划书格式、范文
2019/04/24 职场文书
2021年最新用于图像处理的Python库总结
2021/06/15 Python
Linux中Nginx的防盗链和优化的实现代码
2021/06/20 Servers
MySql数据库 查询时间序列间隔
2022/05/11 MySQL