RPA抓屏技术

1,607 阅读16分钟
为了模拟人工在应用程序上的操作,

RPA就必须要与屏幕上各种窗口、按钮、下拉列表等不同要素进行交互,所以RPA中有一项重要的技术,俗称“抓屏”(Screen Scraping)。这里谈到的抓屏技术,并不是传统意义上所说的截屏技术,即将电脑屏幕变成一张图片。抓屏技术是通过终端或显示器来直接抓取界面中的数据,而无须访问底层数据库或者接口,这种技术适用于不能开放或访问的遗留系统。抓屏技术由于提升了流程自动化处理的展示水平,使技术处理过程可以直观地展示在用户面前,因此迅速提升了RPA的易用性和影响力。

1.根据信息抓取技术实现方式分类

根据信息抓取的技术实现方式划分,抓屏技术又可以分为:依据对象句柄元素抓取、依据网页标签抓取、依据图像抓取、利用

OCR识别、依据坐标位置抓取以及其他特别类型的抓取方式。由于依据对象句柄元素抓取和依据网页标签抓取是最准确可靠的方法,所以接下来笔者称其为“标准的抓取方法”。

1)依据对象句柄元素实现抓取

句柄是指操作系统内存里指向某个结构体的指针,如在

Windows中设立句柄是由于内存管理的需要,就像公安部门对社区人口的户籍管理一样,操作系统也需要知道每个应用程序的内存位置,因此Windows用句柄来记载数据地址的变更。句柄标识了应用程序中不同类型的对象实例,如窗口、按钮、图标、滚动条、输出设备、控件或者文件等。同时,Windows也提供了相关的API来获取这些窗口句柄,如FindWindow(获取窗口句柄)、EnumWindows和EnumChildWindows(获取所有顶层窗口以及它们的子窗口)等函数。

例如,

Automation Anywhere中经常被使用的Object Cloning命令,是在右侧窗口显示抓取到的记事本程序窗口的所有属性,但其中一些属性在我们下次打开该程序时是会改变的,如坐标、值(Value)、名称(Name)等,而不变的属性是对象类别(Type)和路径(Path),所以我们就可以将这两个不变的属性作为查询条件,如图3-1所示。当RPA运行时,按照既定的查询条件,我们就可以查询到所需要的TextBox(文本框)。接下来,我们可以使用Set Text(设置文本)、Action(动作)来修改记事本中的内容,如图3-2所示。

3-1 Automation Anywhere中Object Cloning命令示例

3-2 Automation Anywhere中Object Cloning的属性查询窗口

UiPath采用Selector(选择器)选取UI Elements(UI元素)的方式,将图形界面中的要素以及它的父元素转化成XML格式进行存储。该UI元素的选择器显示在模块Selector Editor Panel里,而左边的窗口(Visual Tree Panel)里显示了完整的UI树状图,包含所有的UI元素。在右边的窗口(Selector Attributes Panel)里可以选择或取消某个属性,如图3-3、图3-4所示。

2)依据网页标签实现抓取

大多数

Web网页源代码都是通过HTML语言编写的,页面中的数据通过各种HTML标签所标识,如、、、、等。当我们在浏览器中点击快捷键F12时,网页的全部HTML源代码就会展示出来。不同点是,RPA可以让用户更灵活、更快捷、更精准地获取到所需要的网页内容,而不必采用爬虫技术中的深度或广度搜索,甚至避免了通过种子URL扩展到整个网站页面进行访问或下载。

3-3 UiPath的页面属性查询窗口

3-4 UiPath的Selector(选择器)界面示例

抓取

Web网页中的数据,最重要的就是在页面中准确地定位该数据的位置。目前,经常采用的方式是通过关键值或特征值来查询Web页面中的某个元素,如ID、Name、Tag、Link、DOM、XPath、CssSelector等。就如前面谈到的客户端查询方式一样,这些特征值必须唯一,并保持不变,否则机器人再次打开网页时,就查询不到该元素了。页面中元素如ID、Name、Tag、Link值经常会改变,但页面的结构通常是不变的,所以最常用的页面元素就是XPath和CssSelector。XPath是一种在XML文档中定位元素的语言。因为HTML可以被看作XML的一种实现,因此可以将页面中元素的位置转换为XPath来表示,如XPath=//div[@id='lMenus']/div[1]/div[2]/span[1];CSS(Cascading Style Sheets)是一种用来描述HTML和XML文档表现的专用语言。CssSelector可以为网页中的元素绑定属性,如css=input[name="username"]。这些值通常是稳定且唯一的,如Automation Anywhere中的Object Cloning命令所抓取的页面元素属性,以及Selector中的属性。

为了使页面元素获取速度更快、运行更稳定,

RPA厂商在技术上对浏览器原生的API进行封装。但是由于不同的浏览器厂商对Web页面元素的操作和呈现会有一些差异,这就需要开发者根据浏览器厂商提供的插件来实现。这就是为什么RPA脚本程序在更换终端、浏览器或者浏览器版本之后,都会对RPA运行速度和稳定性造成影响。

