顯示具有 iMacros 標籤的文章。 顯示所有文章
顯示具有 iMacros 標籤的文章。 顯示所有文章

2014年8月12日 星期二

iMacros進階篇

我在之前的「讓您的瀏覽器也能自動工作」文章中曾經介紹了iMacros,這是一種瀏覽器的外掛程式,提供適用於瀏覽器的巨集程式的功能,讓您可以透過錄製或者自行編寫巨集的方式讓瀏覽器也能夠自動工作,官方網站上iMacros建議可應用於以下的情景:
表單填寫和密碼管理
您可以將常用的輸帳號密碼步驟錄製下來,往後便可不需要重複進行此步驟便可自動登入;另外一個非常好用的方式是,當您的朋友需要登入,但您又不想將密碼讓他知道,在錄製時,您可以設定將密碼部份加密,再將錄製的檔案給他執行就可以了,如此一來,您就可以讓他可以登入但無法獲知密碼內容。
自動下載和上傳
您可以透過iMacros自動進行重複性的檔案上傳或下載的動作。
資料獲取,網頁抓取/開採和企業資料重組
這部份是iMacros最強大也是最廣為應用的功能之一,您可以自行修改iMacros成為強大的網路蜘蛛或機器人,替您抓取Internet上的資料轉化為有用的資訊。
網頁測試
網頁相關工作者可以使用iMacros對網頁進行各項自動化的測試。內建的中斷點查看命令可以精確的捕捉網頁反應時間,iMacros也可以支援許多AJAX元素,只要錄製好步驟程序,便可以各個不同的瀏覽器版本上執行並查看其效果。
遠端執行
和版的iMacros提供雲端的功能,讓您可在任何有網路及瀏覽器支援的地方就可以執行之前所錄製的巨集程式。
雖然iMacros這套軟體的基本版是免費的,但是它只能單純的錄製及修改程式而已,需升級到進階版才有提供更多像是與其它程式溝通整合的功能;在一般的需求下,或許我們只需要錄製便可達到使用目的,但在「資料獲取,網頁抓取/開採和企業資料重組」這個一般企業經常會使用到的功能上,若不考慮購買商業版,就只能透過本文所介紹的動態產生方式才能達成,故本文的重點在於介紹如何利用免費版本就可以擁有或開發出媲美進階版本的程式與應用。

靜態與動態

    我們錄製出來的iMacros巨集,它的巨集內容是固定不變的,因此只能重複性的進行相同的步驟,無法根據外在環境變化而改變下一個行為步驟,我們可以稱它是靜態的巨集。
如上圖,靜態巨集必須根據不同的狀況製作不同的巨集。
如果您的要求的行為很單純,比如每天固定抓取某個網站的前幾筆資料、按時去點擊某個固定區域或Button、或者自動張貼文章傳送檔案,這些動作我們用靜態的巨集就可以應付了,但如果有一天,您的需求是要依據前一天的最熱門的新聞主題,並依其關鍵字下載相關的新聞內容儲存到資料庫中,或者說,您有一個資料表,裏面有各項隨時會變動的資料,您希望能夠抓取資料表的內容並自動填寫在網頁表格中傳送出去,那麼,您會發現這種靜態的巨集無法滿足需求,我們需要能夠因應不同的狀況動態的產生相對應巨集內容的程式才行。
    由於我們需要依據不同的狀況來執行對應的巨集程式,因此,如果我們事先製作一個可動態產生巨集的程式,讓它依據不同的需求產生相對應的巨集,就可以滿足這類的需求狀況:

如何產生動態巨集?

    這部份就是本篇文章的精華所在,由於我們不是購買iMacros的商業版,因此無法直接與外部程式串連來改變iMacros執行過程中的內容,但還是有其它的方法讓我們透過其它程式來動態的產生巨集,我們的作法如下方的流程圖,利用web server依據不同的需求產生相對應的巨集,再交由iMacros來執行,此server端程式可以用任何網頁語言來編寫,在這裏我們用PHP來作示範。

