跳到主要內容

咱們用SIKULI來自動跑

摩登時代

人都可以上太空,卻還要手動執行重複的動作?



來到目前這家公司最大的心得就是,大部分的時間都用在人工手動完成,而時間往往不是用跑玩流程,而是等待流程完成的時間。一家負責數位化的公司,說技術水平高也沒什麼,就是前期投入的成本要多,要狠得下心買下效能好得硬體。如果你沒有錢,就只能用時間跟人力來等價交換,但我就是不喜歡這點,不是不喜歡等價交換(我喜歡鋼之鍊金術師),而是用人力解決事情。

人在奇妙的環境下,往往會學會自己沒打算學的東西。好比我在軍中學會了用EXCEL篩選資料,我在純粹操作PhotoShop去背的環境下接觸了Windows Batch。會玩Batch是個意外,當時我和同事小朱待在夜深人靜的地下室進行修圖,一晃眼就要準備下班,但PhotoShop的處理程序大約還要兩三個小時結束。身為愛北極熊有責任心的我們就想到:「何不用電腦自動關機指令呢?」兩個人不斷地比較彼此寫的指令,最後搞大到弄出個後來被我稱作關機精靈的玩意,直到小朱離開公司後我仍在研究這玩意的可行性。

每當和人討論Windows時,都會開玩笑地說微軟把人們都搞笨了,人只會按按鍵選擇「下一步」、「確定」、「取消」,老實說,還真的就是這麼回事。Batch像是DOS下指令一般,給定你要做的拷貝、剪下、複製,他就能開始執行,只是沒有美觀的綠bar進度表就是了。單論一項功能,例如剪貼一份檔案,的確,下指令是稍微會讓人嫌慢;但若是一連串的流程,例如剪下、命名、壓縮、歸檔之類的作業流程,那就顯得出Batch批次功能的好處。

雖然批次處理很好用,但他仍有弱點,這問題就是在與程式之間的溝通。你可以下個指令要Word開啟記事本的檔案、要求列印,但就是不能使用一些內建的特殊功能,例如直接下指令要Word來跑合併列印功能。這中間的問題就出在,當初人家根本沒打算設計一條通道讓你只要下指令就能執行,他就是希望你在他這套圖形介面下作業。但說真的,OFFICE系列也有一套工具叫做巨集,透過巨集也能下這些指令給Word執行,不過這就是微軟開放使用的方式,你要用VBScript去寫出你要的執行方式才能讓他動起來,對我來說就像是重新打造一把開門的鑰匙,而我希望是有把萬能鑰匙來解決事情。


SIKULI

當我在PTT小軟體板看到 SIKULI 時,我對於「依據GUI介面圖示來寫程式」的介紹非常好奇,實際看過之後則是驚為天人。他的示範影片是用在設定IP,而看在我眼裡這就是一把好用的萬能鑰匙。他的設計概念就是讓程式去認圖示,你可以要求他點圖示一下、兩下、按右鍵,就是這些我們平常操作電腦的基本動作。雖然聽起來很簡單,但這的確是個非常聰明的方式,想想看,多半的程式都是設計成圖示操作介面,我們在打電腦說穿了就是不斷地在認圖示,只要我們教會軟體如何去辨別我們要對圖示設定做的動作,要自動跑根本就是輕而易舉的事情,最好的是我們甚至不用學習如何去跟套裝軟體溝通就能下指令。


生產線

希望你知道Windows的資料夾可以變更圖示,簡單地對於資料夾按右鍵,選擇「自訂」,變更你要的各類系統圖示。我最喜歡使用的是關機圖示,可以讓我知道哪個資料夾內的任務已經完成。利用Windows這個功能,我們就可以設定讓SIKULI認圖做事,有點像是幫汽車駕駛建立道路標示一樣,你才知道車要往哪開,動作要執行那一個。

但這時問題來了,如果一個畫面內有多個相同的圖示該怎麼辦。作者似乎有提出自己的方法,而我的想法則是,那我就建立一個管道的作業流程:素材集中區、處理區、完成區。每區都有自己的圖示,SIKULI就像是機械手臂一樣,從素材集中區抓出一個資料夾放入處理區,完成指定的動作之後再把資料夾扔到完成區,重頭再跑下一個素材。

