本文屬xxKarina原創(chuàng),轉(zhuǎn)載請(qǐng)注明
個(gè)人博客地址:
https://xxkarina.github.io/
需求
作為學(xué)生纱新,總會(huì)在學(xué)期末的時(shí)候被要求教學(xué)質(zhì)量評(píng)測(cè)展氓,但是又是考試季的,老師又是在心目中都是A的脸爱,卻要一個(gè)個(gè)的去選遇汞,實(shí)在有點(diǎn)無(wú)奈
很多時(shí)候我們會(huì)想著如果在打開(kāi)瀏覽器的時(shí)候就可以順便把教學(xué)評(píng)估這活給干了不是很好嗎?
那既然存在這樣的需求簿废,肯定就會(huì)有相應(yīng)的解決方式
常用的解決方式有兩種:軟件 空入,腳本
今天咱們就來(lái)瞧瞧腳本評(píng)估是怎么實(shí)現(xiàn)的
解決方法
js腳本
為了不掉胃口,我這里決定先給出代碼族檬,想要了解的童鞋歪赢,可以繼續(xù)忘下看哦
(function(){
var n = 0;
function evaluate() {
var iframe = window.top.document.getElementById('iframeautoheight').contentWindow;
var obj = iframe.document;
var length = obj.getElementById('pjkc').getElementsByTagName('option').length;
var select = obj.getElementsByTagName('select');
for(i=1;i<select.length;i++){
select[i].value='A';
}
// select[1].value='B'; //一門(mén)課有多個(gè)老師的時(shí)候可以根據(jù)這種歌形式進(jìn)行變相應(yīng)的調(diào)整
select[select.length-1].value='B';
obj.getElementById('pjxx').value = '這門(mén)課很不錯(cuò)';
obj.getElementById('Button1').click();
}
evaluate();
window.top.document.getElementById('iframeautoheight').onload = function(){
var iframe = window.top.document.getElementById('iframeautoheight').contentWindow;
var length = iframe.document.getElementById('pjkc').getElementsByTagName('option').length;
if (n < length-1) {
evaluate();
n++;
}else {
iframe.document.getElementById('Button2').click();
}
}
})()
上面的代碼直接放在瀏覽器的控制臺(tái)回車(chē)執(zhí)行就可以了
首先要解決一個(gè)問(wèn)題就的知道去了解剖析問(wèn)題的本身,我們要使用簡(jiǎn)單的腳本去執(zhí)行教學(xué)評(píng)估的話导梆,就要只要教學(xué)評(píng)估的界面是怎么樣的一種架構(gòu)
打開(kāi)你的教學(xué)評(píng)估界面轨淌,是不是長(zhǎng)這樣:
主要的界面就是這樣
首先我們進(jìn)行分析,需要操作的地方有下拉框 文本框 按鈕 看尼,然后比較好的一點(diǎn)是递鹉,整個(gè)頁(yè)面的,下拉框藏斩,文本框躏结,按鈕都不存在沖突的地方,于是我們就可以大膽的猜想他們的類(lèi)名相同或者id
名類(lèi)似啦狰域,使用getElements
來(lái)大膽的進(jìn)行操作啦
然后按下F2鍵媳拴,打開(kāi)控制臺(tái)黄橘,查看你要的元素
你會(huì)發(fā)現(xiàn)
原來(lái)整個(gè)教學(xué)評(píng)估的界面是一個(gè)iframe
嵌進(jìn)去的,既然是這樣屈溉,我們就需要注意幾點(diǎn)地方:
- 元素的獲取——最好是從頂層窗口開(kāi)始獲取塞关,以防多層嵌套
-
iframe下的屬性——可以使用
contentWindow
和contentDocument
(相當(dāng)于我們平時(shí)使用的window和document)
繼續(xù)往里看:
這里驗(yàn)證了我們剛開(kāi)始的猜想,命名的相似性
可以看到兩者是不一樣的子巾,在這里我們可以使用兩種方式去進(jìn)行區(qū)分:
-
正則——我們可以使用
/^DataGrid1__ctl\d+_JS1$/
進(jìn)行匹配 -
數(shù)組下標(biāo)——由于整個(gè)界面就只有一個(gè)不一樣的下拉框帆赢,于是我們可以在循環(huán)獲取到的
select
數(shù)組的時(shí)候選擇從第二個(gè)開(kāi)始進(jìn)行操作(上面的代碼選用的是這種)
得知以上信息之后我們就可以開(kāi)始初步構(gòu)建我們的代碼了:
- 進(jìn)行初始化,獲取相應(yīng)的元素
var iframe = window.top.document.getElementById('iframeautoheight').contentWindow;
var obj = iframe.document;
var length = obj.getElementById('pjkc').getElementsByTagName('option').length;
var select = obj.getElementsByTagName('select');
注意:這里都是使用了window.top
就是為了防止獲取不到元素的情況
獲取到相應(yīng)的元素之后线梗,就可以循環(huán)的對(duì)元素進(jìn)行賦值椰于,由于select元素的第一個(gè)是課程名稱(chēng),于是我們從第二個(gè)元素(下標(biāo)為1)開(kāi)始循環(huán)
for(i=1;i<select.length;i++){
select[i].value='A';
}
又因?yàn)椴荒苋肯嗤巧Γ谑俏覀冸S機(jī)設(shè)置一個(gè)為B(這里選擇的是最后一個(gè))當(dāng)一門(mén)課有多個(gè)老師的情況下瘾婿,這個(gè)地方就需要進(jìn)行相應(yīng)的調(diào)整哦
select[select.length-1].value='B';
最后就是編輯我們的建議啦
可以看到這里使用的是 textarea
所以我們可以使用value來(lái)進(jìn)行賦值
obj.getElementById('pjxx').value = '這門(mén)課很不錯(cuò)';
編輯完之后自然是觸發(fā)保存按鈕啦
obj.getElementById('Button1').click();
于是我們就完成了一個(gè)單獨(dú)頁(yè)面的評(píng)估,這里需要注意的一點(diǎn)是烤咧,當(dāng)評(píng)價(jià)無(wú)誤點(diǎn)擊保存按鈕之后偏陪,iframe頁(yè)面會(huì)自動(dòng)刷新加載新的數(shù)據(jù),并且會(huì)自動(dòng)切換到下一門(mén)課程髓削,于是這部分的功能我們就不需要寫(xiě)了
所以我們要想的就是:在加載頁(yè)面的時(shí)候竹挡,再次執(zhí)行剛才那部分代碼,這里我們就可以使用到
onload
函數(shù)立膛,將之前的代碼放在一個(gè)函數(shù)里evaluate
于是就可以在onload
的時(shí)候進(jìn)行調(diào)用
window.top.document.getElementById('iframeautoheight').onload = function(){
var iframe = window.top.document.getElementById('iframeautoheight').contentWindow;
var length = iframe.document.getElementById('pjkc').getElementsByTagName('option').length;
if (n < length-1) {
evaluate();
n++;
}else {
iframe.document.getElementById('Button2').click();
}
}
循環(huán)一定不要忘記加上結(jié)束循環(huán)的條件
評(píng)價(jià)完一門(mén)課時(shí)候的狀態(tài)
成功執(zhí)行代碼之后
在此點(diǎn)擊評(píng)教的時(shí)候已經(jīng)進(jìn)不去了
所以我們的教學(xué)評(píng)估就完成了喲