首页> 中国专利> 一种RPA系统中基于功能增强技术的UI元素拾取方法和系统

一种RPA系统中基于功能增强技术的UI元素拾取方法和系统

摘要

本发明公开了一种RPA系统中基于功能增强技术的UI元素拾取方法,包括:获取操作系统所新创建的进程,对该进程进行功能增强处理,以得到按QT方式增强处理后的进程或按GTK方式增强处理后的进程;获取按QT方式增强处理后的进程或按GTK方式增强处理后的进程中所有UI元素的信息;根据UI元素的信息,维护以操作系统的桌面为根节点的UI元素树,获取用户当前鼠标的位置信息,并从UI元素树中获取其矩形边界中包含该位置、且位于操作系统最顶层的UI元素,将UI元素以高亮方式显示给用户。本发明能够解决由于Linux操作系统不提供获取UI元素信息的服务,导致无法利用操作系统提供的服务直接进行UI元素拾取操作的问题。

著录项

  • 公开/公告号CN113268236A

    专利类型发明专利

  • 公开/公告日2021-08-17

    原文格式PDF

  • 申请/专利权人 湖南大学;

    申请/专利号CN202110549139.1

  • 申请日2021-05-20

  • 分类号G06F8/38(20180101);G06F8/33(20180101);G06F9/451(20180101);

  • 代理机构42233 武汉臻诚专利代理事务所(普通合伙);

  • 代理人宋业斌

  • 地址 410082 湖南省长沙市岳麓区麓山南路1号

  • 入库时间 2023-06-19 12:16:29

说明书

技术领域

本发明属于机器人流程自动化(Robotic Process Automation,简称RPA)技术领域,更具体地,涉及一种RPA系统中基于功能增强技术的UI元素拾取方法和系统。

背景技术

机器人流程自动化(Robotic Process Automation,简称RPA)系统是一种自动化程序,用来模拟人类操作员的行为,在其他软件中自动地进行操作,自动操作包括填写信息、点击按钮等动作。

在RPA系统自动运作之前,需要预先设计好流程,通常通过RPA设计器来完成流程的设计,RPA设计器提供了用户界面(User Interface,简称UI)元素拾取器,帮助设计者在其他程序中识别、定位并获取UI元素的基本信息,这些信息包括UI元素类型、坐标、大小等。元素拾取器需要操作系统提供必要的支持,来正确地拾取UI信息。

由于Linux操作系统不提供获取UI元素信息的服务,因此无法利用操作系统提供的服务直接进行UI元素拾取操作。目前在Linux系统下,进行UI元素拾取的方法主要有两种:第一种是事先将要拾取的所有UI元素截图保存,拾取时,使用图片模式匹配的方法获取UI元素的位置信息,而UI元素的类型和大小信息则直接根据保存的图片获取;第二种是训练目标检测模型,使用AI中的目标检测方法,识别并获取UI元素的类型、位置、大小等信息。

然而,上述UI元素拾取方法都均在一些不可忽略的缺陷:第一、第一种方法需要事先对所有UI元素进行截图保存,流程开发者的工作量非常大;第二、第二种方法需要训练一个用于识别UI元素的目标检测模型,而目标检测模型的训练需要采集并标注大量的数据,工作量巨大,而且模型的准确率不可能达到100%,会有一定的几率出现识别错误;第三、一些特别设计的UI元素很难利用目标检测模型进行识别。

发明内容

针对现有技术的以上缺陷或改进需求,本发明提供了一种RPA系统中基于功能增强技术的UI元素拾取方法和系统,其目的在于,解决由于Linux操作系统不提供获取UI元素信息的服务,导致无法利用操作系统提供的服务直接进行UI元素拾取操作的问题,以及现有其中一种UI元素拾取方法由于需要事先对所有UI元素进行截图保存,导致流程开发者的工作量非常大的技术问题,以及另一种UI元素拾取方法由于需要使用目标检测模型造成工作量大、且会出现识别错误的技术问题,以及无法拾取一些特别设计的UI元素的技术问题。

