📝写在前面的话:
自从上了大学之后,期末评教成为每个学期末不得不做的事情,为给老师留下好的印象,学习新知识,为了发扬“懒”的美德🙄,老师告诉过我,要活学活用,学以致用,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
控制浏览器。
具体过程:
- 进入系统登录页面。
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() # 刷新界面
- 进入系统页面选择评教。
#教学评价的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() # 点击学生评价按钮
- 对一个课程进行操作。
# 由于点击完学生页面后生成了新的标签页,所以进行窗口切换
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()
- 对某一课程的一项进行评价。
# 判断是否评过
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))
-
循环遍历对单个课程每一项进行评价。
-
循环遍历所有课程并对其评价
💻完整代码:
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:虽然我还是一个小菜鸡,不知道哪里措辞不当,导致审核不过,但真的只是为了学习知识,记录我的学习过程。