雖然一直沒走進程式的領域,只是在路旁觀看偶爾挑些自己喜歡的東西用,但我還是認知到「嚴謹」跟「彈性」之間的反向關係。寫程式雖然一板一眼,但是做出來的結果就是那個樣;而用SIKULI 就像是在賭運氣一樣,你要他光靠認圖示就完成全部的工作還是有困難。偶爾他也會有認錯圖示的時候,這時你就得想辦法讓他回到正軌上面。例如當我將 SIKULI 用在自動拼PDF圖檔時,發現光是一個重新命名的動作你就得告訴他「按右鍵」「重新命名」「複製」「貼上」,要是流程中有要切換資料夾等動作就會異常麻煩,因此我就使用 Batch 加上 SIKULI 來相互配合,就好像我會用 Batch 來節省作業時間一般,SIKULI就是我的分身。


變更圖示的迴圈
想寫個迴圈讓他自己跑下去嗎? 請使用 for x in range(10):
紅色是迴圈的次數,還有別忘了縮排要進入迴圈的動作。


總結來說,SIKULI是套彈性很大的軟體,讓寫程式也快有「所見即所得」的感覺。只是彈性越大,出錯的空間也越多,感覺應該學個模糊理論才對。因此你會需要用其他的輔助方式來修正,讓這套軟體有能夠持續作業的能力,這很值得。

留言

這個網誌中的熱門文章

浴室蓮蓬頭水量復活了!

狀況是這樣的,進入冬季之後開始感覺熱水器的水似乎越來越常忽冷忽熱,熱水洗不到兩分鐘馬上就變成冷水,由於狀況太過頻繁因此開始上網查查可能的原因有哪些。 熱水器進水量太多,熱水器來不及燒熱 熱水器裝錯,大廈用裝成公寓用(水壓不同) 水壓不穩,建議裝個加壓器 蓮蓬頭卡到沙子 水管內鈣化 ..... 個人相當偏向簡單容易的解決方法,所以調整了水塔的水量,也把蓮蓬頭打開來清了清,順便把櫻花牌熱水器的溫度調了又調都沒有明顯的改善效果。 這時讓我比較驚奇的事情發生了,因為數年前曾經發生不良的洗手臺可能因為熱脹冷縮的關係而發生爆裂的情況,因此我很久沒有使用洗手臺裝熱水來使用。但因為逼不得已,打開洗手臺開熱水使用,竟然發現熱水可以源源不絕地供應,這代表說從水塔到熱水器到浴室的運作都是正常的,那代表的是蓮蓬頭有問題! 蓮蓬頭多半有個旋扭,可以決定是由蓮蓬頭出水還是下方的水龍頭出水,兩邊的出水量都一樣小就代表進水的時候有問題。而這時我在 Mobile01 上頭找到了相同狀況的苦主,用了他的方法竟然一試見效。 先全開熱水 再用一字起子將制水塞(螺絲) 轉緊轉鬆 轉緊轉鬆 轉緊轉鬆 就看到一些砂狀污垢流出 熱水的水量就恢復正常 沒錯,就是拿一字起調整熱水管線下方的螺絲,順時鐘轉緊時,水量會變小;逆時鐘轉鬆時,水量會變大。重複幾次這樣的動作後,我終於看到我的蓮蓬頭有了正常的水量,原來是負責水量的螺絲因為長時間使用,空隙被一些鈣質給填滿,造成水量變小。 為什麼水量變小會影響到水溫呢?因為現在的熱水器都有防空燒裝置,當熱水水量過小的時候就會自動熄火,你需要把熱水關起來重新打開才會讓熱水器重新點火。當你的蓮蓬頭水量過小卻很熱時,你會降低熱水的水量並且提高冷水的水量,此時熱水溫度降低而熱水量低到某種程度的時候就會讓熱水器熄火,接著就是清涼的冷水從蓮蓬頭灑到你的身上,透清涼啊XD 插曲: 當我對蓮蓬頭完全失望時,拿著水盆猛從臉盆撈水沖澡的我,還真想買這款產品,可以將臉盆的水龍頭轉接到蓮蓬頭的工具,《面盆沐浴切換頭》,真是超吸引人的。 Ref (己解決)浴缸水龍頭及蓮蓬頭純熱水是純冷水出水量的1/3, 是水龍頭內阻塞? 還是熱水水管阻塞? - Mobile01行動版 - http://goo.gl/NTBrl  面盆沐浴