为实现上述目的,按照本发明的一个方面,提供了一种RPA系统中基于功能增强技术的UI元素拾取方法,包括:获取操作系统所新创建的进程,对该进程进行功能增强处理,以得到按QT方式增强处理后的进程或按GTK方式增强处理后的进程;获取按QT方式增强处理后的进程或按GTK方式增强处理后的进程中所有UI元素的信息;根据UI元素的信息,维护以操作系统的桌面为根节点的UI元素树,获取用户当前鼠标的位置信息,并从UI元素树中获取其矩形边界中包含该位置、且位于操作系统最顶层的UI元素,将UI元素以高亮方式显示给用户。

优选地,步骤(1)包括以下子步骤:

(1-1)获取操作系统启动后新创建的进程;

(1-2)判断是否能够在步骤(1-1)获取的进程所对应的进程空间中搜索到预设的多个特征字符串中的一个或多个,如果是则进入步骤(1-3),否则过程结束;

(1-3)根据搜索到的一个或多个特征字符串确定步骤(1-1)获取的进程所使用的UI库的类型,并判断该类型是QT类型,还是GTK类型,如果是QT类型则按照QT方式对步骤(1-1)获取的进程进行增强,以得到按QT方式增强处理后的进程。如果是GTK类型则按照GTK方式对步骤(1-1)获取的进程进行增强,以得到按GTK方式增强处理后的进程。

优选地,步骤(1)获取操作系统所新创建的进程的方法可以是NetlinkConnector、So preload、Audit、或Syscall hook;

使用Netlink Connector方法获取操作系统启动后所新创建的进程的具体过程为:通过Linux操作系统的Netlink Connector协议,建立与Linux内核的连接,获得一个进程事件连接器;通过进程事件连接器,订阅进程创建事件;通过订阅的进程创建事件,获得新创建的进程。

优选地,步骤(1-3)中按照QT方式对步骤(1-1)获取的进程进行增强,以得到按QT方式增强处理后的进程,这一过程具体为:

在步骤(1-1)获取的进程中搜索UI事件处理函数、及其入口,修改该入口,使得UI事件处理函数在执行其固有功能之前,先对QT类型的UI库对应的UI事件进行监听,以获取UI事件中的UI元素创建事件、UI元素销毁事件、UI元素移动事件、UI元素大小变更事件,并根据UI元素创建事件获取该UI元素的ID、UI元素的父窗口ID、UI元素的类型、UI元素的位置和大小;根据UI元素销毁事件获取该UI元素的ID;根据UI元素移动事件获取该UI元素的ID、UI元素的位置;根据UI元素大小变更事件获取该UI元素的ID、UI元素的大小;

步骤(1-3)中按照GTK方式对步骤(1-1)获取的进程进行增强,以得到按GTK方式增强处理后的进程,这一过程具体为:

在步骤(1-1)获取的进程中搜索UI事件处理函数、及其入口,修改该入口,使得UI事件处理函数在执行其固有功能之前,先对GTK类型的UI库对应的UI事件进行监听,以获取UI事件中的UI元素创建事件、UI元素销毁事件、UI元素移动事件、UI元素大小变更事件,并根据UI元素创建事件获取该UI元素的ID、UI元素的父窗口ID、UI元素的类型、UI元素的位置和大小;根据UI元素销毁事件获取该UI元素的ID;根据UI元素移动事件获取该UI元素的ID、UI元素的位置;根据UI元素大小变更事件获取该UI元素的ID、UI元素的大小。

