教务系统自动评教

📝写在前面的话:

自从上了大学之后,期末评教成为每个学期末不得不做的事情,为给老师留下好的印象,学习新知识,为了发扬“懒”的美德🙄,老师告诉过我,要活学活用,学以致用,So…

⚠特别声明⚠:文章内容仅供学习使用。只针对本人使用的系统来实现的,由于不同系统的页面元素的xpath不相同,所以并不是适用所有。

⭐前提:

浏览器driver。 以谷歌浏览器为例:把下载的chromedriver_win32.zip解压,把.exe文件分别放到与Chrome.exe和python.exe这两个文件同一路径下即可。

各个浏览器版本的diver下方自取:(注意要与浏览器版本一致)

谷歌浏览器:http://npm.taobao.org/mirrors/chromedriver/

火狐浏览器:http://npm.taobao.org/mirrors/geckodriver/

Microsoft-edge:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/#installation

系统:
教务系统页面
在这里插入图片描述

评教页面:

评教页面

💡思路:

通过python中selenium.webdriver控制浏览器。

具体过程:

  1. 进入系统登录页面。

教务系统登录页面

def edu_login():
    web.get(webAddress) #获得连接
    # 这里只找学号框的xpath,密码输入直接用tab键进行跳跃
    web.find_element_by_xpath('//*[@id="username"]').send_keys(studentId, Keys.TAB, password, Keys.ENTER)  # 进入系统
    web.refresh()  # 刷新界面
  1. 进入系统页面选择评教。

选择评教

#教学评价的xpath  /html/body/div[3]/div/nav/ul/li[5]/a 
web.find_element_by_xpath('/html/body/div[3]/div/nav/ul/li[5]/a').click()
 # 学生评价的xpath //*[@id="cdNav"]/ul/li[5]/ul/li[1]/a
web.find_element_by_xpath('//*[@id="cdNav"]/ul/li[5]/ul/li[1]/a').click()  # 点击学生评价按钮
  1. 对一个课程进行操作。

切换教师评价
获取是否已评

  # 由于点击完学生页面后生成了新的标签页,所以进行窗口切换
  web.switch_to.window(web.window_handles[-1])  # 窗口切换 
  for teacher_num in range(1, classNum + 1): 
      # 课程n的xpath  这里可以取xpath进行观察
      # 课程1 ://*[@id="1"]
      # 课程2 ://*[@id="2"]
      teacher = '//*[@id="' + str(teacher_num) + '"]' 
      # 获取是否评价过的文字内容
      iscomment = web.find_element_by_xpath('//*[@id="' + str(teacher_num) + '"]/td[8]').text
      # 点击第n个教师
      web.find_element_by_xpath(teacher).click()
  1. 对某一课程的一项进行评价。

对某一项评价

# 判断是否评过
if iscomment == '已评完':
	pass
	print("课程"+str(teacher_num)+"已评过")
else:
    best = ']/td[2]/div/div[1]/label/input'  # 优+
    good = ']/td[2]/div/div[2]/label/input'  # 优
    for num in range(1, 12):
        number = '//*[@id="ajaxForm1"]/div[2]/div[1]/div[2]/table/tbody/tr[' + str(num)
        #由于系统限制不让选一样,就固定这几个为优,其他的优+
        if num in (2, 4, 9):  # 第2/4/9项为优
            result = number + good
        else:  # 其他的为优+
            result = number + best
        web.find_element_by_xpath(result).click()  # 要点击的结果 优+ 或 优


评语:

在这里插入图片描述

# 评论所有内容,供随机选择
context = ['教学认真,课堂效率高,授课内容详细,我们学生大部分都能跟着老师思路学习,气氛活跃,整节课学下来有收获、欣喜,使人对此门课程兴趣浓厚。',
           '教师通过对课本的独到深入的讲解,达到了很好的教学效果,能结合多种教学手段,使学生对知识的掌握更深刻。教学内容重点突出,教学目的十分明确,教师具有极高的专业技能。',
           '教师能以饱满的精神为学生讲每一堂课。在授课过程中,教师所讲的内容能够吸引学生的注意力,从所讲知识的一点,拓宽到一连串的多个知识点,并能从广度中求深度,用提问题的方示,让学生对问题进行深刻思考,形成教师与学生的互动关系。',
           '待学认真负责,语言生动,条理清晰,举例充分恰当,对待学生严格要求,能够鼓励学生踊跃发言,使课堂气氛比较积极热烈。']
#找到评论框的xpath进行随机内容填充
web.find_element_by_xpath('//*[@id="DEDBE6EE0E597072E05315D451D3A81F_py"]').send_keys(
							context[random.randint(0, 4)])  # 评论框里填的内容


保存:

评教完成进行保存