合併多個 Excel 檔到一個工作表中

最近工作遇到一個問題,需要去檢驗近千個檔案的內容是否有問題。檢驗的方式雖然可以透過函數來判斷,但是上千個檔案量光是打開就覺得麻煩,覺得在驗證之前一定要把檔案想辦法合併起來。 巨集合併 M Riza 先生提出一個很棒的方法," Merge multiple excel files into a single spreadsheet (MS Excel 2007) "。 Step by Step 開啟 Excel,按下 Alt + F11 叫出巨集編輯器,貼入網站中的 Code 修改第8行的路徑,改成需要合併的 Excel 檔存放路徑 按下執行鍵就 OK 了 心得 儘管是 CSV 檔案也能正確合併。 這邊要注意一件事情,Code 當中的 A2 是起始的儲存格,在合併過程中會忽略掉標題列,直接從第二列開始複製;若是你想連標題列都合併起來,請改成 A1。IV 是他的複製欄寬,可以改成自己想要的欄寬。 Range("A2:IV" & Range("A65536").End(xlUp).Row).Copy 值得注意的是,雖然這個方法是給 Excel 2007 使用,但 Excel 2007 開始有個重大變化,就是 Excel 最大列數從 2^16 次方改成了 2^20 次方。這代表你可以處理的資料從 Excel 2003 的 65,536 筆增加至 1,048,576 筆。 心得第二點的發現是因為我合併了所有的檔案,還很慶幸原來只有六萬多筆,最後慚愧地發現原來資料數量有三十萬筆,而 Code 當中卻只設定到 65,536 筆,只需要把 A65536 改成 A1048576 即可。 2^4 代表的是16倍的資料處理量,過去 Excel 2003 只能處理六萬筆資料,如今拜軟體、處理器的提升,我們比起過去的人擁有更大的優勢來處理資料,感謝技術的進步。 JMC Excel JeeShen Lee 李毅胜先生也寫了一個 Excel 巨集," JMC Excel – Join, Merge, Combine multiple Excel sheets or Excel workbooks ",畫面是我喜歡的簡潔類型,試用版可以一

ASUS 主機板驅動全裝卻還有黃色驚嘆號?也許你少裝了這個…

今天重灌了一台電腦,主機板是 ASUS P9X79 WS ,照例上了 ASUS 的官網下載了相關的驅動程式安裝,因為原始的驅動程式光碟已經毀損無法使用。 等到全部安裝完,連 Windows 7 的更新結束後, 裝置管理員 內的部份硬體依然出現黃色驚嘆號( yellow exclamation mark ),這顯然代表我有什麼東西沒有裝到。 問題:安裝了所有驅動程式,還是有部份裝置沒被驅動 SM匯流排控制器 基本系統裝置( Base System Device ) x N 個 解決:你可能真的有東西沒裝到,例如… 我通常安裝的都是置頂的晶片組驅動程式,也就是使用綠色框框的 MEI 驅動程式,安裝完成之後也的確可以正常運作。 MEI Intel(R) Management Engine Interface 我再回頭到官網看一下,奇怪,為什麼舊版本的驅動程式反而容量大許多,新版只有59MB,舊版卻有 255MB。 好奇安裝了一下,黃色驚嘆號竟然全部消失了。該死,原來我一直少裝這款驅動程式。 Chipset Intel(R) Chipset Software Installation Utility 如果你有相同問題,不妨回頭到官網,找一下 Chipset 驅動程式,就挑最容量大的那個吧!