优选地,修改UI事件处理函数入口,使得UI事件处理函数在执行其固有功能之前,先对QT类型或GTK类型的UI库对应的UI事件进行监听的具体过程为:在步骤(1-1)的进程中获得一块空闲内存;修改UI事件处理函数入口处的机器指令为jmp指令,跳转到空闲内存处,并将原有机器指令保存起来;在空闲内存中写入call指令,对QT类型或GTK类型的UI库对应的UI事件进行监听;在空闲内存中接着写入保存的原有机器指令;在空闲内存中接着写入jmp指令,跳到UI事件处理函数入口处的jmp指令之后的位置,完成UI事件处理函数固有功能的执行。

优选地,步骤(2)具体为:针对按QT方式增强处理后的进程,在监听QT类型的UI库对应的UI事件时,判断该UI事件是否为UI元素创建事件、UI元素销毁事件、UI元素移动事件、UI元素大小变更事件中的一种,如果是UI元素创建事件,则获取该UI元素的ID、UI元素的父窗口ID、UI元素的类型、UI元素的位置和大小,如果是UI元素销毁事件,则获取该UI元素的ID,如果是UI元素移动事件,则获取该UI元素的ID、UI元素的位置,如果是UI元素大小变更事件,则获取该UI元素的ID、UI元素的大小;

针对按GTK方式增强处理后的进程,在监听到GTK类型的UI库对应的UI事件时,判断该UI事件是否为UI元素创建事件、UI元素销毁事件、UI元素移动事件、UI元素大小变更事件中的一种,如果是UI元素创建事件,则获取该UI元素的ID、UI元素的父窗口ID、UI元素的类型、UI元素的位置和大小,如果是UI元素销毁事件,则获取该UI元素的ID,如果是UI元素移动事件,则获取该UI元素的ID、UI元素的位置,如果是UI元素大小变更事件,则获取该UI元素的ID、UI元素的大小。

优选地,操作系统的桌面是步骤(1)按QT方式增强处理后的进程或按GTK方式增强处理后的进程所对应窗口的父窗口;

步骤(3)具体为,针对UI元素创建事件,以其对应的UI元素的父窗口ID为关键字,在UI元素树(其初始为一个桌面节点)中搜索ID为该UI元素的父窗口ID的节点,将该UI元素添加到UI元素树中,作为搜索到的父窗口节点的子结点;

针对UI元素销毁事件,以其对应的UI元素的ID为关键字,在UI元素树中搜索ID为该UI元素ID的节点,在UI元素树中删除以该节点为根节点的子树;

针对UI元素移动事件,以其对应的UI元素的ID为关键字,在UI元素树中搜索ID为该UI元素ID的节点,在UI元素树中更新该节点的UI元素位置信息为新获得的位置信息;

针对UI元素大小变更事件,以其对应的UI元素的ID为关键字,在UI元素树中搜索ID为该UI元素ID的节点,在UI元素树中更新该节点的UI元素大小信息为新获得的大小信息。

优选地,步骤(4)包括以下子步骤:

(4-1)获取用户当前鼠标的位置;

(4-2)遍历UI元素树,以找到其矩形边界中包含该位置的所有UI元素,并从中获取面积最小的UI元素。

优选地,步骤(4-2)中遍历UI元素树的方法是使用深度优先遍历(Deep FirstSearch,简称DFS)或广度优先遍历(Breadth First Search,简称BFS);

判断UI元素的矩形边界包含用户当前鼠标的位置的原则是:UI元素的左上角的横坐标小于等于用户当前鼠标的位置的横坐标;UI元素的左上角的纵坐标小于等于用户当前鼠标的位置的纵坐标;UI元素的右下角的横坐标大于等于用户当前鼠标的位置的横坐标;UI元素的右下角的纵坐标大于等于用户当前鼠标的位置的纵坐标。

按照本发明的另一方面,提供了一种RPA系统中基于功能增强技术的UI元素拾取系统,包括:

第一模块,用于获取操作系统所新创建的进程,对该进程进行功能增强处理,以得到按QT方式增强处理后的进程或按GTK方式增强处理后的进程;

第二模块,用于获取第一模块按QT方式增强处理后的进程或按GTK方式增强处理后的进程中所有UI元素的信息;

第三模块,用于根据第二模块获得的UI元素的信息,维护以操作系统的桌面为根节点的UI元素树;

第四模块,用于获取用户当前鼠标的位置信息,并从第三模块的UI元素树中获取其矩形边界中包含该位置、且位于操作系统最顶层的UI元素;

第五模块,用于将第四模块获得的UI元素以高亮方式显示给用户。

总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:

(1)由于本发明采用了步骤(1)到步骤(2),其对进程进行了增强处理,增强后的进程能够监听UI元素创建事件、UI元素销毁事件、UI元素移动事件、UI元素大小变更事件,通过这些事件可以获取UI元素的信息,因此能够解决由于Linux操作系统不提供获取UI元素信息的服务,无法利用操作系统提供的服务直接进行UI元素拾取操作的问题;

(2)由于本发明采用了步骤(2)到步骤(5),其利用获取的UI元素信息构建了一颗以桌面为根节点的UI元素树,不需要对UI元素进行截图,因此能够解决现有UI元素拾取方法由于需要事先对所有UI元素进行截图保存,导致流程开发者的工作量非常大的技术问题;

(3)由于本发明采用了步骤(1)到步骤(2),其使用内核增强技术,通过增强的进程直接使用UI事件处理函数提供的UI元素信息,不需要事先准备大量的训练数据,也不会出现识别错误问题,因此能够解决现有UI元素拾取方法由于需要使用目标检测模型造成工作量大、且会出现识别错误的技术问题;

(4)由于本发明采用了步骤(1)到步骤(2),其使用内核增强技术,通过增强的进程直接使用UI事件处理函数提供的UI元素信息,可以获取所有类型的UI元素的信息,因此能够解决现有UI元素拾取方法无法拾取一些特别设计的UI元素的技术问题。

附图说明

图1是本发明RPA系统中基于功能增强技术的UI元素拾取方法的流程图;

图2是本发明RPA系统中基于功能增强技术的UI元素拾取方法的详细流程图;

图3是本发明构建的UI元素树的结构图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

如图1所示,本发明提供了一种RPA系统中基于功能增强技术的UI元素拾取方法,包括以下步骤:

(1)获取操作系统所新创建的进程,对该进程进行功能增强处理,以得到按QT方式增强处理后的进程或按GTK方式增强处理后的进程;

具体而言,本步骤包括以下子步骤:

(1-1)获取操作系统启动后新创建的进程;

具体而言,获取操作系统所新创建的进程的方法主要有Netlink Connector、Sopreload、Audit、Syscall hook,优选使用Netlink Connector方法。

具体而言,使用Netlink Connector方法获取操作系统启动后所新创建的进程的具体过程为:通过Linux操作系统的Netlink Connector协议,建立与Linux内核的连接,获得一个进程事件连接器;通过进程事件连接器,订阅进程创建事件;通过订阅的进程创建事件,获得新创建的进程;

(1-2)判断是否能够在步骤(1-1)获取的进程所对应的进程空间中搜索到预设的多个特征字符串中的一个或多个,如果是则进入步骤(1-3),否则过程结束;

具体而言,预设的多个特征字符串可以选择UI库中独有的字符串,优选地,QT库的特征字符串为_ZN10QTabWidget5eventEP6QEvent,GTK库的特征字符串为gtk_widget_new;

(1-3)根据搜索到的一个或多个特征字符串确定步骤(1-1)获取的进程所使用的UI库的类型,并判断该类型是QT类型,还是GTK类型,如果是QT类型则按照QT方式对步骤(1-1)获取的进程进行增强,以得到按QT方式增强处理后的进程。如果是GTK类型则按照GTK方式对步骤(1-1)获取的进程进行增强,以得到按GTK方式增强处理后的进程。

具体而言,本步骤按照QT方式对步骤(1-1)获取的进程进行增强,以得到按QT方式增强处理后的进程,这一过程具体为:

