什麼是RPA?RPA(Robotic Process Automation,機器人流程自動化)是通過特定的、可模擬人類在計算機界面上進行操作的技術,它可以按規則自動執行相應的流程任務,代替或輔助人類完成相關的計算機操作,從而節約人力成本,提高生產效率。
從RPA的定義就可以看出,對計算機界面的操控是RPA的核心之一。要實現對計算機界面的操控,就必須用到RPA界面元素定位和操控技術。
元素定位與操控技術
界面元素是指用於構建系統或應用程序的所有圖形用户界面部分,例如窗口、輸入框、按鈕等。通過顯示器、鍵盤、鼠標等計算機外部設備,人能夠實現在指定輸入框輸入文本、點擊指定按鈕等操作,和操作系統以及業務系統進行交互。同樣的,RPA要代替人完成這些操作,就需要能夠定位和操控這些界面元素。
界面元素定位與操控方法有很多,主要區別在於是否使用GUI(Graphical User Interface, 圖形用户接口)自動化技術。非GUI自動化技術有:絕對座標定位、圖像匹配定位、基於消息操作、模擬鍵鼠操作等。GUI自動化技術有:Win32、MSAA、UIA、JAB、SAP、Citrix Virtual Channel、RDP Virtual Channel、Selenium、Chrome Extension等。通常來説,GUI自動化技術能獲取到的界面元素的信息更多,支持的操作也更多,但同時侷限性也更大,一種GUI自動化技術往往只支持幾個界面元素框架,實際使用起來也會更困難。
下面列舉幾種常用的自動化技術並給出優缺點分析。
01 絕對座標定位
絕對座標,是指屏幕中固定的座標位置,當界面元素總是處於屏幕中固定座標位置時,就可以使用絕對座標來進行定位。這個方法非常簡單方便,在特定場景下非常好用。但是一般要求屏幕分辨率和應用窗口大小固定,而且無法保證定位到的界面元素是否正確。
02 圖像匹配定位
圖像匹配,在待匹配圖像中尋找與目標圖像相似性高的單個或多個目標,並獲取目標的座標位置。圖像匹配可以和絕對座標定位相結合,先使用絕對座標定位,再用圖像匹配做校驗;也可以先劃定屏幕中的某個區域,在此區域內進行圖像匹配,以達到提高準確率、加速匹配過程的目的。
圖像匹配的方法非常多,模板匹配使用空間二維滑動模板進行匹配,將目標圖像在待匹配圖像中滑動;特徵匹配提取圖像的特徵,再生成特徵描述子,最後根據描述子的相似程度對兩幅圖像的特徵之間進行匹配;深度學習也可用於圖像匹配之中,例如,使用OCR技術可以定位到包含指定文本的圖像。
03 基於消息操作
這裏的消息指的是操作系統的消息。Windows 是一個消息驅動的系統,Windows的消息提供了應用程序之間、應用程序與Windows 系統之間進行通信的手段。通過對應用程序窗口發送特定的消息,可以實現對指定界面元素的點擊輸入等操作。
圖1 Windows消息機制
04 模擬鍵鼠操作
模擬鍵鼠可分為消息模擬、API模擬、驅動模擬三種。消息模擬基於windows的消息機制,向目標窗口發送鍵鼠消息。API模擬就是用Windows提供的API實現模擬輸入。驅動模擬就是通過驅動程序,在系統內核裏面操作I/O端口,給連接鍵盤的集成電路發送指令,讓它產生一個按下按鍵的信息,這樣你的模擬輸入對於所有程序來説就是從一個真實的設備發出的。
05 Win32 API
Win32 API是微軟第一代應用程序可訪問API。Win32 API出現在.NET之前,是底層的Windows API。它支持MFC、VB6、VCL、簡單的WinForms等窗體。
Win32自動化技術基於HWND(窗口句柄),一般需要通過 FindWindow、 EnumWindows 來查找目標窗口的句柄,然後再調用其它 API,例如 GetWindowText、GetWindowRect等來獲取窗口屬性,以此來定位目標元素。定位到目標元素之後,可以通過Win32 API實現對目標元素的操控。例如使用SetWindowText來設置顯示的文字,使用SetActiveWindow來激活窗口等。
優點:
- 對標準Windows控件支持良好
缺點:
- 過於底層,調用複雜。例如:Win32 API查詢窗體需要逐層獲取窗體句柄進行遍歷查找
- 技術落後,用途不廣。例如:Win32 API對新UI框架以及自定義控件的支持很差。
06 MSAA
MSAA(Microsoft Active Accessibility)是微軟第二代應用程序可訪問API。MSAA旨在幫助輔助技術產品與應用程序(或操作系統)的標準和自定義用户界面元素進行交互。它支持WFC、VB6、VCL、WinForms、WPF等窗體。
MSAA 主要基於 COM 技術。提供信息的應用程序被稱為 Server;獲取信息的應用程序被稱為Client。首先Client調用AccessibleObjectFromWindow傳入Server窗口的HWND。
然後AccessibleObjectFromWindow函數向Server發送WM_GETOBJECT消息。Server創建並實現了IAccessible,之後通過LresultFromObject 把IAccessible 返回給Client。最後Client調用IAccessible定位和操作Server中的界面元素。
優點:
- 相較Win32 API更簡單易用。使用者只需要和 IAccessible 進行交互,也不需要直接使用windows消息來操作目標元素。
- 相較Win32 API支持了部分自定義控件。前提是開發人員在實現自定義控件的同時實現了 IAccessible 的接口。
缺點:
- 功能不全。MSAA技術的初衷是為了方便殘疾人使用Windows 程序,對自動化來説還是不夠,僅支持對界面元素的一些基本操作。
07 UIA
UIA(Microsoft Active Accessibility)是用於替代MSAA的應用程序可訪問技術。和MSAA不同,UIA技術的初衷是提供UI的可訪問性。它支持MFC、WinForms、WPF、Store apps、Qt等窗體。
UIA定義了全新的、針對UI自動化的接口和模式。分別是支持對界面元素進行遍歷和條件化查詢的TreeWalker和FindAll。定義了讀寫UI元素屬性的UIA Property, 包括Name、 ID、Type、ClassName、Location、 Visibility等等。定義了UI元素行為的UIA Pattern, 比如Select、Expand、Resize、 Check、Value等等。還引入了UIA Event接口,可以讓測試程序在某些事件發生後得到通知,比如新窗口打開事件等。
圖2 UIA架構圖
優點:
- 支持的UI框架更豐富。例如WPF和Silverlight中的子窗口和控件並不是傳統的HWND,所以Win32 API和MSAA無能為力,而UIA可以直接支持這兩種程序。
- 兼容傳統的Win32和MSAA模式。前面提到過,UIA技術的內部實現可以多樣化。針對傳統程序,UIA可以在內部實現中借用MSAA的接口和直接調用Win32 API。
- 高度抽象,易於使用。例如執行點擊按鈕操作, UIA 統一歸類於Invoke, 無論是Win32、 WPF還是Silverlight按鈕,都可以通過Invoke實現點擊,不用關心具體實現方式是模擬鍵鼠還是調用Windows API。
缺點:
- 編碼過程複雜。對於一個UI窗口,裏面可能有幾十個子控件或者子窗口。在編寫測試代碼的時候, 如果對這些子元素的獲取,操作不能簡化, 勢必導致代碼冗繁,難以維護。
08 JAB
JAB(Java Access Bridge)是一項在Microsoft Windows動態鏈接庫(DLL)中公開Java Accessibility API的技術,使實現Java Accessibility API的 Java應用程序對Windows系統上的輔助技術可見。
要使用JAB技術,需要在啓動Java程序前配置好所需的JAB環境。Client需要事先加載WindowsAccessBridge.dll獲取Server提供的接口,通過FindWindow獲取窗口句柄,用IsJavaWindow來判斷篩選出Java程序的窗口。拿到窗口後,可以根據窗口句柄獲取虛擬機編號vmID 和根節點ac。之後就可以使用vmID和ac,通過之前Server提供的接口,來獲取子節點界面元素的vmID和ac、獲取界面元素的信息、以及調用界面元素支持的點擊輸入等方法。
JAB技術的初衷也是為了方便殘疾人使用,因此對自動化技術的支持並不好。
圖3 JAB架構圖
09 SAP
SAP 提供了 Scripting Engine 來進行用户界面自動化。SAP Scripting Engine 是一套基於 COM 的接口,提供了 SAP 全面的腳本化支持。
10 Citrix Virtual Channel
Citrix 提供了 Virtual Channel 的機制來滿足 Client 和 Server 之間的通訊需求。利用 Virtual Channel,我們可以向 Citrix 虛擬桌面發送任意指令、獲取業務所需信息。Citrix 是基於 ICA (Independent Computing Architecture) 協議來實現的。
圖4 Citrix Virtual Channel
11 RDP Virtual Channel
RDP (Remote Desktop Protocol) 是微軟開發的一套遠程桌面協議。RDP 也提供了 Virtual Channel 機制來滿足 Client 和 Server 之間的通訊需求。
圖5 RDP Virtual Channel
12 Selenium
Selenium是一個開源的Web自動化測試工具,它支持所有主流的瀏覽器,可以實現打開瀏覽器,獲取網頁界面元素數據,保存網頁截屏等操作。
圖6 Selenium執行過程
13 Chrome ExtensionChrome
瀏覽器插件是允許開發者自定義用户使用體驗的一種技術。可以利用 Web 技術,如 HTML、CSS、JavaScript 來自定義瀏覽體驗。
智能定位與操控技術
從之前的介紹可以看到,系統和應用程序的界面元素框架種類繁多,不同應用程序需要的自動化技術不盡相同,例如Chrome瀏覽器需要使用Web自動化技術、Oracle ERP需要使用Java自動化技術、SAP需要使用SAP自動化技術;同一種應用程序在不同操作系統上,自動化的實現方式也有所差別,例如大多數RPA產品都依賴Windows的.Net框架來操控應用程序,在Linux等操作系統上完全無法使用。
以Chrome瀏覽器為例,多數RPA產品會選擇使用開源的Selenium來實現對Chrome瀏覽器的自動化操控。Selenium是一個著名的Web應用測試工具,它提供了豐富的API接口,可以非常方便的被Python、Java等語言調用,同時也存在驅動版本必須和瀏覽器版本嚴格對應,以及容易被網頁檢測到等缺點。Selenium無法用於操控其他應用程序,因此需要單獨為瀏覽器設計一整套自動化控制模塊。較為成熟的RPA產品通常會選擇自研瀏覽器插件,用插件實現相同的功能。自研瀏覽器插件可以將瀏覽器和其他應用程序的自動化接口進行統一,但是遺憾的是,很多RPA產品並沒有這麼做。將瀏覽器作為特例或許會方便熟悉網頁測試技術的開發者快速上手,但對於不熟悉相關技術的開發者,無疑增加了巨大的學習成本。
由於上述原因,RPA流程開發需要考慮流程共涉及幾種自動化技術,會在幾種操作系統上運行。RPA開發人員不僅需要了解業務系統的每一部分使用了何種自動化技術,在開發中選用正確的模塊,還需要了解流程會在哪些操作系統上運行,為每種操作系統開發一個單獨的流程。隨着RPA涉及業務系統的範圍擴大,以及國產操作系統的普及,流程開發成本將大幅提高。
RPA界面元素智能自適應定位與操控技術將這些自動化技術進行了統一,對不同操作系統做了兼容。在RPA流程開發過程中不需要區分自動化技術,同一流程可以在不同操作系統中直接運行,能大幅降低開發成本。
智能定位與操控的技術實現
RPA界面元素智能自適應定位與操控技術融合了當前主流的自動化技術,通過高度抽象實現不同自動化技術的統一調用,通過基於規則的自動化技術切換器實現不同自動化技術的智能切換。
圖7 智能元素捕獲器架構圖
以捕獲和操作使用JAB自動化技術的Java應用程序為例。使用者先用界面元素分析器捕獲目標元素,此時根據鼠標點擊的位置,界面元素分析器可以獲得目標元素所在的窗口以及窗口所屬的應用程序並拿到窗口和應用程序的信息。根據這些信息,自動化技術切換器將根據規則選擇最合適的自動化技術。在這個例子中會智能切換到JAB自動化技術。接下來,界面元素分析器會調用“獲取指定位置下的目標元素”這個方法獲取目標元素,該方法的底層實現基於JAB自動化技術,該目標元素所具有的屬性和支持的方法也都是通過JAB自動化技術得到的。這些屬性和方法也是抽象的,通過JAB自動化技術獲取到的屬性role會被映射為標準的control,通過JAB自動化技術獲取到的方法Click會被映射為標準的Invoke。使用者想要實現點擊目標元素,只需要按照統一的規則調用Invoke方法即可,不需要關心該方法底層是如何實現的。
定位目標元素還存在一個很常見的問題,目標元素的屬性和在UI中的位置偶爾會發生變化。例如有些窗口標題會帶版本號,一旦更新應用程序就會發生變化。當這些發生變化時,就有可能定位失敗。為了更好地定位元素,用户界面被抽象為了一個文檔對象模型(Document Object Model),支持使用CSS語法和XPath語法的元素選擇器定位目標元素,元素選擇器是一段文本,包含了元素的屬性和層級關係,支持模糊匹配。
圖8 DOM 結構
文檔對象模型常用於操縱HTML和XML數據,它將整個文檔抽象為邏輯上的對象,然後定義了訪問和操作這些文檔的方法。文檔對象模型獨立於任何系統平台和編程語言,使用文檔對象模型提供的方法,可以構建文檔、導航其結構以及添加、修改或刪除元素和內容。用户界面也可以抽象成一個文檔對象模型,形成一個樹結構,每個界面元素都是用户界面樹的一個節點,每個節點都是一個抽象的元素對象,有相同的屬性和方法。在界面元素分析器和應用程序的通信過程中,跨系統兼容的自動化技術切換器會根據獲取到的應用程序信息按照規則自動切換,對接相應的自動化技術接口,用獲取到的界面元素信息來構建抽象元素對象以及文檔對象模型。
在元素分析器界面,可以看到用户界面樹的整體結構和每個界面元素的各種屬性,通過定位語句,可以定位到滿足定位語句的目標元素。定位語句採用自研語法解析技術,同時支持CSS語法和XPath語法,支持按屬性精準匹配、前綴匹配、後綴匹配和模糊匹配,支持描述元素間的後代關係、父子關係和兄弟關係,自由度極高,適應用户界面變化能力強。捕獲元素後會自動生成適合的元素選擇器,使用者也可以在此基礎上手動修改以提高定位的靈活性和準確度。
圖9 Windows元素捕獲器
RPA界面元素智能自適應定位與操控技術同樣支持國產操作系統,國產操作系統大多是基於Linux改造的,藉助Qt-at-spi技術,可以通過Linux的調試接口獲取到圖形界面上應用程序的界面元素。針對不同的國產操作系統,具體實現細節有所區別。通過封裝,實現了各國產操作系統和Windows操作系統接口的統一。
圖10 UOS元素捕獲
目前RPA界面元素智能自適應定位與操控技術已兼容WIN32、UIA、MSAA、JAVA、SAP、Chrome、IE、Firefox、X11等多種自動化技術。藉助自動化技術智能切換方案,使用過程中選擇器會智能切換自動化技術。切換方案同時支持自定義配置,可以應對特殊場景的需求。達觀全能界面元素選擇器的可拓展性很強,新的自動化技術可以通過公共接口無縫接入,改造和升級都十分方便,不會影響現有的RPA流程。
RPA界面元素智能自適應定位與操控技術同時兼容多種操作系統,包括Windows7 SP1以上的主流Windows操作系統、MAC系統、國產麒麟、統信、中科方德系統等。RPA流程可以輕鬆在這些系統間遷移,相同應用程序的同一界面元素定位語句完全相同,相同操作的底層實現會根據當前運行的系統自動切換。相比之下,其他RPA產品多是基於Windows的Net框架實現的界面元素定位和操控,無法遷移到其他操作系統中運行的。
未來展望
01 兼容更多自動化技術
目前,還有一些自動化技術沒做到兼容,例如Citrix虛擬化應用、RDP遠程桌面等。這些場景下仍然需要開發者採用相應的技術,做針對性開發。後續RPA界面元素智能自適應定位與操控技術將加入對更多自動化技術的支持,進一步優化RPA開發者的體驗。
02 兼容更多操作系統
當下,國產操作系統發展迅速,麒麟、統信、中科方德等國產操作系統的市場越來越大,後續在這些國產操作系統上開發和運行RPA流程的需求也會越來越多。除此之外,移動設備上也有一些運行RPA流程的需求。兼容這些操作系統也同樣在開發計劃之內。
03 開發基於圖像的自動化技術
雖然大多數應用程序都支持自動化技術,但仍有少數應用缺乏相關支持。達觀全能界面元素定位和操控技術將依託公司的自研AI能力,開發圖像自動化技術來解決這一問題。該技術會將用户界面按照不同層級進行智能分割,提取出不同層級的圖像作為元素對象,通過圖像技術構造用户界面樹並提取出元素對象的屬性信息。這一技術將徹底解決應用程序不支持自動化技術的問題,真正做到通用且無侵入的定位和操控界面元素。
作者簡介
金克:達觀數據技術副總裁,負責達觀數據RPA產品團隊組建和研發。在加入達觀之前,聯合創立“飛語云通訊”並擔任CTO,在系統工程開發、大規模併發網絡、Go語言程序設計等方面有豐富的經驗,先後在格爾軟件,愛克發醫療,盛大創新院,飛語等公司就職,有十餘年的軟件開發經驗,帶領團隊參與了信息安全,醫療影像,雲存儲,支付和計費系統、雲通訊平台等的研發工作。2021年上海“張江工匠”獲得者。