確認系統架構

    我們先模擬一個比較單純的需求狀況,假設你打算要架設一個網站,專門提供網友們二手物品的自動搜尋及價格分析功能,讓使用者能夠在網頁上註冊他們感興趣的物品,並設定一個希望購買價格,然後系統就會每日按時搜尋包含eBayAmazon、露天、Yahoo、DCView、Mobile01、KeyBuy等二手拍賣網站,找出他們感興趣的商品,記錄及計算平均價格變化,除了每日系統會寄發相關的價格趨勢統計圖表之外,當有某個拍賣商品達到了網友預定的價格區間(低於希望購買的價格),系統立刻會自動寄發email給網友,告訴他在某個拍賣網站上的某件商品達到他預定的價格,可以考慮是否購買。
    下圖是我們的系統架構圖,看來似乎有些複雜,但其實它的步驟可歸納如下:
使用者輸入資料(1~2) 系統讀取使用者的資料後,產生iMacros巨集並執行(3~7) 從儲存的網頁中萃取重要的資訊(8~9) (10~12)如果是線上查詢,則顯示結果列表,若為查詢登錄,則定時地比較分析,每日發送價格訊息,若有符合商品則額外email通知。
在本文後半部我將僅針對3~7的步驟說明其作法。

準備平台

    由於本文使用PHP作為iMacros巨集產生的工具,因此我們需要架設Apache + PHP的環境,如果您使用Windows,可以在google上搜尋LAMP + Windows,找一套適合的來安裝。
    當您裝好了之後,可以確認看看PHP這個指令可以單獨work,如果您經常使用PHP來開發程式,能夠直接透過command執行PHP程式是非常方便的事,而且也可以把PHP寫成獨立的程式讓server去執行;若PHP無法執行的話,先檢查您的環境變數,看看PHP指令所在的路徑有沒有定義在PARH環境變數中,可以試試輸入php –version看看這個php 指令是否work。





品名及價格輸入介面

    我們先製作一個網頁頁面讓使用者能夠輸入品名及價格,表單的HTML碼如下,檔名為askprice.html,您可以看得出來這是一個很基本的表單,讓使用者可以輸入資訊再傳送給askprice2.php。






    它長得就像這個樣子,請記得將網頁放在Apache的文件目錄中,再使用瀏覽器輸入網址http://localhost/askprice.html 就可以開啟它。

錄製巨集樣本

    我們先用錄製的方式得到一個巨集,再利用此巨集作為動態產生的樣本;請注意,因為我們要到不同的網站去查詢並獲取資料,由於不同的網站會有不同的頁面及查詢方式,因此需要針對每個網站分別錄製一個樣本,我在這裏先錄製兩個網站樣本作為示範,錄製的方法如果您忘記了請參考上一篇「讓您的瀏覽器也能自動工作」一文。
    我分別在eBay及露天兩個網站查詢Nikon D800E這項商品,並將查詢結果用另存新檔方式儲存下來,請記得錄製時要錄到另儲新檔為止。


VERSION BUILD=8820413 RECORDER=FX
TAB T=1
URL GOTO=http://www.ebay.com/
TAG POS=1 TYPE=INPUT:TEXT FORM=ID:gh-f ATTR=ID:gh-ac CONTENT=Nikon<SP>D800E
TAG POS=1 TYPE=INPUT:SUBMIT FORM=ID:gh-f ATTR=ID:gh-btn
SAVEAS TYPE=CPL FOLDER=* FILE=+_{{!NOW:yyyymmdd_hhnnss}}

VERSION BUILD=8820413 RECORDER=FX
TAB T=1
URL GOTO=http://ruten.com.tw/
TAG POS=1 TYPE=INPUT:TEXT FORM=ID:srch ATTR=ID:keyword CONTENT=Nikon<SP>D800E
TAG POS=1 TYPE=INPUT:BUTTON FORM=ID:srch ATTR=*
SAVEAS TYPE=CPL FOLDER=* FILE=+_{{!NOW:yyyymmdd_hhnnss}}

更改iMacros的預設巨集目錄

    這是重點所在了,首先,請您先將iMacros的巨集位置設定在Apache的網頁路徑之下,(一般Windows會預設在C:\Apache2\htdocs),在本例中,我設定在C:\Apache2\htdocs\imacros,這樣作的目的是,讓動態產生的巨集檔可以被iMacros讀取得到。
    我們將巨集預設路徑更改到Web server目錄下之後,iMacros就可以讀取到並執行Web server在預設路徑下所動態產生的巨集,避免呼叫iMacros執行巨集時經常發生的找不到巨集的錯誤。