在步骤(1-1)获取的进程中搜索UI事件处理函数、及其入口,修改该入口,使得UI事件处理函数在执行其固有功能之前,先对QT类型的UI库对应的UI事件进行监听,以获取UI事件中的UI元素创建事件、UI元素销毁事件、UI元素移动事件、UI元素大小变更事件,并根据UI元素创建事件获取该UI元素的ID、UI元素的父窗口ID、UI元素的类型、UI元素的位置和大小;根据UI元素销毁事件获取该UI元素的ID;根据UI元素移动事件获取该UI元素的ID、UI元素的位置;根据UI元素大小变更事件获取该UI元素的ID、UI元素的大小;

具体而言,本步骤按照GTK方式对步骤(1-1)获取的进程进行增强,以得到按GTK方式增强处理后的进程,这一过程具体为:

在步骤(1-1)获取的进程中搜索UI事件处理函数、及其入口,修改该入口,使得UI事件处理函数在执行其固有功能之前,先对GTK类型的UI库对应的UI事件进行监听,以获取UI事件中的UI元素创建事件、UI元素销毁事件、UI元素移动事件、UI元素大小变更事件,并根据UI元素创建事件获取该UI元素的ID、UI元素的父窗口ID、UI元素的类型、UI元素的位置和大小;根据UI元素销毁事件获取该UI元素的ID;根据UI元素移动事件获取该UI元素的ID、UI元素的位置;根据UI元素大小变更事件获取该UI元素的ID、UI元素的大小;

具体而言,UI事件处理函数是UI库用于处理UI元素的创建、销毁、位置变化、大小变化等消息的函数。

具体而言,修改UI事件处理函数入口,使得UI事件处理函数在执行其固有功能之前,先对QT类型或GTK类型的UI库对应的UI事件进行监听的具体过程为:在步骤(1-1)的进程中获得一块空闲内存;修改UI事件处理函数入口处的机器指令为jmp指令,跳转到空闲内存处,并将原有机器指令保存起来;在空闲内存中写入call指令,对QT类型或GTK类型的UI库对应的UI事件进行监听;在空闲内存中接着写入保存的原有机器指令;在空闲内存中接着写入jmp指令,跳到UI事件处理函数入口处的jmp指令之后的位置,完成UI事件处理函数固有功能的执行。

上述步骤(1-1)到(1-3)的优点在于,对使用不同UI库(QT库或GTK库)的进程分别进行有针对性地功能增强,解决Linux操作系统不提供获取UI元素信息服务的问题;

上述步骤(1-1)到(1-3)的优点还在于,对使用不同版本QT库的进程的增强方式是一致的;

上述步骤(1-1)到(1-3)的优点还在于,对使用不同版本GTK库的进程的增强方式是一致的。

(2)获取步骤(1)按QT方式增强处理后的进程或按GTK方式增强处理后的进程中所有UI元素的信息;

本步骤具体为:针对按QT方式增强处理后的进程,在监听QT类型的UI库对应的UI事件时,判断该UI事件是否为UI元素创建事件、UI元素销毁事件、UI元素移动事件、UI元素大小变更事件中的一种,如果是UI元素创建事件,则获取该UI元素的ID、UI元素的父窗口ID、UI元素的类型、UI元素的位置和大小,如果是UI元素销毁事件,则获取该UI元素的ID,如果是UI元素移动事件,则获取该UI元素的ID、UI元素的位置,如果是UI元素大小变更事件,则获取该UI元素的ID、UI元素的大小;

针对按GTK方式增强处理后的进程,在监听到GTK类型的UI库对应的UI事件时,判断该UI事件是否为UI元素创建事件、UI元素销毁事件、UI元素移动事件、UI元素大小变更事件中的一种,如果是UI元素创建事件,则获取该UI元素的ID、UI元素的父窗口ID、UI元素的类型、UI元素的位置和大小,如果是UI元素销毁事件,则获取该UI元素的ID,如果是UI元素移动事件,则获取该UI元素的ID、UI元素的位置,如果是UI元素大小变更事件,则获取该UI元素的ID、UI元素的大小。