现实中应用系统的情况是比较复杂的,由于应用开发者可能会对客户端或者页面元素做封装,或者安全控制等特殊处理,导致无法直接获取对象的句柄或页面的标签。此时,我们就需要采取以下几种辅助技术来处理。

3)利用图像对比技术实现抓取

利用图像抓取技术的主要原理就是预先保存好需要查询的某对象的图像,如一个按钮或下拉控件的图像,当机器人在桌面窗口查询这个对象时,根据预存的该对象的图像对整个窗口的图像做查询和比对。如果匹配成功,机器人就可以获取该图像的坐标位置,进行下一步操作。通常,为了提高图像查询的稳定性,

RPA软件中可预先设置对象图像的比对范围、对比模式、重试次数、精度要求等参数。

图像抓取技术通常是作为辅助手段来使用的,比如

UiPath会利用图像抓取技术选择辅助项作为锚点,再获取相对位置的某个对象元素,如某个对话框。Automation Anywhere的Image Recognize支持在识别对象附近偏移指定像素点的操作。

图像抓取方式的缺点是:查询速度比较慢,远低于前面谈到的直接按照属性查询对象的方式的速度;如果页面中出现两个图像一致的控件对象,或者想获取的对象被隐藏或没有显示在图像中,那么就无法做出准确的抓取了。

4)借助OCR识别技术实现抓取

OCR(光学字符识别)技术是首先扫描识别整个屏幕图像,获取所有的文字信息,然后在其中查询某个关键字,确定它的坐标位置后再做其他处理动作。OCR还可以用来识别某个页面对象中的文字信息,如利用标准的抓取方式获得了某个对象,却无法获得对象中所显示的文字内容,OCR便可以通过该对象所对应的图像信息来识别其中的文字。

OCR识别方式的缺点是:只能对图像已经展示出来的文字进行识别,而对表格中未显示完整的信息就无法识别;另外,受制于界面展示语言的问题,会出现OCR识别率偏低,而无法进行后续处理的情况。

5)依据界面坐标位置实现抓取

RPA软件通常也会提供依据界面坐标位置来获取界面要素的功能,这种功能在早期的自动化软件中经常被使用。但由于每次应用界面开启位置的不确定性和界面的低分辨率等问题,目前RPA技术实现中已经很少采用这种方式。但如果出现了前面所谈到的各种技术都无法实现,且客户端程序的界面位置不能随意调整,大小也不能缩放的情况,我们也可以采用这种方式。

需要注意的是,在使用坐标位置定位某个对象时,有两种技巧可以提高识别的稳定性。一种是采用相对坐标的计算方法,比如先通过其他技术找到另一个对象的绝对位置,然后计算这个对象与目标对象之间的偏移量,最终计算出目标对象的绝对坐标位置。另一种是通过预先调整程序窗口位置的方式,窗口的位置固定以后,那么窗口里的对象位置也就固定了。

6)其他特别类型的抓取

如果一些应用程序是采用

Java、Flex、Silverlight或其他特殊技术实现的,或者是像SAP GUI这种被特殊封装过的应用界面,标准的抓取方式通常是无效的,需要在RPA中提供单独的技术组件来实现。例如一些独立的程序或单独的插件,或者调整应用程序中的配置来适应RPA的访问,或者采用前面提到的图像比对、OCR识别和界面坐标定位的方式。这类实现自动化的方式差异很大,也比较繁杂,且大多是在实践中不断发现问题并解决问题的经验成果。

2.根据抓取目标对象分类

前面谈到的抓屏技术是按照技术实现方式分类的。如果根据抓取的目标对象划分,抓屏技术可分为三类:本地客户端(

Client)程序的界面抓取、浏览器页面(Web)信息的抓取,以及远程桌面或Citrix中界面信息抓取。

1)本地客户端程序的界面抓取

客户端应用程序指安装和运行在

Windows或Mac操作系统之上的应用程序。其被称作客户端,通常是与服务器端相对应的,但这里也可以指在本地电脑中单机运行的应用程序。客户端应用与网页版应用最大的区别就是对于操作系统的依赖,比如Windows的客户端应用无法运行在Mac OS的电脑中,而网页版应用则可以实现跨操作系统的用户操作。那么,抓取客户端界面信息的RPA技术就必然依赖于操作系统,而且基于不同操作系统的抓取技术其实现也就必然不同,甚至是同样操作系统的不同版本也会造成技术差异。目前最有效的技术抓取方式就是前面提到的抓取应用程序窗口中的对象句柄。

在今天,企业中的业务用户仍旧主要基于微软的

Windows系统来完成日常的业务操作,所以各家的RPA产品普遍对Windows应用程序的实现效果较好。而Mac或Linux操作系统上的应用程序,或是不支持抓取,或是支持能力较弱。

2)浏览器页面信息的抓取

最早流行的网页标签抓取技术就是我们经常谈到的

“网页爬虫”。很多人将“网页爬虫”理解为是一种盗用互联网信息的非法技术,其实爬虫技术本身并无对错,而是要看使用者将其用在了什么地方,起到了什么作用。