web.find_element_by_xpath('//*[@id="btn_xspj_bc"]').click()  # 点击保存
web.find_element_by_xpath('//*[@id="btn_ok"]').click()  # 点击确认
print("已评完" + str(teacher_num))
  1. 循环遍历对单个课程每一项进行评价。

  2. 循环遍历所有课程并对其评价

💻完整代码:

from selenium.webdriver import Chrome  # 引入浏览器的包
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import random
import time


webAddress = "系统评教网址"  # 教务系统网址
studentId = '20756854'  # 系统登录账号
password = '123456'  # 登录密码
classNum = 10  # 待评教课程总数


def edu_login():
    web.get(webAddress)
    time.sleep(2)
    web.find_element_by_xpath('//*[@id="username"]').send_keys(studentId, Keys.TAB, password, Keys.ENTER)  # 进入教务系统
    web.refresh()  # 刷新界面


def comment():
    web.find_element_by_xpath('/html/body/div[3]/div/nav/ul/li[5]/a').click()
    time.sleep(1)
    web.find_element_by_xpath('//*[@id="cdNav"]/ul/li[5]/ul/li[1]/a').click()  # 点击学生评教按钮
    # 获取是否评完
    time.sleep(2)
    web.switch_to.window(web.window_handles[-1])  # 窗口切换
    for teacher_num in range(1, classNum + 1):
        teacher = '//*[@id="' + str(teacher_num) + '"]'
        isComment = web.find_element_by_xpath('//*[@id="' + str(teacher_num) + '"]/td[8]').text
        web.find_element_by_xpath(teacher).click()
        time.sleep(2)
        if isComment == '已评完':
            pass
            print("课程"+str(teacher_num)+"已评过")
            time.sleep(2)
        else:
            # 评教
            best = ']/td[2]/div/div[1]/label/input'  # 优+
            good = ']/td[2]/div/div[2]/label/input'  # 优
            for num in range(1, 12):
                number = '//*[@id="ajaxForm1"]/div[2]/div[1]/div[2]/table/tbody/tr[' + str(num)
                if num in (2, 4, 9):  # 第2/4/9项为优
                    result = number + good
                else:  # 其他的为优+
                    result = number + best
                web.find_element_by_xpath(result).click()  # 要点击的结果 优+ 或 优
                time.sleep(1)
            # 评语内容
            context = ['教学认真,课堂效率高,授课内容详细,我们学生大部分都能跟着老师思路学习,气氛活跃,整节课学下来有收获、欣喜,使人对此门课程兴趣浓厚。',
                       '教师通过对课本的独到深入的讲解,达到了很好的教学效果,能结合多种教学手段,使学生对知识的掌握更深刻。教学内容重点突出,教学目的十分明确,教师具有极高的专业技能。',
                       '教师能以饱满的精神为学生讲每一堂课。在授课过程中,教师所讲的内容能够吸引学生的注意力,从所讲知识的一点,拓宽到一连串的多个知识点,并能从广度中求深度,用提问题的方示,让学生对问题进行深刻思考,形成教师与学生的互动关系。',
                       '待学认真负责,语言生动,条理清晰,举例充分恰当,对待学生严格要求,能够鼓励学生踊跃发言,使课堂气氛比较积极热烈。']
            web.find_element_by_xpath('//*[@id="DEDBE6EE0E597072E05315D451D3A81F_py"]').send_keys(
                context[random.randint(0, 4)]) # 随机选择评语填充评论框里内容
            web.find_element_by_xpath('//*[@id="btn_xspj_bc"]').click()  # 保存
            time.sleep(1)
            web.find_element_by_xpath('//*[@id="btn_ok"]').click() # 确认保存
            print("已评完" + str(teacher_num))
            time.sleep(2)


if __name__ == '__main__':
    web = Chrome()
    # vpn_login()
    edu_login()
    time.sleep(3)
    comment()

❗❗❗最后别忘记提交,这里只写到保存所有的,并未提交

📖写在后面的话:

经过不断的实验测试,终于实现目标了。达到事倍功半,根本不是问题好吧!虽然代码有点糙,有点电杆做牙签——大材小用了,但通过这次操作再次温习了selenium😆,同时也给老师留下了好印象,一举多得😉。

优化建议:由于系统限制同类的评价不能全一样,(虽然我不知道哪个是同类的)但可以通过暴力进行测试(虽然没必要)但这样可以试出最高分数。

❗❗❗温馨提示:身为好学生的我们,应该认真对待每位老师的成果,认真评价每们课程。

看完之后,快楞着啊,别试😑


ps:虽然我还是一个小菜鸡,不知道哪里措辞不当,导致审核不过,但真的只是为了学习知识,记录我的学习过程。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值