1. 程式人生 > >我來教你製作JS指令碼,一鍵完成學校教務系統的評教!

我來教你製作JS指令碼,一鍵完成學校教務系統的評教!

需求:我們在學校每學期都要完成教師教學評教,但是課程多,評教有點麻煩,我們能不能一鍵評教所有課程老師的評教呢?

答案肯定是有的。首先登陸你學校的教務系統,我學校的教務系統是正方教務系統。推薦使用Chrome瀏覽器,登陸到評教頁面,再按F12,顯示如下圖所示的頁面。

點中上圖的Console 控制檯,把下面的程式碼複製黏貼過去按回車。注意教師評教頁面是要等待30秒,才能點選儲存的,這是我學校系統為了防止非法的頻繁操作。所以要等待完30秒後,再按回車,好了你會發現頁面會自動完成選擇,並跳轉到最後一頁,此時你只需要按下提交,就完成了評教!

			var iframe = window.top.document.getElementById('iframeautoheight');
			var ifdocument = iframe.contentWindow.document;	
			var subLength = ifdocument.getElementById("pjkc").length - 1;
			ifdocument.getElementById("TextBox1").value = - 1; //去掉等待時間
			
			function execution(){
			var iframe = window.top.document.getElementById('iframeautoheight');
			var ifdocument = iframe.contentWindow.document;	
		    //網站提交後會自動跳轉下一課程
			var reg = /^DataGrid1__ctl\d+_JS1$/;   
			var selections = ifdocument.getElementsByTagName("select");
			for(var i = 0 ; i< selections.length; i++){
			 	if(reg.test(selections[i].getAttribute("id"))){
			 		selections[i].value = "優秀";
			 	}
			 }
			ifdocument.getElementById("Button1").click();
		}
			
			execution();
			iframe.onload = function(){
				if(subLength -- > 0){
					execution();
				}
				
			}

那我們來看看具體是怎麼實現的。

1.先說下思路:

把學校的教務系統裡的 評優select標籤的value 改成 “優秀”, 然後再觸發下面的儲存按鈕,因為教務系統點了儲存會自動跳轉到下一個老師的頁面,所以不用我們操心了,我們只需要寫好 修改評優select 標籤的方法,當 iframe一載入完成就觸發這個方法,當評教數到達最後一個的時候停止觸發。

2.具體操作細節:

F12大法,檢視你學校的評教頁面,如圖所示:

1)發現評教系統裡面的巢狀著一個iframe, 也就是說我們選擇的內容都是在 iframe裡面的。

所以我們要獲取這個 iframe 物件,因為要呼叫一個 onload 事件。

使用   var iframe = window.top.document.getElementById('iframeautoheight'); 

 獲取iframe物件, 其中window.top 就是最頂層的window 物件。

使用 var ifdocument = iframe.contentWindow.document;  

獲取 iframe的document物件,其中contentWindow就是獲取 iframe物件巢狀的 window物件。

使用 var subLength = ifdocument.getElementById("pjkc").length - 1; 

獲取課程的數目,執行到最後一門的時候不再迴圈下去。

2)有了iframe物件的document物件就很好搞了, 我們寫個方法 execution 實現選擇每個 下拉框的值,並點選儲存。 

獲取所有select :  ifdocument.getElementsByTagName("select");   

我們來看看下拉框的 ID:

 

可以看到 select 的 ID 是有規律的。我們可以寫個正則匹配:

var reg = /^DataGrid1__ctl\d+_JS1$/; 

 如果匹配成功,就把  該 select 的 value值修改成你需要的值。最後找到儲存按鈕的 ID:

呼叫點選方法就OK了。ifdocument.getElementById("Button1").click();

3)但是我發現我學校的系統每個課程評教都設定了30等待時間,然後經我研究,在原始碼裡搜尋 Button1關鍵字 發現如下:

原來它會判斷 x 若 x >0就會走定時方法,所以改掉 x 的值就好了,再搜尋var x發現:

 TextBox1它value 就是30,所以我們修改下它的value。

ifdocument.getElementById("TextBox1").value = - 1; 

可以看到getvalue()方法 當iframe 一載入完就賦予了 x 的值,所以首次修改了TextBox1 value也不起作用,定時任務已經開始了,所以說要等待30秒後才能在控制檯回車執行復制的程式碼。

4)最後呼叫一個 iframe物件的onload 事件,當系統自動跳轉到下一課程的時候, iframe就會重新載入 載入完後,onload事件就會觸發,然後就可以再次呼叫 execution方法啦。

是不是很簡單,如果有條件的話,不妨自己寫寫看~