RPA中的Web页面信息抓取技术可以看作爬虫技术的升级。二者的相同点是都需要对网页进行解析,即在网页服务器返回的页面信息中使用正则表达式提取所需的数据。不同点是,RPA可以让用户更加灵活、更快捷、更精准地获取所需要的网页内容,而不必采用爬虫技术中的深度或广度搜索,甚至是避免通过种子URL扩展到整个网站的页面访问或下载,以及对网络所带来的流量和访问量的冲击。

近些年,随着互联网行业的爆发式成长,人们更加习惯于通过浏览器来实现应用的操作,也免除安装和配置本地程序的烦恼,所以新的软件厂商更喜欢构建基于网页的应用,传统厂商也纷纷把自己原有的客户端软件迁移到

Web端。

有别于本地的客户端应用程序,

Web应用对操作系统的依赖较弱,而更依赖于浏览器的内核技术。目前,市场上流行的内核技术包括IE内核、Firefox(火狐)浏览器内核技术,以及目前最流行的Google Chrome浏览器内核技术,而国内自产的各种浏览器也大多来自于以上三种内核技术。

针对不同内核浏览器所展示出的

Web页面,RPA抓取技术也存在差异,但由于前面我们提到的浏览器页面抓取技术主要是借助页面的xpath标签,所以浏览器差异所带来的影响远小于客户端对于操作系统差异的影响。

3)远程桌面(RDP)或Citrix中界面信息抓取

如果

RPA采用云端部署模式,则要通过远程桌面技术来访问远程应用程序;如果外包人员不能直接在企业内工作,则要通过VPN的方式来远程访问企业的办公网络和办公环境;如果网络存在安全隔离问题,则不得不通过堡垒机访问远程服务器,这些场景都要用到远程桌面。人们在日常工作中也经常会遇到通过远程桌面或Citrix访问系统的情况,所以RPA必须实现远程桌面信息的抓取。

由于远程桌面返给用户终端的并不是实际操作环境,而是加载的内存中的图像,所以无法用标准的抓取方式来解决这个问题。另外,由于远程桌面的打开位置和图像显示经常会变形,所以也不适合采用图像比对和界面坐标定位的方式实现。因此,借助

OCR技术和下一节谈到的快捷键操作就成了其主要的处理手段。

为了提高

RPA处理能力,通常还需要加入一些辅助的处理手段,如Automation Anywhere中的AISense,就是在OCR的基础上利用人工智能技来帮助识别Citrix中的界面信息。而且,界面中对象的位置改变也不会影响其对信息的识别。或者可以在Citrix中安装自定义的扩展插件,变相地将虚拟桌面中的内容转换成本地对象,那么就可以采用标准的抓取方式来实现自动化了。

接下来,我们看看哪些情况是不能通过界面信息抓取的方式实现自动化的?

RPA处理不了的情况大致分为三种:找不到、读不懂、处理不了。

“找不到”是指RPA无法通过前面谈到的各类技术来抓取界面中的对象。这通常是由于应用开发者对程序界面或Web页面中的代码做了特别的框架封装,并且页面内容又经常会随着刷新而改变,导致无法采用图像识别或OCR技术来处理。虽然这种情况很少发生,但在实际应用中如果遇到这种问题,我们只能通过快捷键操作或者变通到其他业务处理方式上,以避开这种技术“陷阱”。

“读不懂”是指虽然RPA可以抓取界面中的对象,但是无法理解其中的内容。一种最典型的情况就是用户在登录外部网站时经常出现的“验证码”。设置“验证码”的目的就是防止网络攻击访问(DDoS),以及防止非真实的人类用户或机器人的访问,所以RPA“读不懂”验证码,完全属于正常情况。部分开发者会借助互联网上所谓的“打码”工具对验证码进行破解,破解后再返回给RPA使用,但仍然存在验证码升级带来的潜在风险。另一种情况就是,RPA抓取到的对象中的文字完全是采用自然语言表达的,通过预定义规则和NLP的方式都无法对其进行处理。

“处理不了”是指RPA能够抓取界面中的对象,如一个文本输入框,但是无法向其中键入文字。这通常是由于开发者给这个输入框做了特别的安全控制,如禁止模拟键盘操作,像网上银行这类高安全要求的应用中经常会遇到这种情况。部分开发者会借助一些特殊的外接设备来解决此类问题。

综上所述,大部分不能抓取界面信息的情况是由于开发者当初设置的安全控制所引起的。所以在

RPA项目中,开发者应当首先与安全部门了解企业的安全管控要求。如果这些安全管控要求是必需的,就不能使用机器人直接操作,但可采用人机结合的处理方式。例如机器人在处理到这些安全字段时,先暂停处理,转由人工完成键入或识别工作,然后触发机器人进行接下来的处理。如果这些安全管控要求对机器人是可以特别开放的,就可以在后台应用程序代码调整或系统配置之后,再来实现RPA自动化处理。

同时也欢迎大家进群交流,扫码后长按识别二维码即可加入

www.rpazj.com