如何用Sikuli自動錄入成績?

注意,這個視頻中,除了開始的點擊運行按鈕是人在操作外,後面所有的動作,都是計算機自動執行的,直到成績全部錄入完畢。

是不是看得眼花繚亂,躍躍欲試了?

代碼

彆著急。

為了讓你自己能夠通過對腳本細微修改,滿足實際分數錄入的需要,我們來簡單閱讀一下代碼。

放心,代碼並不長。

第一行代碼,我們指定了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上面的對應圖標上,看到的提示就是應用的正式名稱。照著寫就可以。

如何用Sikuli自動錄入成績?

其中出現了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,你還用過哪些好用的自動化腳本工具?歡迎留言,把你的經驗和思考分享給大家,我們一起交流討論。

如果你對我的文章感興趣,歡迎點贊,並且關注我的專欄,以便收到後續作品更新通知。

如果本文可能對你身邊的親友有幫助,也歡迎你把本文通過微博或朋友圈分享給他們。讓他們一起參與到我們的討論中來。


分享到:


相關文章: