使用python来实现自动评分

班级聊天记录.png

有这个想法大概是在一年前,因为学校的评测真的很烦,一共好几门课,每门课里面大概20多个选项,手工点真的很麻烦,于是放学回家就花了大概一个半小时去实现了这个项目


  • 需要的工具:
  • python
  • chrome以及配套的chrome driver【自行百度配置】
  • selenium模块

前期思路:

  • 首先打开学校的网站 分析一下元素:

    登陆.png

    首先一个账号输入框,一个密码框,还有一个选择框

    直接用selenium的xpath来定位这两个输入框 :

    xpath.png

    复制以后直接copy到方法里面就可以了

接下来就是选择框了,当时查了很多资料才知道可以用selenium的select来对其进行操作
获取选择框id以后用select_by_value发送需要选择的数据

select.png

最后获取登陆按钮的xpath模拟点击就可以了

button'.png

  • 登陆以后我们来到了进入网上评教的地方

    frame.png

  • 我们可以发现这是一个Frame框架,需要先进入特定的框架内之后再进行获取元素进行点击等操作

  • 进入评测界面

    image.png

发现课程的类名主要就是:GridViewRowStyle和GridViewAlternatingRowStyle这两个类名生成,于是想到了用find_emelements_by_class方法来获取所有的课程,返回结果是一个列表,使用len方法获取长度,数了一下,发现和当前课程数不符合,排查发现是因为下面还有一个GridViewRowStyle,于是获取完毕再-1,就是当前学生的课程数

接下来就是点击链接进入进行评测

image.png

观察发现,单选框主要就是由id:GridView1_RadioButton1_0 最后一个数逐次+1来命名,于是用for循环来循环点击他们最后选择提交按钮完成整个程序,外面的课程也是如此方法,因为里面选择框条数是死的 数过了只有20条,课程因为新生老生都不一样,所以获取类的总数来进行循环

代码:

#coding:utf8
from selenium import webdriver
import datetime
from selenium.webdriver.support.select import Select
username = raw_input('请输入你的学号:') 
pasd = raw_input('请输入密码:')
broswer = webdriver.Chrome()
url = 'http://218.4.204.107/'
broswer.get(url)
user = broswer.find_element_by_xpath('//*[@id="TextBox1"]')
passwd = broswer.find_element_by_xpath('//*[@id="TextBox2"]')
user.send_keys(username)
passwd.send_keys(pasd)
border = Select(broswer.find_element_by_id('ddl_role'))
border.select_by_value('学生')
login = broswer.find_element_by_xpath('//*[@id="submitBtn"]')
login.click()
GetFrame = broswer.switch_to.frame('main')
teacher = broswer.find_element_by_xpath('//*[@id="container"]/div/div[9]/div[1]/a/img')
teacher.click()
getcourse1 = broswer.find_elements_by_class_name('GridViewRowStyle')
getcourse2 = broswer.find_elements_by_class_name('GridViewAlternatingRowStyle')
getcourse1 = len(getcourse1)-1
getcourse2 = len(getcourse2)
courseCount = getcourse1 + getcourse2
echostart = '已经获取完毕总课程数为%s' % courseCount + '门课'
print echostart
starttime = datetime.datetime.now()
print '脚本正在运行中....请不要乱动鼠标'  
for i in range(0,int(courseCount)):
    S = '//*[@id="GridView1_lbl_cjlr_%s"]/a' % i
    i+=1
    start = broswer.find_element_by_xpath(S)
    start.click()
    for k in range(0,20):
        bID = 'GridView1_RadioButton1_%s' % k
        k+=1
        do = broswer.find_element_by_id(bID)
        do.click()
    post = broswer.find_element_by_xpath('//*[@id="Button2"]')
    post.click()
    alert = broswer.switch_to.alert
    alert.accept()
broswer.close()
print '脚本已经执行完毕,请关闭cmd窗口'
endtime = datetime.datetime.now()
exetime = (endtime - starttime).seconds
counttime = '已经完成,用时%s' % exetime + 's'
print counttime

整个过程比较繁琐,很多细节没有说出来,在这里就当个记录吧,以后可算不用手点了

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 洞见SELENIUM自动化测试 写在最前面:目前自动化测试并不属于新鲜的事物,或者说自动化测试的各种方法论已经层出...
    厲铆兄阅读 11,710评论 3 47
  • 这篇文章在介绍官网的同时使用了比较多的脚本示例,示例里遇到的问题有部分在本篇文章进行了解释,还有一篇文章专门记录了...
    顾顾314阅读 14,429评论 3 32
  • 现状 好久好久没有更新博客了,应该有一个月了吧,这段时间内,好忙,公司的业务在上涨期,但是却把下面的一个小朋友砍掉...
    jb2阅读 5,145评论 0 2
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,772评论 25 709
  • 摘要: 之前用Selenium做UI自动化测试从初学到熟练碰到过很多问题,这里就不一一细说了,所以把最基本的操作都...
    Vicky_习惯做唯一阅读 13,948评论 1 23

友情链接更多精彩内容