一到學期末,學校總要大家上網填寫這個無聊繁瑣又不見得有用的調查, 有時科目多的話,把這些調查問卷一一填完還真是浪費生命。有沒有辦法快速填表呢?
[趕時間請看精簡版 填教學評量的正確方式之咻!咻!咻! ,附教學影片!]
javascript 速度快 5 倍
只要把選擇題填完就可以送出了,其中他說的什麼檢核機制,
應該就只是其中兩題敘述相反要選相反答案,這樣的話所有題目都選中間就好啦。
Ctrl + Shift + K 開啟 Firefox 的 Console ,
複製貼上以下 javascript 按 Enter
或者選取拖曳到 Bookmarks Toorbar 變成按鈕再點擊也行。
javascript:var a = document.querySelectorAll('input[value="3"]'); for(var i=0; i<a.length;i++) { a[i].click(); } var a = document.querySelectorAll('input[value="填畢送出"]'); for(var i=0; i<a.length;i++) { a[i].click(); }
按下 Enter 或點選 OK ,到頁面底下點選"確認送出",或者再做一個 bookmarklet 直接點擊,再按一次 Enter 或點選 OK ,再點擊"回期末教學意見調查首頁",就填完一科問卷了。
javascript:var a = document.querySelectorAll('input[value="確認送出"]'); for(var i=0; i<a.length;i++) { a[i].click(); }
javascript:var a = document.querySelectorAll('input[value="回期末教學意見調查首頁"]'); for(var i=0; i<a.length;i++) { a[i].click(); }
好迅速唷!如此一來,填一個科目只要左右手按 6 個按鍵 (點進科目 > 全選 "3" 和 "填畢送出" > Enter > "確認送出" > Enter > "回期末教學意見調查首頁") , 比起一題一題回答快了大概 5 倍吧,到此已經節省不少時間了。
不過如果這學期我選了 10 個科目,不就還是要按 60 個按鍵,這樣還是挺麻煩的。
iMacros 速度再快 6 倍
搜尋一下,找到 iMacros for Firefox 這個好用的 add-on 。 第一次用還不太上手,跟著 初步教學 ,錄製一段巨集來觀察他的語法。搜尋發現 iMacros 也可以用 javascript 寫 ,但要照那篇寫的要另外存成 .js 檔案放到電腦裡某個資料夾。
想說這樣就可以利用 javascript 的 for 迴圈設定 iMacros 的 POS 值 (代表第幾個這個東西)
來依序點選問卷首頁的 10 個小圖片按鈕,其中利用
document.getElementsByTagName("img").length;
可以得到網頁上有幾個圖片,也就是有幾個科目。
不過用 javascript 又不太方便,無法使用 document , 會顯示 ReferenceError: document is not defined , 似乎要用更複雜的 iMacros 寫法。
後來又發現,要執行 javascript
直接用 iMacros 的 URL GOTO=javascript:...
就行了,
這樣或許直接寫成 iMacros 的 .iim 檔案來執行比較方便。
然後,還要處理對話框點擊 OK 的步驟,這似乎要寫在前一步點擊送出的前面,像這樣:
ONDIALOG POS=1 BUTTON=OK CONTENT= TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:useraddform ATTR=*
填完一個科目的整個 iMacros 程式碼如下:
TAB T=1 URL GOTO=https://onepiece2.nchu.edu.tw/cofsys/plsql/Stud_Question_Main1 TAG POS=7 TYPE=IMG ATTR=SRC:https://onepiece2.nchu.edu.tw/cof/java/images/application_edit.png URL GOTO=javascript:var%20a%20=%20document.querySelectorAll('input[value="3"]');%20for(var%20i=0;%20i<a.length;i++)%20{%20a[i].click();%20} TAB T=2 ONDIALOG POS=1 BUTTON=OK CONTENT= TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:useraddform ATTR=* ONDIALOG POS=1 BUTTON=OK CONTENT= TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:questionform ATTR=* TAG POS=1 TYPE=INPUT:SUBMIT FORM=ACTION:/cofsys/plsql/Stud_Question_Main1 ATTR=* TAB CLOSE TAB T=1 URL GOTO=https://onepiece2.nchu.edu.tw/cofsys/plsql/Stud_Question_Main1
其中第三行的 POS=7
是指要填第幾個科目;
TAB T=2
是用在第一次從首頁點進科目時會開新分頁,
填完後回到首頁再點進科目就不會開新分頁,但一開始的首頁還在,為了方便之後 LOOP ,
TAB CLOSE
關閉新開的這個分頁、
TAB T=1
回到一開始的分頁,
再次 URL GOTO
讓他重新整理。
執行後,瞬間第 7 個科目就變成完成填答的圖案了! 比剛才又快了六倍。光是測試就已經填完四科了,我的科目怎麼這麼少啊。 而且研究這些的時間大概早就可以去慢慢填完了吧,不過研究這個有趣多了呀。 就像飛哥與小佛做一個 照片運輸器 來找回滑板比起直接做一個滑板有趣多了。
雖然這樣已經夠快了,不過 10 個科目就要執行 10 次,還要一一改程式碼,這樣還是有點麻煩。
iMacros + LOOP 速度再快 10 倍,一鍵解決!
iMacros 的
LOOP 其實不難,參考
Using !LOOP 教學影片,原本以為要把第三行改成 POS={{!LOOP}}
,
才發現填過的"填答評量"圖案會消失,因此每次都只要用 POS=1
就行了,
上一個步驟說的 10 個科目就只要按 10 次,不用改程式碼;
這也是之前程式碼最後要重新整理的原因;然後也不用設定 {{!LOOP}}
,
但要讓程式碼執行 6 次,就要把 Max 改成 6 (剩餘沒填的科目數) ,
最後改按 Play (Loop) 。
程式碼和上面一樣,只改了第三行 POS=1
;執行時多了在 Max 填科目數的步驟,然後按 Play (Loop) :
TAB T=1 URL GOTO=https://onepiece2.nchu.edu.tw/cofsys/plsql/Stud_Question_Main1 TAG POS=1 TYPE=IMG ATTR=SRC:https://onepiece2.nchu.edu.tw/cof/java/images/application_edit.png URL GOTO=javascript:var%20a%20=%20document.querySelectorAll('input[value="3"]');%20for(var%20i=0;%20i<a.length;i++)%20{%20a[i].click();%20} TAB T=2 ONDIALOG POS=1 BUTTON=OK CONTENT= TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:useraddform ATTR=* ONDIALOG POS=1 BUTTON=OK CONTENT= TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:questionform ATTR=* TAG POS=1 TYPE=INPUT:SUBMIT FORM=ACTION:/cofsys/plsql/Stud_Question_Main1 ATTR=* TAB CLOSE TAB T=1 URL GOTO=https://onepiece2.nchu.edu.tw/cofsys/plsql/Stud_Question_Main1
因為每個科目問題數不一樣,所以中間保留用 javascript 來自動勾選答案。
終於完成了!一鍵解決所有教學意見調查表!
用 300 倍或更高的速度一口氣填完麻煩的問卷是多大的樂趣啊。真可惜每個人每個學期只能填一次......
2017.1.7 更新
又到了有趣的秒填問卷時刻,但這次卻卡在中間 URL GOTO=javascript...
的步驟,
明明都勾選好了確沒送出去,然後出現 Page loading timeout 的錯誤訊息。
也許可以加入什麼讓 imacros 知道 javascript 已經 loading 完了,
想不到辦法,乾脆試著直接用 imacros 來打勾每個選項。
但是因為每個科目問題數不一樣,所以要在程式裡多列一些選項以免有的科目沒填完,
然後還要加上
!TIMEOUT_STEP 的設定,就不會卡在找不到的選項,
以及
!ERRORIGNORE 讓他不會因為這個錯誤而中斷。
SET !TIMEOUT_STEP 0 SET !ERRORIGNORE YES TAB T=1 URL GOTO=https://onepiece2.nchu.edu.tw/cofsys/plsql/Stud_Question_Main1 TAG POS=1 TYPE=IMG ATTR=SRC:https://onepiece2.nchu.edu.tw/cof/java/images/application_edit.png TAB T=2 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_A1 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_A2 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_A3 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_A4 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_A5 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_B1 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_B2 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_B3 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_B4 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_B5 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_B6 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_B7 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_B8 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_B9 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_B10 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_B11 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_B12 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_B13 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_B14 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_B15 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_B16 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_B17 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_B18 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_B19 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_B20 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_C1 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_C2 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_C3 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_C4 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_C5 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_C6 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_C7 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_C8 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_C9 TAG POS=3 TYPE=INPUT:RADIO FORM=NAME:useraddform ATTR=ID:v_C10 ONDIALOG POS=1 BUTTON=OK CONTENT= TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:useraddform ATTR=* ONDIALOG POS=1 BUTTON=OK CONTENT= TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:questionform ATTR=* TAG POS=1 TYPE=INPUT:SUBMIT FORM=ACTION:/cofsys/plsql/Stud_Question_Main1 ATTR=* TAB CLOSE TAB T=1 URL GOTO=https://onepiece2.nchu.edu.tw/cofsys/plsql/Stud_Question_Main1
耶,可以順利執行了,只是程式碼好長,不知道怎麼用 imacros 的指令來一次勾選完。 還是想用 javascript,找到了 !TIMEOUT_PAGE 可以設定他不要因為 page loading 卡太久, 於是處理了上面的問題。
SET !TIMEOUT_PAGE 1 SET !ERRORIGNORE YES TAB T=1 URL GOTO=https://onepiece2.nchu.edu.tw/cofsys/plsql/Stud_Question_Main1 TAG POS=1 TYPE=IMG ATTR=SRC:https://onepiece2.nchu.edu.tw/cof/java/images/application_edit.png TAB T=2 URL GOTO=javascript:var%20a%20=%20document.querySelectorAll('input[value="3"]');%20for(var%20i=0;%20i<a.length;i++)%20{%20a[i].click();%20} ONDIALOG POS=1 BUTTON=OK CONTENT= TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:useraddform ATTR=* ONDIALOG POS=1 BUTTON=OK CONTENT= TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:questionform ATTR=* TAG POS=1 TYPE=INPUT:SUBMIT FORM=ACTION:/cofsys/plsql/Stud_Question_Main1 ATTR=* TAB CLOSE TAB T=1 URL GOTO=https://onepiece2.nchu.edu.tw/cofsys/plsql/Stud_Question_Main1
太棒了又可以一鍵填完了,誰還沒填的歡迎找我幫忙唷。
No comments :
Post a Comment