使用python來實(shí)現(xiàn)自動評分

班級聊天記錄.png

有這個想法大概是在一年前,因?yàn)閷W(xué)校的評測真的很煩,一共好幾門課,每門課里面大概20多個選項(xiàng),手工點(diǎn)真的很麻煩,于是放學(xué)回家就花了大概一個半小時去實(shí)現(xiàn)了這個項(xiàng)目


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

前期思路:

  • 首先打開學(xué)校的網(wǎng)站 分析一下元素:

    登陸.png

    首先一個賬號輸入框,一個密碼框,還有一個選擇框

    直接用selenium的xpath來定位這兩個輸入框 :

    xpath.png

    復(fù)制以后直接copy到方法里面就可以了

接下來就是選擇框了,當(dāng)時查了很多資料才知道可以用selenium的select來對其進(jìn)行操作
獲取選擇框id以后用select_by_value發(fā)送需要選擇的數(shù)據(jù)

select.png

最后獲取登陸按鈕的xpath模擬點(diǎn)擊就可以了

button'.png

  • 登陸以后我們來到了進(jìn)入網(wǎng)上評教的地方

    frame.png

  • 我們可以發(fā)現(xiàn)這是一個Frame框架,需要先進(jìn)入特定的框架內(nèi)之后再進(jìn)行獲取元素進(jìn)行點(diǎn)擊等操作

  • 進(jìn)入評測界面

    image.png

發(fā)現(xiàn)課程的類名主要就是:GridViewRowStyle和GridViewAlternatingRowStyle這兩個類名生成,于是想到了用find_emelements_by_class方法來獲取所有的課程,返回結(jié)果是一個列表,使用len方法獲取長度,數(shù)了一下,發(fā)現(xiàn)和當(dāng)前課程數(shù)不符合,排查發(fā)現(xiàn)是因?yàn)橄旅孢€有一個GridViewRowStyle,于是獲取完畢再-1,就是當(dāng)前學(xué)生的課程數(shù)

接下來就是點(diǎn)擊鏈接進(jìn)入進(jìn)行評測

image.png

觀察發(fā)現(xiàn),單選框主要就是由id:GridView1_RadioButton1_0 最后一個數(shù)逐次+1來命名,于是用for循環(huán)來循環(huán)點(diǎn)擊他們最后選擇提交按鈕完成整個程序,外面的課程也是如此方法,因?yàn)槔锩孢x擇框條數(shù)是死的 數(shù)過了只有20條,課程因?yàn)樾律仙疾灰粯?,所以獲取類的總數(shù)來進(jìn)行循環(huán)

代碼:

#coding:utf8
from selenium import webdriver
import datetime
from selenium.webdriver.support.select import Select
username = raw_input('請輸入你的學(xué)號:') 
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('學(xué)生')
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 = '已經(jīng)獲取完畢總課程數(shù)為%s' % courseCount + '門課'
print echostart
starttime = datetime.datetime.now()
print '腳本正在運(yùn)行中....請不要亂動鼠標(biāo)'  
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 '腳本已經(jīng)執(zhí)行完畢,請關(guān)閉cmd窗口'
endtime = datetime.datetime.now()
exetime = (endtime - starttime).seconds
counttime = '已經(jīng)完成,用時%s' % exetime + 's'
print counttime

整個過程比較繁瑣,很多細(xì)節(jié)沒有說出來,在這里就當(dāng)個記錄吧,以后可算不用手點(diǎn)了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容