注意,這個視頻中,除了開始的點擊運行按鈕是人在操作外,後面所有的動作,都是計算機自動執行的,直到成績全部錄入完畢。
是不是看得眼花繚亂,躍躍欲試了?
代碼
彆著急。
為了讓你自己能夠通過對腳本細微修改,滿足實際分數錄入的需要,我們來簡單閱讀一下代碼。
放心,代碼並不長。
第一行代碼,我們指定了n的數值。
n = 10
在Excel裡,每一個學生的成績,包括平時和期末,作為一條記錄。
這樣的記錄一共有10條,所以這裡我們設定一共需要循環處理的條目數為10次。
假設你班上有50人,可以將其設定為50,以此類推。
緊接著,是一條循環語句:
for i in range(n):
這就是告訴Sikuli,我們要循環執行內部的全部語句,執行次數由前面的n指定。
我們把循環內部的代碼分成了4個部分,一一來看。
首先,是從Excel裡面拷貝平時成績。
switchApp("Microsoft Excel") sleep(0.1) type("c", Key.CMD) sleep(0.1) type("c", Key.CMD) type(Key.RIGHT) sleep(0.2)
注意我們採用switchApp()
函數來指定切換到哪一個應用。
應用的名稱怎麼設置呢?
很簡單,在macOS下面,把鼠標移動到屏幕下方Dock上面的對應圖標上,看到的提示就是應用的正式名稱。照著寫就可以。
其中出現了3條sleep()
語句。它們並不是實際執行什麼內容,而是讓電腦歇一下,不要急於執行下面的語句。
這是因為,有些操作需要一定的響應時間。
如果上一步操作的結果還沒有響應,你就急匆匆緊接著執行下面的動作,可能會把原先的計劃打亂,導致操作失誤。例如還沒有拷貝好內容,就進行粘貼,顯然是不行的。
因此,幾乎每一步操作後,我們都加上一個休眠時間,單位為秒。
另外出現的一個函數為type()
。
以這一句為例:
type("c", Key.CMD)
我們讓Sikuli替我們按下鍵盤上的c鍵,同時還要按下控制按鍵Cmd。
在macOS裡面,Cmd + c用來拷貝數據。如果你在Windows下,需要將其修改為Ctrl鍵。
這樣一解釋,這一段代碼的含義就很清晰了。
我們做了以下動作:
切換到了Excel;
執行了拷貝;
又執行了一遍拷貝;
光標右移一格(到了期末成績)
每一步之間,我們都讓Sikuli休眠一會兒,以保證系統成功響應。
這裡解釋一下,為什麼進行了2步拷貝。
因為在macOS裡面,Excel, Word這些應用有時候用快捷鍵進行拷貝操作時,會出現沒有成功拷貝的情況。所以為了保險起見,我不得不經常強迫症一樣按下同樣的操作鍵兩次。
這裡,我們讓Sikuli一樣執行保守操作。
好了,有了上面的知識基礎,我們再來看看下面這段Web瀏覽器頁面操作代碼:
switchApp("Google Chrome") sleep(0.1) type("a", Key.CMD) type("v", Key.CMD) type(Key.TAB) sleep(0.2)
怎麼樣,很容易就理解了吧?
梳理一下,我們做了以下操作:
切換到了Chrome瀏覽器;
選中當前文本框內容;
把剪貼板裡面的平時成績粘貼;
按TAB鍵,切換到下一個輸入文本框(期末成績)。
之後,我們又回到Excel繼續操作:
switchApp("Microsoft Excel") sleep(0.1) type("c", Key.CMD) sleep(0.1) type("c", Key.CMD) type(Key.DOWN) sleep(0.1) type(Key.LEFT) sleep(0.2)
這一段代碼,我們做了以下動作:
切換到了Excel;
執行了拷貝;
又執行了一遍拷貝;
光標下移一格(到了新記錄的期末成績);
光標左移一格(到了新記錄的平時成績)。
然後,我們又回到了Chrome。
switchApp("Google Chrome") sleep(0.1) type("a", Key.CMD) type("v", Key.CMD) type(Key.TAB) sleep(0.1) type(Key.TAB) sleep(0.2)
最後這段代碼,我們做了以下操作:
切換到了Chrome瀏覽器;
選中當前文本框內容;
把剪貼板裡面的平時成績粘貼;
按TAB鍵,切換到下一個輸入文本框(備註);
按TAB鍵,切換到下一個輸入文本框(新記錄的平時成績)。
好了,這就是全部需要循環的代碼了。在Excel和Chrome裡,光標都指向了下一條記錄的平時成績位置。
這樣再次循環的時候,就是下一條記錄的輸入了。依此類推。
如果你使用的系統輸入界面,和我們的系統有區別,也可以根據上述命令的含義,自行調整細節,以便成功輸入。
只是千萬不要忘了,在語句之間用sleep()
來稍作停頓。
小結
本文我為你展示瞭如何利用Sikuli編程環境和自動化Jython腳本,把原本枯燥的成績錄入動作,變成一鍵搞定。
回顧一下,我們介紹了以下內容:
不同操作系統平臺上的幾個典型自動化腳本工具;
如何安裝JDK運行環境;
如何安裝Sikuli;
如何執行Sikuli腳本;
如何閱讀和修改Sikuli腳本中的Jython代碼。
還是那句話,用這麼強悍的自動化腳本工具來輸入個考試成績,簡直是委屈了它。
其實,Sikuli具有基本圖標識別和像素級定位操作能力,被廣泛應用於軟件測試、桌面監控等領域。
如果你對它感興趣,推薦你從官方的文檔開始,深入閱讀學習。
討論
除了輸入成績以外,你還遇到過哪些需要重複執行枯燥操作指令的場景?你覺得Sikuli能否幫助你有效接管這些繁複的機械動作?除了Sikuli,你還用過哪些好用的自動化腳本工具?歡迎留言,把你的經驗和思考分享給大家,我們一起交流討論。
如果你對我的文章感興趣,歡迎點贊,並且關注我的專欄,以便收到後續作品更新通知。
如果本文可能對你身邊的親友有幫助,也歡迎你把本文通過微博或朋友圈分享給他們。讓他們一起參與到我們的討論中來。
閱讀更多 玉樹芝蘭 的文章