什麼是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年上海“張江工匠”獲得者。