RPA技術實現

目錄

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相關技術的實現思路,更深層次的內容將在後續陸續更新...

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章