网络编程
位置:首页>> 网络编程>> Python编程>> Python实现智慧校园自动评教全新版

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

作者:Smartloe  发布时间:2023-02-17 05:04:41 

标签:Python,智慧校园,自动

前言

因为前面的文章中已经涉及到了登录智慧校园的验证码处理问题,所以本文将略过此过程。如登录时遇到验证码的情况,请参考此文。其实第一次使用有验证码的话,可以在浏览器先登录一次,然后再使用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中字符串为多行时,一定要用\这个续行符!

来源:https://blog.csdn.net/qq_45473330/article/details/117903502

0
投稿

猜你喜欢

  • 本文实例讲述了Python文件及目录操作的方法。分享给大家供大家参考。具体分析如下:在python中对文件及目录的操作一般涉及多os模块,o
  • 继续Mootools常用方法扩展,依然还是String类的扩展。方法:unescapseHTML说明:这个上次忘了,和escapseHTML
  • 安装前的准备1.python的安装和配置在Window下:在开始菜单中找到运行输入cmd或直接搜索cmd点击进入,输入python,如果出现
  • 浏览器的出现互联网的出现是人类信息交流方式的一次划时代的革命,在这场革命中有两个技术对互联网的发展起到了决定性的作用:一个技术带来的人类信息
  • 最近,W3C的一项公告称,在W3C与XHTML2的合同于今年年底到期后将不会续签。这意味着W3C停止了对XHTML2的开发,转而大力支持HT
  • 1.在pycharm下安装scrapy函数库2.将安装好scrapy函数库下的路径配置到系统path的环境变量中3.打开cmd终端输入:sc
  • 前言不要在用手敲生成Excel数据报表了,用Python自动生成Excel数据报表!废话不多说让我们愉快地开始吧~开发工具Python版本:
  • 在第一章,我们讲过position,当它取值absolute的时候,即绝对定位。既然是定位,就要有参照物。一般来讲,这个定位的参照物是bod
  • 我们可以用动态产生变量的方法,从表格里捕捉数据,动态地创造“剥离”变量引号并且“清理”它,见下列代码,我们只需键入变量名称,选择 query
  • 通常,由于类别不均衡,需要使用weighted cross entropy loss平衡。def inverse_freq(label):
  • global语句的作用在编写程序的时候,如果想为一个在函数外的变量重新赋值,并且这个变量会作用于许多函数中时,就需要告诉python这个变量
  • Python 定义了全局变量的特性,使用global 关键字修饰global key_word但是他的一大缺陷就是只能本module 中也就
  • 1、信息表新建立一个字段,并用0、1的方法判断信息的状态。 2、新建一个页面,定时刷新,并查询表中是否有字段值为0的记录。 3、当管理员点击
  • 1.创建空字典>>> dic = {}>>> type(dic)<type 'dict&#
  • html页面一般都会指定一个编码,如何获取到是处理html页面的第一步,因为错误的编码必然带来后面处理的问题。这里我用python的正则表达
  • 前言都说抖音有毒,一刷就停不下来了。看来抖音这款产品紧紧抓住了人们内心深处的某些需求。当然今天不是来探讨抖音这款产品的啊。今天我们来学习如何
  • 这篇文章主要介绍了pandas和spark dataframe互相转换实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定
  • 本文实例讲述了python中as用法。分享给大家供大家参考。具体分析如下:import some # some 为一个模组如果想要改变被导入
  • 一、前言听说python很流行,因为有很多模块资源,而且导入模块,操作和理解起来很简单。所以在这里记录一下学习python的过程,我相信最重
  • 人工生命—群集智能—蚁群算法js版前言(摘自网上,代码是自己想出来的)对于普通大众来说,“人工生命”、“群集智能”、“仿生机器人”等等可能是
手机版 网络编程 asp之家 www.aspxhome.com