(3)根据步骤(2)获得的UI元素的信息,维护以操作系统的桌面为根节点的UI元素树;

具体而言,操作系统的桌面是步骤(1)按QT方式增强处理后的进程或按GTK方式增强处理后的进程所对应窗口的父窗口;

本步骤具体为,针对UI元素创建事件,以其对应的UI元素的父窗口ID为关键字,在UI元素树(其初始为一个桌面节点)中搜索ID为该UI元素的父窗口ID的节点,将该UI元素添加到UI元素树中,作为搜索到的父窗口节点的子结点;

针对UI元素销毁事件,以其对应的UI元素的ID为关键字,在UI元素树中搜索ID为该UI元素ID的节点,在UI元素树中删除以该节点为根节点的子树;

针对UI元素移动事件,以其对应的UI元素的ID为关键字,在UI元素树中搜索ID为该UI元素ID的节点,在UI元素树中更新该节点的UI元素位置信息为新获得的位置信息;

针对UI元素大小变更事件,以其对应的UI元素的ID为关键字,在UI元素树中搜索ID为该UI元素ID的节点,在UI元素树中更新该节点的UI元素大小信息为新获得的大小信息。

如图3所示,其示出本步骤构建的UI元素树,从图3可以看出,UI元素树以桌面为根节点,包含2颗子树,左边的子树包含进程1的所有UI元素,即一个窗口、以该窗口为父窗口的UI元素1和UI元素2;右边的子树包含进程2的所有UI元素,即一个窗口、以该窗口为父窗口的UI元素3和UI元素4;

本步骤的优点在于,UI元素树实时地记录了操作系统在任意时刻的所有UI元素的信息,为UI元素信息的获取提供了可靠的途径。

(4)获取用户当前鼠标的位置信息,并从步骤(3)的UI元素树中获取其矩形边界中包含该位置、且位于操作系统最顶层的UI元素;

具体而言,本步骤包括以下子步骤:

(4-1)获取用户当前鼠标的位置;

(4-2)遍历UI元素树,以找到其矩形边界中包含该位置的所有UI元素,并从中获取面积最小的UI元素;

本步骤中遍历UI元素树的方法是使用深度优先遍历(Deep First Search,简称DFS)或广度优先遍历(Breadth First Search,简称BFS);

具体而言,坐标原点为计算机屏幕的左上角,UI元素的矩形边界是由步骤(2)中获取的UI元素的位置和大小确定,矩形的左上角为UI元素的位置,矩形的右下角的横坐标为UI元素的横坐标加上UI元素的宽度,矩形的右下角的纵坐标为UI元素的纵坐标加上UI元素的高度;

具体而言,判断UI元素的矩形边界包含用户当前鼠标的位置的原则是:UI元素的左上角的横坐标小于等于用户当前鼠标的位置的横坐标;UI元素的左上角的纵坐标小于等于用户当前鼠标的位置的纵坐标;UI元素的右下角的横坐标大于等于用户当前鼠标的位置的横坐标;UI元素的右下角的纵坐标大于等于用户当前鼠标的位置的纵坐标;

具体而言,获得符合条件的UI元素中面积最小的UI元素的方法是:通过步骤(2)中获取的UI元素的大小,计算这些UI元素的面积,选取其中面积最小的UI元素。

上述步骤(4-1)到(4-2)的优点在于,每次仅获取鼠标位置处的最顶层UI元素信息,减少了数据通信量,提高了获取信息的效率。

(5)将步骤(4)获得的UI元素以高亮方式显示给用户。

具体而言,如果用户确定需要拾取UI元素信息,则其使用鼠标左键确认即可。

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号