RPA界面元素智能自适应定位与操控技巧-金克

本文详细了RPA界面元素的应用技巧及其优缺点

RPA界面元素智能自适应定位与操控技巧-金克

什么是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 系统之间进行通信的手段。通过对应用程序窗口发送特定的消息,可以兑现对指定界面元素的点击输入等操纵。RPA界面元素智能自适应定位与操控技巧-金克图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接口,可以让测试程序在某些事件发生后得到通知,比如新窗口打开事件等。

RPA界面元素智能自适应定位与操控技巧-金克图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技巧的初衷也是为了方便残疾人运用,因此对自动化技巧的撑持并不好。

RPA界面元素智能自适应定位与操控技巧-金克图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) 协议来兑现的。RPA界面元素智能自适应定位与操控技巧-金克图4 Citrix Virtual Channel

11 RDP Virtual Channel

RDP (Remote Desktop Protocol) 是微软开发的一套远程桌面协议。RDP 也提供了 Virtual Channel 机制来满足 Client 和 Server 之间的通讯需求。

RPA界面元素智能自适应定位与操控技巧-金克图5 RDP Virtual Channel

12 Selenium

Selenium是一个开源的Web自动化测试工具,它撑持所有主流的浏览器,可以兑现打开浏览器,获得网页界面元素数据,保存网页截屏等操纵。

RPA界面元素智能自适应定位与操控技巧-金克图6 Selenium执行过程

13 Chrome Extension

Chrome 浏览器插件是允许开发者自定义用户运用体验的一种技巧。可以利用 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界面元素智能自适应定位与操控技巧融合了当前主流的自动化技巧,通过高度抽象兑现不同自动化技巧的统一挪用,通过基于规则的自动化技巧切换器兑现不同自动化技巧的智能切换。

RPA界面元素智能自适应定位与操控技巧-金克图7 智能元素捕获器架构图

以捕获和操纵运用JAB自动化技巧的Java应用程序为例。运用者先用界面元素分析器捕获指标元素,此时根据鼠标点击的位置,界面元素分析器可以获得指标元素所在的窗口以及窗口所属的应用程序并拿到窗口和应用程序的信息。根据这些信息,自动化技巧切换器将根据规则选择最合适的自动化技巧。在这个例子中会智能切换到JAB自动化技巧。接下来,界面元素分析器会挪用“获得指定位置下的指标元素”这个方法获得指标元素,该方法的底层兑现基于JAB自动化技巧,该指标元素所具有的属性和撑持的方法也都是通过JAB自动化技巧得到的。这些属性和方法也是抽象的,通过JAB自动化技巧获得到的属性role会被映射为标准的control,通过JAB自动化技巧获得到的方法Click会被映射为标准的Invoke。运用者想要兑现点击指标元素,只需要按照统一的规则挪用Invoke方法即可,不需要关心该方法底层是如何兑现的。

定位指标元素还存在一个很常见的问题,指标元素的属性和在UI中的位置偶尔会发生变化。例如有些窗口标题会带版本号,一旦更新应用程序就会发生变化。当这些发生变化时,就有可能定位失败。为了更好地定位元素,用户界面被抽象为了一个文档对象模型(Document Object Model),撑持运用CSS语法和XPath语法的元素选择器定位指标元素,元素选择器是一段文本,包含了元素的属性和层级关系,撑持模糊立室。

RPA界面元素智能自适应定位与操控技巧-金克图8 DOM 结构

文档对象模型常用于操纵HTML和XML数据,它将整个文档抽象为逻辑上的对象,然后定义了访问和操纵这些文档的方法。文档对象模型独立于任何系统平台和编程语言,运用文档对象模型提供的方法,可以构建文档、导航其结构以及添加、修改或删除元素和内容。用户界面也可以抽象成一个文档对象模型,形成一个树结构,每个界面元素都是用户界面树的一个节点,每个节点都是一个抽象的元素对象,有相同的属性和方法。在界面元素分析器和应用程序的通信过程中,跨系统兼容的自动化技巧切换器会根据获得到的应用程序信息按照规则自动切换,对接相应的自动化技巧接口,用获得到的界面元素信息来构建抽象元素对象以及文档对象模型。

在元素分析器界面,可以看到用户界面树的整体结构和每个界面元素的各种属性,通过定位语句,可以定位到满足定位语句的指标元素。定位语句采用自研语法解析技巧,同时撑持CSS语法和XPath语法,撑持按属性精准立室、前缀立室、后缀立室和模糊立室,撑持描述元素间的后代关系、父子关系和兄弟关系,自由度极高,适应用户界面变化能力强。捕获元素后会自动生成适合的元素选择器,运用者也可以在此基础上手动修改以提高定位的灵活性和准确度。

RPA界面元素智能自适应定位与操控技巧-金克图9 Windows元素捕获器

RPA界面元素智能自适应定位与操控技巧同样撑持国产操纵系统,国产操纵系统大多是基于Linux改造的,借助Qt-at-spi技巧,可以通过Linux的调试接口获得到图形界面上应用程序的界面元素。针对不同的国产操纵系统,具体兑现细节有所区别。通过封装,兑现了各国产操纵系统和Windows操纵系统接口的统一。

RPA界面元素智能自适应定位与操控技巧-金克图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年上海“张江工匠”获得者。

给TA打赏
共{{data.count}}人
人已打赏
AI

多模态文档LayoutLM版面智能明白技术演进-纪传俊

2022-12-20 15:28:00

AI

Lidar 3D传感器点云数据与2D图象数据的交融标注

2022-12-20 15:30:00

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
搜索