讓PHP產生巨集檔

    接下來,我們要將剛剛所錄製的巨集作為範本讓PHP來產生;我們有兩個巨集檔,它們會分別到eBay及露天去搜尋Nikon D800E這個商品:
            eBay





            露天









    我們把這兩個巨集內容整合成一個,包在一個變數$macro之中,並將該PHP儲存為askprice2.php,放置於askprice.html相同的路徑下:
   










    您會注意到最後一行:file_put_contents("imacros/dcviewtest.iim",$macro);,它會把$macro變數內容,儲存為iMacros的巨集檔放置於imacros路徑下,而這個路徑,也是我們之前已在iMacros中所設定的預設路徑,所以php產生的巨集檔變可被iMacros所執行了。
    還有一點需要注意的是,我們在每一行後面會加上斷行字元\n,這是為了模擬實際的巨集檔案內容。
    最後,我們要將Nikon<SP>D800E這個商品搜尋字串改為承接自上一頁的商品名稱的內容,並且將空白字元替換為<SP>,整個PHP檔案內容更改後如下,黃色的字體代表有更動的地方:














測試看看

     這樣就完成了,您可以試看看在瀏覽器上執行http://localhost/askprice.html,輸入產品名稱後按下submit按鈕,是否有在macros目錄下產生巨集檔askprice.iim,若運作正常的話它應該會自動產生,而且您也可以在瀏覽器的iMacros panel中看到此檔,此時請click它,確認這個巨集檔可以正常的運作。   

讓巨集程式自動被伺服器執行

     確定動態產生的巨集可以正常執行後,表示我們巨集產生的語法是正確的,接下來,我們要讓伺服器去執行該巨集檔,執行時機有兩個考量點:
  1. 即時執行:如果該User是作線上查詢的動作,那麼,我們應當在產生巨集檔後立即執行,並在執行結果產生後擷取並匯整需要的資訊,經過格式化後在網頁上呈現給User觀看。
  2. 事後執行:如果該User選擇預約查詢,那麼我們可讓伺服器定時檢查目錄下是否有 iim巨集檔,若有的話則用指令模式去執行它,此定時執行的程式依不同的主機環境有不同的寫法,您可以用Shell,例如bashcsh等,或者用perl,每隔一段時間去執行該目錄下的iim檔,並將執行結果經過擷取並匯整後,使用email寄發給使用者。
透過指令執行iMacros巨集
  您還記得我曾在上一篇知識文件介紹的,如何用指令方式執行iMacros巨集而不用手動開啟瀏覽器嗎?只要在指令中輸入瀏覽器的執行路徑並帶入巨集名稱就可以了,如下圖,


2014年6月26日 星期四

讓您的瀏覽器也能自動工作

您可能聽過所謂的Office巨集,或者您早已經在使用它來處理日常的重複性編輯工作了!Office巨集可以讓我們透過錄製的方式,將文件的手動操作變成為可修改並重複利用的巨集程式,並且在特定的時間或狀態下可再次執行產生需要的結果,這類附加在MS Office的程式碼我們稱為VBA (Visual Basic for Applications),因此Office巨集也可以稱為VBA巨集,它是我們在MS Office文件處理自動化上的利器。https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5y130720tAMZxAqwOiptTDjI_5PX5-J0tKznYHbb57nOexrf-QJBEBHtk__IjuhvtgnDi4cB4pu5WV2tLvz6hpjVVb6n91k61TQUq-omWzIN1JJl_eHN_iI9CK2NbbyZaiPmZrF6Yrhvi/s1600/imacro.jpg
然而隨著網際網路以及手持設備的流行,大量的程式以及服務被移往雲端,也包含微軟的Office,這些以往僅能在PC端執行的程式,現在我們也可以透過瀏覽器在不同的設備上執行,記得嗎?以前,這些文件編輯作業可是需要找到一台裝有Office的PC,並且能夠讀取到要修改的文件才能打開並開始文件編輯的工作,而現在,只要一台可上網的隨身設備,我們就能隨時隨地、即時處理相關的文件。
因此,「瀏覽器」扮演的角色在我們的生活中顯得愈來愈重要,它無所不在,在任何有需要連上網路的場合我們都會想到它,那麼,既然Office有所謂巨集功能可以讓我們減少重複性的工作,那更常使用的瀏覽器為什麼會沒有?
實際上是有的,iMacros是世界上第一套以瀏覽器為主的巨集程式,我們可以利用錄製的方式,產生一組巨集讓它來重複執行日常的上網動作,也可以自行修改或編寫,創造開發出不同的網路應用。

