論前端工程師如何應對西電教學評估系統

0x00. 更新

隔了一年多了,一直打算把這個插件再完善一下,這不花了點時間重構了一下。此次更新使你們能夠在教學評估列表頁(就是那個有不少老師的頁面)一鍵進行評教了。javascript

可是你必須在每次評教完成彈出評估完成按一下回車,這點讓強迫症很難受啊(逃css

0x01. 前言

這幾天又要進行教學評估了,原本吧可能出於「爲了教學質量 」這種神聖重要而高貴的目的(姑且這麼認爲吧 :)),可是可是你網站作得那麼搓就是你的錯了。選一個老師的按鈕那麼小,你是要誰點;選優良中的按鈕那麼小,你是要誰點,關鍵是隻能點 radio,點擊文字倒是沒有用的,這就讓人忍不了了。做爲一個前端工程師,怎麼可以忍受這種「奇恥大辱」,因而決定試一試,沒想到還真成功了,也就方便了許多。html

0x02. 快速開始

若是你只是想要快速進行教學評估而不想使用插件的話,能夠在瀏覽器中按下 F12 打開控制檯,輸入下面這段代碼並按下回車,你會發現一切都會自動進行。記得要在 教學評估列表頁(就是那個有不少老師的頁面)呦。前端

控制檯

在瀏覽器中按 F12 會出現下圖這樣的東西,點擊 console 進入控制檯。java

控制檯

執行

複製下面的代碼,敲擊回車即可快速填選。git

var CONFIG = {
  optionsRate: [8, 1, 0, 0],  // 每次評教的四個選項的比例
  comments: [  // 主觀評價,評價時會隨機選擇
    '課程內容很充實,教師教學很風趣。',
    '不夠有趣',
    '老師很好!教得賊棒了!',
    '不錯不錯',
    '好老師',
    '真是一門好課啊!很喜歡呢~',
    '但願加油!'
  ]
}

start()

// 開始腳本
function start(data) {
  evaluateAuto()
  window.frames['bottomFrame'].document.querySelector('[name=mainFrame]').onload = evaluateAuto
}

// 自動評教
function evaluateAuto () {
  var mainFrame = window.frames['bottomFrame'].frames['mainFrame']
  var btnEle = mainFrame.document.querySelector('img[title=評估]')

  if(mainFrame.document.querySelectorAll('.fieldsettop .titleTop3')[1]) { // 評教頁
    evaluate(mainFrame)
  } else if (btnEle) {  // 列表頁
    btnEle.click()
  } else if(mainFrame.document.querySelector('img[title=查看]')) {
    window.frames['bottomFrame'].document.querySelector('[name=mainFrame]').onload = null
    alert('已所有評教')
  } else {
    window.frames['bottomFrame'].document.querySelector('[name=mainFrame]').onload = null
    console.log('請在教學評估頁使用')
  }
}

// 評教
function evaluate (mainFrame) {
  var comment = CONFIG.comments[parseInt(Math.random() * CONFIG.comments.length)]
  var optionsRate = CONFIG.optionsRate

  // 全部選項 Node
  var optionsEles = mainFrame.document.querySelectorAll('.fieldsettop .titleTop3')[1].querySelectorAll('#tblView table tr:nth-child(even) > td')

  // 主觀評價 Node
  var subjectiveEles = [optionsEles[optionsEles.length - 1].querySelector('textarea'), mainFrame.document.querySelectorAll('.fieldsettop .titleTop3')[2].querySelector('textarea')]

  // 提交 Node
  var submitBtn = mainFrame.document.querySelector('[title=提交]')

  // 隨機選擇
  for(var i = 0, optionIndex = 0; i < optionsEles.length - 1; i++) {
    optionIndex = getRandomOption(optionsRate)
    optionsEles[i].querySelectorAll('input')[optionIndex].checked = true
  }

  // 填充主觀評價
  commentsFill(subjectiveEles, comment)

  // 提交評價
  submitBtn.click()
}

// 按照比例獲取隨機選項
function getRandomOption (optionsRate) {
  optionsRate = optionsRate || [1, 1, 1, 1]
  var rateSum, random, index, sum, i;

  for(i = 0, rateSum = 0; i < optionsRate.length; i++) {
    rateSum += parseInt(optionsRate[i])
  }

  random = Math.ceil(Math.random() * rateSum)

  for(i = 0, sum = 0; i < optionsRate.length; i++) {
    sum += optionsRate[i]
    if(random <= sum) {
      return i
    }
  }

  return 0
}

// 填充評論框
function commentsFill (eles, comment) {
    for(var i = 0; i < eles.length; i++) {
    eles[i].value = comment
  }
  return i
}

聲明

你須要在必須在教學評估列表頁(就是那個有不少老師的頁面)才能夠成功,固然你也能夠在問卷評估頁嘗試。另外你必須在每次評教完成彈出評估完成按一下回車,這點讓強迫症很難受啊(逃github

0x02. Chrome 插件

獲取

Chrome 應用商店web

百度雲盤chrome

使用

插件已更新,部分與截圖顯示不一致。npm

插件預覽

若是你不是從 Chrome 應用商店下載的話,因爲 Chrome 目前禁止第三方插件的安裝,因此你須要在 Chrome 裏依次點擊 菜單 更多工具 擴展程序 而後打開 開發者模式,將插件拖進來而後會自動安裝。

使用過程

源碼

GitHub - xd-teaching-evaluator

目錄

damn-jwxt/
├── css/
├── img/
├── js/
├── manifest.json
└── popup.html

popup.html

插件中的彈窗,也就是打開插件是看到的那個頁面。

popup.js

插件彈出層的邏輯,獲取數據並開始注入函數執行。

content.js

Content Scrip,被注入到頁面中的核心邏輯,也是真正執行的代碼。

TODO/問題

  • 提升代碼質量

  • 應該能夠在教師列表頁進行一鍵評教的,這樣就不用一個個點選老師了

參考

Chrome 插件開發文檔

相關文章
相關標籤/搜索