目錄
1、RPA基本操作
2、RPA技術分析
RPA基本操作
Robtic Process Automation(簡稱RPA),即機器人流程自動化。上一篇《RPA淺談》中聊到,RPA的優點在於模擬人工、跨平臺特性。那麼既然是模擬人工,相關的基本操作不外乎以下幾類(此處以Web操作爲例):
1、訪問指定的網址;
2、找到界面中的元素,即元素拾取
3、給指定元素賦值,如輸入用戶密碼
4、獲取元素信息,如彈框title、內容
5、控件行爲操作,如點擊按鈕、獲取焦點、界面滾動等
6、其他附帶操作,如列表解析、郵件發送、異常兼容等這些屬於代碼層面的能力
RPA技術分析
總結以上的操作,RPA主要的技術點個人認爲就兩點:元素的拾取與控件的操作
元素拾取
很直觀的想法,人對界面元素的定位完全通過視覺發現,大腦分析完成,例如一個登錄界面,立馬知道哪個是登錄按鈕,哪裏填用戶密碼。但是機器要自主完成這看是簡單的操作就不是那麼容易了,機器自主完成的前提就是需要定位到目標元素,也就是所謂的元素拾取。後續的操作都必須建立在定位到元素的基礎上,所以元素的拾取技術是各大RPA廠商相互競爭的核心技術之一,如果在這方面有專利也就意味着在RPA這個遊戲裏有不可替代的優勢。下面基於自己的理解及相關實踐經驗來分析元素識別的相關技術
1、侵入式元素定位
主流的前端開發框架jQuery、Angular、Vue等都封裝了獲取元素句柄的方法,比如jQuery提供的 $("#targetId")便可獲得id="targetId"的元素的句柄,有了元素句柄自然就能爲所欲爲。關鍵是如何獲得這種權限,通常針對指定的目標對象(Web網站),通過一些特殊的方式在指定界面中注入一段js代碼,不僅能定位元素還能調用js方法。由於這種方法過於粗暴,故稱之爲侵入式方式(當然,更有甚者直接用WebView劫持整個目標網站,這裏不展開)。
通過上面的描述可以發現,這種侵入式的方式需要針對特定的網址做對應的操作,太過繁瑣,不具有普遍性,而RPA是一種通用的技術。所以這種技術RPA並不採納(不排除部分廠商在後續惡劣競爭中開這個後門)。
2、DOM結構分析
在HTML5一統天下的時代,規範前端佈局,方便了對界面的分析。比如以下是百度首頁的DOM Tree的一部分
從圖中可以清晰的看到整個百度首頁的H5佈局結構,任何一個元素節點都有一條唯一的路徑可觸達。比如 "百度一下" 這個按鈕,對應的路徑爲:DIV:nth-of-type(1) >... > INPUT:nth-of-type(1) (部分路徑,貼全無意義,重在思路)
或是通過該元素的屬性,id class type等來唯一定位特定的元素。
前面提到的各RPA廠商的專利就體現在這些元素路徑的設計和實現上,在此之下隱藏了一層技術實現。前一篇《RPA淺談》中談到的UI Automation是微軟提供的支持自動化測試的技術,所以在IE瀏覽器的元素拾取上便有對應的“UIA拾取”,另外針對不同的瀏覽器如Chrome、FireFox等都有對應的拾取技術。這塊打算在後續單獨分析。
元素操作
1、侵入式元素操作
這塊基本與侵入式元素定位類似,注入JS代碼就相當於開掛了,基本的界面操作都不在話下。
2、WIN API
技術流程圖如下:
這裏以元素賦值爲例來介紹這個過程
1、前端發起設置屬性的指令,比如封裝了一個叫setText(msg,path,other)的方法
msg:需要賦值內容
path:定位元素相關的信息,即上面提到的元素拾取的位置路徑等。
other:其他輔助的參數
2、通過自定義的解析方法處理setText中的參數,使其滿足USR32.DLL中對應API的參數要求,通常賦值調用的是
int SendMessage(IntPtr hwnd, uint wMsg, IntPtr wParam, string lParam);
hWnd:其窗口程序將接收消息的窗口的句柄,用於標識指定的元素,setText()中的path最終需轉換成對應的hwnd
wMsg:指定被髮送的消息
wParam:指定附加的消息指定信息
lParam:指定附加的消息指定信息
3、剩下就是WIN API內部的實現了,深入到WIN底層就不去糾結了
總結
本文主要介紹RPA相關技術的實現思路,更深層次的內容將在後續陸續更新...