iMacros可以作什麼?:

對於一般的使用者來說,iMacros可以協助我們完成一些重複的工作,例如表單的填寫、抓圖、定期檢查網站狀態、自動上傳或下傳某些檔案、或者按時張貼一些文章或回覆等等,但對於進階的應用程式開發者來說,這些基本功能是遠遠不夠的,我們會希望作到:
  • 修改並補強iMacros所產生的巨集程式
  • 可以擷取一些難度較高的網站上的資料。(例如大量採用AJAXFlash等技術的網站)
  • 不需開啟瀏覽器,直接利用外部程式(如Shell或PHP.net)來自動啟動iMacros巨集程式執行。
  • 以iMacros巨集模擬使用者的上網行為,自動在網路上擷取所需要的資訊。(網路機器人)
  由於iMacros可以達到自動化控制瀏覽器行為的特性,因此它可以協助程式開發人員更方便的開發出各式各樣不同目的的網路機器人或網路蜘蛛,以便在網路上自動化的執行任務、或者搜集資訊等等,下面我將一步步介紹iMacros的安裝及操作,以及示範如何錄製巨集,未來我會在進階篇介紹如何態動的產生巨集,讓iMacros擁有能夠因應不同網路環境而有不同的自動化動作與因應策略。

iMacros各版本比較:

IMacros是由iOpus公司所開發製作,共有三種版本:免費版Free、標準版Standard、企業版Enterprise,其中它所提供的免費版是以外掛的方式安裝到瀏覽器中作為附加功能的一部份,它支援目前市面上大部份的瀏覽器:IEChrome和Firefox,在下面的例子中我以免費版本搭配Firefox瀏覽器來作示範介紹,而其它版本的瀏覽器除了外掛的安裝方式不同外,在iMacros的使用操作上都是大同小異。
iMacros功能
免費版
標準版
企業版

Free
Standard
Enterprise

Playback




Manual iMacro Playback
check
check
check

Playback Unencrypted Macros
check
check
check

Playback Encrypted Macros


check

iMacros Playback via API


check

Create Custom Passwords for Encrypted Macros


check

Scripting / Recording




Macro Recording
check
check
check

Macro Editing (Unencrypted Macros)
check
check
check

Macro Editing (Encrypted Macros)


check

Internet Explorer: Automate via API


check

Firefox: Automate via API


check

Chrome: Automate via API


check

Password Encryption
check
check
check

Popup Manager
check
check
check

Support Flash, Silverlight, Java, Flex

check
check

Image Search / Recognition

check
check

DirectScreen

check
check

Automation & Testing




Website Response Time Measurement
check
check
check

Use of Variables
check
check
check

Command Line Interface

check
check

Task Scheduling

check
check

Batch File Support

check
check

Runs in Background (Tray)

check
check

Scripting Interface (API)


check

Windows Scripting Host Support (API)


check

MS Office, Excel VBA Scripting


check

MS .NET Support (VB.NET, C#, J#, ASP.NET) (API)


check

API Supports All Scripting/Programming Languages


check

Data Input




Use CSV as input to iMacros
check
check
check

Read data from text files as input to iMacros
check
check
check

Read data from databases (API)


check

Read / Write XML files (API)


check

Web Page Data Extraction




Extract Webpage Data
check
check
check

Save data as CSV file
check
check
check

Use of iMacros API


check

Service / Support




Expert Technical Support

check
check


如果您只需要單純的錄製巨集、簡單的修改、再進行播放以重複進行錄製的動作,那麼免費版本便已經很足夠了,付費版本最主要的差異在於:支援了多項API巨集加密、自動化執行以及第三方程式支援(ASP.net、VBA巨集)等,這些付費功能可以作到相當強大且高度自動化的應用程式,但在我會在往後的知識文件中,另外介紹另一種方式,讓iMacros透過線上動態產生巨集檔的方式,讓免費版本也能擁有類似的自動化以及與外部程式串連的功能。

下載與安裝iMacros:


首先,我們到http://imacros.net/download頁面,找到最下方的iMacros Free Versions區段,再下載適合您瀏覽器版本的iMacros外掛;在這裏,因為我將以Firefox作示範,所以我選擇iMacros for Firefox的外掛。(如左側)


    安裝之後,您會發現多出一個iMacros按鈕,按了它之後便會出現iMacros panel:




開始錄製巨集:

    在iMacros的面板上,選擇第二個TAB「記錄」,您會發現有好幾個按鈕,當您按下最上方的「記錄」按鈕便會開始錄製;我打算錄製的工作是:進入Gmail,將最新的一封郵件(第一封)打開,然後將整個網頁另存到硬碟上。
    首先,我們按下錄製鍵。
    此時,會出現小視窗詢問您要不要關閉所有其它的分頁,若您選擇是,則會自動加入關閉所有分頁的程式碼到錄製的巨集開頭,當然它也會自動關閉目前所有的分頁;iMacros會如此詢問的原因是目前的瀏覽器多會自動開啟之前結束時的所有頁面,因此,為了避免錄製的巨集在執行時會一併打開太多的網頁,一開始便關閉其它不需要的頁面是不錯的選擇,您在此可以視需要選擇是或否,差別只在於巨集的開頭是否會多出一行關閉所有頁面的程式碼。
我先進入了Gmail信箱

開啟最上方的email

再按右鍵選擇另存新檔儲存在D:\temp下。
在錄製過程中,iMacros自動記錄了每次的點擊與鍵盤輸入、URL的變動、表單的項目、按下的按鍵以及儲存的畫面;最後我們按下「停止」鍵,結束整個錄製過程。
「記錄」按鈕下方的「儲存」按鈕可將目前的巨集儲存在本機電腦,方便我們往後叫用;在此我們將剛剛錄製的巨集取名為LastGmailSave
我們來試run一下剛剛所錄製的巨集,看看能否重複執行剛剛的動作;我們點擊兩下剛剛儲存的巨集LastGmailSave,便會發現瀏覽器開始自動重複剛剛的步驟了。
但意外的是,iMacros進入到Gmail後便停止了,並沒有開啟第一封email的內容,因此,我們打開LastGmailSave的巨集內容,看看可否找出失敗原因:





我們注意到TAG POS=2 TYPE=B ATTR=TXT:iOS<SP>8<SP>beta<SP>2<SP>is<SP>now<SP>available.這行,看其內容大致就可猜測到iMacros是抓取email的主旨元件而非第一封email的位置,因為第一封郵件的內容隨時都可能不同,因此,我們需要修改iMacros的錄製行為讓它改用位置的方式來判斷,才能正確的抓取第一封email。我們點選面板上的Record options按鈕,看一下設定錄製時的物件參考方式:
  1. ”Select the best record mode automatically”:是指由程式自動選擇最合適的錄製方式,不過,看來在錄製類似Gmail有動態內容的網頁時它無法正確判斷。
  2. ”Experimental event recording  mode”:這是最近才加入的新錄製功能,它以偵測事件方式來錄製,可以輔助以往使用物件標簽偵測的肓點,例如以下的事件:
    Drag & Drop(拖拉)、Sliders(捲軸)、Tricky date control日曆工具框、Ajax drop&down boxes(Ajax式的拖曳盒)
  3. “Conventional recording mode”:以網頁上的物件標簽來判斷
  4. “Use X/Y position”:使用網頁X/Y軸相對的網置來判斷,此方式對於內容經常會變  動的網頁相當合適。
我們選擇最後一項“Use X/Y position”之後再錄製一次,這次便可成功的播放剛剛錄製的動作了!當您發現所錄製的巨集無法順利的重複執行時,其實很多時候都與滑鼠的點選位置有關,因為很多的網頁內容是動態的,經常在下一個時刻網頁內容就已經變動了,如果我們單純的只使用X/Y軸位置或者抓取固定某個網頁元件的方法來操控網頁動作,往往過了一段時間便錄製的巨集便會失效無法執行了,因此,我們必須要針對不同的網頁找到合適的錄製方法。

瞭解iMacros指令:

我們在錄製好的巨集上按下右鍵,透過編輯功能會發現它有各式各樣的指令,且這些指令可能會隨著iMacros的版本或瀏覽器不同而有所改變,下方我簡要介紹幾個基本的指令,其它詳細的指令列表及更清楚的說明可參考這裏:http://wiki.imacros.net/Main_Page
我們以下列的巨集作為範例來說明:






01~03行是注釋,只要是由 符號開頭的文字,這一整行iMacros都會認定為注釋而不予執行。
04行是讓iMacros等待240秒的時間,讓網頁可以完整的被載入。
05行是讓iMacros忽略任何的錯誤,因此在程式在執行過程中不會因發生錯誤而停下來;如果您設定為NO,那麼iMacros在碰到錯誤時,會彈出一個視窗,直到您關閉此視窗後,程式才會繼續執行;這個功能多用在程式開發階段的除錯使用。
06行,當你的巨集需要從網站匯入資料時,iMacros會將資料顯示在一個彈出視窗中,方便您檢視比對。
07行,如果你的巨集程式不需要下載圖片檔案,那麼可以在此設定,以減少網頁下載的時間,還可以節省頻寬。
08行,此指令是用來清除cookie,清除cookie可以讓執行環境更單純,也可避免cookie的內容被iMacros程式所使用;但如果你希望讓巨集程式使用目前的cookie來登入各網站,那麼就要小心避免清除了cookie內容。
09行,目前的瀏覽器都有支援tab功能,讓我們在同一個瀏覽器中就可以開啟多個網站並利用tab來切換,而此行是告訴iMacros程式使用第一個tab的頁面。
10行,告訴iMacros要關閉除了第一個tab的其它頁面。   






讓iMacros自動執行:

    當我們錄製好了巨集,並且在點擊它們後也都可以正常的執行之後,那麼接下來,我們會碰到一個問題:難道每次都要手動開啟瀏覽器,再click這些巨集嗎?要怎麼讓這些巨集自己自動執行呢?    可以的,透過DOS command和windows 7系統工具中的工作排程器,我們就可以將這些iMacros巨集在指定的時間自動執行。

    第一步:加入書籤

        首先,我們將剛剛建立的巨集,在它的上方按右鍵,選擇添加到書籤。
您會看到有兩種書籤型式可選擇,如果您是用FireFox或IE用第一種就可以了,如果是Chrome,就依其建議選擇第二種;    其實待會兒需要用到的是紅圈的部份,我們將URL中的值反白選取,按CTRL+C複製到系統剪貼簿中。


   









    第二步:使用DOS command

    我們開啟一個DOS命令視窗,輸入瀏覽器執行檔的執行路徑(可在桌面上的瀏覽器圖示上按右鍵選擇內容的資訊中看到),後面再貼上剛剛複製到系統剪貼簿中的URL內容(按CTRL+V),OK後按ENTER鍵,便會看到瀏覽器被開啟並且開始執行指定的巨集。




    第三步:將剛剛的DOS command放在工作排程器中定時執行

    在第二步測試成功之後,您便可以將該指令寫成一個bat批次檔,放在windows的工作排程器中讓它在指定的時刻來執行。

結語:

    透過基本的iMacros巨集的錄製與稍加修改,我們就可以利用它來替我們解決大部份的需求,例如,我們可以將一些新聞網站每天的重要文章內容自動的轉寄到我們的信箱中、傳送網頁簡訊SMS、自動下載當天頭幾條新聞並發送到個人信箱、或者每天定時到Facebook上打卡、張貼文章,如果您放心的話,甚至於例行的銀行轉帳作業也可以透過iMacros來進行。
    不過,如果您的目的是要利用iMacros進行更複雜的行為,例如,自動搜集網路上某些特定的資料,然後匯整到自已的資料庫、監控某個線上交易網站上某個商品的價格並進行即時的警訊通知、或者定時在某個二手拍賣網站上進行搜尋,如果有某件特定商品達到適當的價格,則自動下標並購買…,這些行為,可透過iMacros加上第三方程式的輔助來進行,我會在往後的知識文件中以PHP為例專文介紹。