CN115061685B - 软件客户端的界面元素定位方法及电子设备、存储介质 - Google Patents
软件客户端的界面元素定位方法及电子设备、存储介质 Download PDFInfo
- Publication number
- CN115061685B CN115061685B CN202210770326.7A CN202210770326A CN115061685B CN 115061685 B CN115061685 B CN 115061685B CN 202210770326 A CN202210770326 A CN 202210770326A CN 115061685 B CN115061685 B CN 115061685B
- Authority
- CN
- China
- Prior art keywords
- function
- interface
- dynamic link
- link library
- software client
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/38—Creation or generation of source code for implementing user interfaces
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供一种软件客户端的界面元素定位方法及电子设备、存储介质,软件客户端的交互界面可以是基于QWebkit/QWebEngine页面展示模块开发的,或者基于特定C++界面库开发的,该方案通过代码注入和函数挂钩的方式,通过机器人软件启动软件客户端,并向软件客户端注入第一动态链接库,并在软件客户端中调用第一动态链接库的启动函数;在软件客户端调用构造函数时,启动函数拦截构造函数,跳转到第一动态链接库的特定函数,来获得界面元素,从而定位界面元素。该方案可以精确定位QWebkit/QWebEngine软件客户端或者特定C++软件客户端的界面元素。
Description
技术领域
本申请涉及机器人流程自动化技术领域,尤其涉及一种软件客户端的界面元素定位方法及电子设备、计算机可读存储介质。
背景技术
当进行流程自动化时,首先要通过机器人软件依靠鼠标和键盘定位被控软件客户端的各种界面元素(如:获取元素位置、内容等),然后记录下来,编辑成各种流程,后续执行流程时需要再次依靠记录的信息重新定位到界面元素进行操作。
当前对于windows操作***中软件客户端的界面元素定位,通常使用WindowsAccessibility技术。windows accessibility是微软windows操作***提供的编程接口,可以定位大部分的软件客户端界面元素。windows accessibility有两种编程接口,IAccessible和UIAutomation,一般常用IAccessible。
使用IAccessible技术的一般方法:(1)调用windows apiAccessibleObjectFromWindow通过软件客户端的主窗口返回一个IAccessible的对象指针,这个对象代表软件客户端的主窗口控件;(2)调用IAccessible::get_accChild遍历IAccessible对象的所有子控件(即界面元素)对象;(3)调用IAccessible::get_accValue获得控件的文本信息;(4)调用IAccessible::accLocation获得控件的位置信息;(5)使用IAccessible的其他接口获取其他相关的信息
使用windows accessibility技术的限制:如果被定位的软件客户端的界面元素是使用标准windows控件技术创建的,只能使用windows提供的按钮,输入框等控件,此时软件客户端自动支持accessibility技术。
如果软件客户端的控件(界面元素)都是使用GDI等绘图技术绘制的,则软件客户端内部必须提供对accessibility技术的支持,需要响应窗口消息WM_GETOBJECT,返回合适的IAccessibled对象,如果软件客户端未提供这种支持,则不能使用accessibility技术来定位此软件的界面元素。
Duilib就属于绘制型界面库,其所有的界面元素都是使用绘图技术绘制的。QWebkit/QWebEngine是Qt框架中的网页展示模块,使用QWebkit/QWebEngine可以让人们用网页的方式展现软件客户端交互界面。Duilib技术和QWebkit/QWebEngine技术本身没有对WindowsAcessibility技术提供支持,因此使用这些技术制作的软件客户端不能使用windows accessibility来定位界面元素,目前也没有任何已知的技术可以精确定位到此类软件客户端的界面元素。
发明内容
本申请实施例提供了软件客户端的界面元素定位方法,用于精确定位界面元素。
第一方面,本申请实施例提供了一种软件客户端的界面元素定位方法,所述软件客户端的交互界面是基于特定C++界面库开发的,所述界面库以第二动态链接库的形式提供功能,所述方法包括:
机器人软件启动所述软件客户端,并向所述软件客户端注入第一动态链接库,并在所述软件客户端中调用所述第一动态链接库的启动函数;
在所述软件客户端调用所述第二动态链接库的构造函数创建界面元素时,所述启动函数拦截所述构造函数,跳转到所述第一动态链接库的元素保存函数,所述元素保存函数将所述界面元素存入动态数组;
所述机器人软件与所述第一动态链接库的匹配函数通信,发送当前鼠标位置;
所述第一动态链接库的匹配函数遍历所述动态数组中的界面元素,将当前鼠标位置对应的界面元素信息返回所述机器人软件。
在一实施例中,所述方法还包括:
在所述软件客户端调用所述第二动态链接库的析构函数销毁若干界面元素时,所述启动函数拦截所述析构函数,跳转到所述第一动态链接库的元素删除函数,所述元素删除函数将销毁的所述若干界面元素从所述动态数组中删除。
在一实施例中,在所述软件客户端调用所述第二动态链接库的构造函数创建界面元素时,所述启动函数拦截所述构造函数,跳转到所述第一动态链接库的元素保存函数,所述元素保存函数将所述界面元素存入动态数组,包括:
在所述软件客户端调用所述第二动态链接库中指定界面元素对应的构造函数时,所述启动函数拦截所述构造函数,跳转到所述第一动态链接库中所述构造函数挂钩的元素保存函数,所述元素保存函数将所述界面元素存入动态数组;
所述第二动态链接库包括多个界面元素一一对应的多个构造函数,所述第一动态链接库包括多个构造函数一一对应的多个元素保存函数。
在一实施例中,所述方法还包括:
在所述软件客户端调用所述第二动态链接库中特定界面元素对应的析构函数时,所述启动函数拦截所述析构函数,跳转到所述第一动态链接库中与所述析构函数挂钩的元素删除函数,所述元素删除函数将所述特定界面元素从所述动态数组中删除;
所述第二动态链接库包括多个界面元素一一对应的多个析构函数,所述第一动态链接库包括多个析构函数一一对应的多个元素删除函数。
在一实施例中,在所述启动函数拦截所述构造函数,跳转到所述第一动态链接库的元素保存函数,所述元素保存函数将所述界面元素存入动态数组之前,所述方法还包括:
所述启动函数创建所述动态数组,用于存放所述界面元素。
在一实施例中,在所述机器人软件与所述第一动态链接库的匹配函数通信,发送当前鼠标位置之前,所述方法还包括:
所述启动函数创建通信管道,用于与所述机器人软件通信。
在一实施例中,所述第一动态链接库的匹配函数遍历所述动态数组中的界面元素,将当前鼠标位置对应的界面元素信息返回所述机器人软件,包括:
所述匹配函数遍历所述动态数组中的界面元素,利用所述第二动态链接库中的导出函数获取每个界面元素的界面元素信息;所述界面元素信息包括位置信息。
所述匹配函数将所述当前鼠标信息与每个界面元素的位置信息进行比较,筛选出匹配的目标界面元素;
所述匹配函数将所述目标界面元素的界面元素信息返回所述机器人软件。
本申请上述实施例提供的技术方案,通过代码注入技术,向软件客户端注入第一动态链接库,通过函数挂钩技术,在软件客户端调用第二动态链接库的构造函数创建界面元素时,拦截构造函数,跳转到第一动态链接库的元素保存函数,元素保存函数将界面元素存入动态数组;机器人软件与第一动态链接库的匹配函数通信,发送当前鼠标位置;第一动态链接库的匹配函数遍历动态数组中的界面元素,将当前鼠标位置对应的界面元素信息返回机器人软件,从而可以精确定位基于C++界面库开发的软件客户端的界面元素,克服了现有技术无法实现C++软件客户端界面元素定位的缺陷。
第二方面,本申请实施例提供了一种软件客户端的界面元素定位方法,所述软件客户端的交互界面是基于QWebkit/QWebEngine页面展示模块开发的,所述方法包括:
机器人软件启动所述软件客户端,并向所述软件客户端注入第一动态链接库,并在所述软件客户端中调用所述第一动态链接库的启动函数;
在所述软件客户端调用所述页面展示模块的构造函数创建网页框架对象时,所述启动函数拦截所述构造函数,跳转到所述第一动态链接库的目标函数,所述目标函数创建所述网页框架对象,并注册页面加载完成的通知回调函数;
在所述网页框架对象的页面加载完成时,调用所述通知回调函数,所述通知回调函数调用所述页面展示模块提供的接口函数,执行自定义代码,生成元素定位函数;
所述机器人软件与所述第一动态链接库的匹配函数通信,发送当前鼠标位置;
所述匹配函数通过所述接口函数调用所述元素定位函数,获取所述当前鼠标位置对应的界面元素信息,并将所述界面元素信息返回所述机器人软件。
在一实施例中,在所述机器人软件与所述第一动态链接库的匹配函数通信,发送当前鼠标位置之前,所述方法还包括:
所述启动函数创建通信管道,用于与所述机器人软件通信。
在一实施例中,所述注册页面加载完成的通知回调函数,包括:
使用Qt开发框架中的连接函数链接所述网页框架对象的加载完成信号和所述第一动态链接库中的通知回调函数。
本申请上述实施例提供的技术方案,通过代码注入技术,向软件客户端注入第一动态链接库,通过函数挂钩技术,在软件客户端调用页面展示模块的构造函数创建网页框架对象时,启动函数拦截构造函数,跳转到第一动态链接库的目标函数,目标函数创建网页框架对象,并注册页面加载完成的通知回调函数;在网页框架对象的页面加载完成时,调用通知回调函数,通知回调函数调用页面展示模块提供的接口函数,执行自定义代码,生成元素定位函数;机器人软件与第一动态链接库的匹配函数通信,发送当前鼠标位置;匹配函数通过接口函数调用元素定位函数,获取当前鼠标位置对应的界面元素信息,并将界面元素信息返回机器人软件。从而可以精确定位QWebkit/QWebEngine软件客户端的界面元素,克服了现有技术无法实现QWebkit/QWebEngine软件客户端界面元素定位的缺陷。
第三方面,本申请实施例提供了一种软件客户端的界面元素定位装置,所述软件客户端的交互界面是基于特定C++界面库开发的,所述界面库以第二动态链接库的形式提供功能,所述装置包括:
代码注入模块,用于通过机器人软件启动所述软件客户端,并向所述软件客户端注入第一动态链接库,并在所述软件客户端中调用所述第一动态链接库的启动函数;
函数挂钩模块,用于在所述软件客户端调用所述第二动态链接库的构造函数创建界面元素时,通过所述启动函数拦截所述构造函数,跳转到所述第一动态链接库的元素保存函数,通过所述元素保存函数将所述界面元素存入动态数组;
建立通信模块,用于通过所述机器人软件与所述第一动态链接库的匹配函数通信,发送当前鼠标位置;
元素匹配模块,用于通过所述第一动态链接库的匹配函数遍历所述动态数组中的界面元素,将当前鼠标位置对应的界面元素信息返回所述机器人软件。
第四方面,本申请实施例还提供了一种软件客户端的界面元素定位装置,所述软件客户端的交互界面是基于QWebkit/QWebEngine页面展示模块开发的,所述装置包括:
代码注入模块,用于机器人软件启动所述软件客户端,并向所述软件客户端注入第一动态链接库,并在所述软件客户端中调用所述第一动态链接库的启动函数;
函数挂钩模块,用于在所述软件客户端调用所述页面展示模块的构造函数创建网页框架对象时,通过所述启动函数拦截所述构造函数,跳转到所述第一动态链接库的目标函数,通过所述目标函数创建所述网页框架对象,并注册页面加载完成的通知回调函数;
函数生成模块,用于在所述网页框架对象的页面加载完成时,调用所述通知回调函数,通过所述通知回调函数调用所述页面展示模块提供的接口函数,执行自定义代码,生成元素定位函数;
通信建立模块,用于通过所述机器人软件与所述第一动态链接库的匹配函数通信,发送当前鼠标位置;
元素匹配模块,用于通过所述匹配函数通过所述接口函数调用所述元素定位函数,获取所述当前鼠标位置对应的界面元素信息,并将所述界面元素信息返回所述机器人软件。
第五方面,本申请实施例还提供了一种电子设备,所述电子设备包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行上述软件客户端的界面元素定位方法。
第六方面,一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序可由处理器执行以完成上述软件客户端的界面元素定位方法。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍。
图1是本申请实施例提供的电子设备的结构示意图;
图2是一种软件客户端的界面元素定位方法的流程示意图;
图3是本申请实施例提供的注入第一动态链接库后的界面元素定位流程;
图4是未注入第一动态链接库状态下Duilib软件客户端的工作流程;
图5是本申请另一实施例提供的注入第一动态链接库后的界面元素定位流程;
图6是本申请另一实施例提供的一种软件客户端的界面元素定位方法的流程示意图;
图7是未注入第一动态链接库状态下QWebkit软件客户端的工作流程;
图8是本申请实施例提供的注入第一动态链接库后的界面元素定位流程。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
图1是本申请实施例提供的电子设备的结构示意图。该电子设备100可以用于执行本申请实施例提供的软件客户端的界面元素定位方法。如图1所示,该电子设备100包括:一个或多个处理器102、一个或多个存储处理器可执行指令的存储器104。其中,所述处理器102被配置为执行本申请下述实施例提供的软件客户端的界面元素定位方法。在一实施例中,下文中涉及的机器人软件、软件客户端、Duilib界面库、第一动态链接库、第二动态链接库和QWebkit页面展示模块等相应的代码可以存储在存储器104中,由处理器102执行。
所述处理器102可以是网关,也可以为智能终端,或者是包含中央处理单元(CPU)、图像处理单元(GPU)或者具有数据处理能力和/或指令执行能力的其它形式的处理单元的设备,可以对所述电子设备100中的其它组件的数据进行处理,还可以控制所述电子设备100中的其它组件以执行期望的功能。
所述存储器104可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。所述非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器102可以运行所述程序指令,以实现下文所述的软件客户端的界面元素定位方法。在所述计算机可读存储介质中还可以存储各种应用程序和各种数据,例如所述应用程序使用和/或产生的各种数据等。
在一实施例中,图1示电子设备100还可以包括输入装置106、输出装置108以及数据采集装置110,这些组件通过总线***112和/或其它形式的连接机构(未示出)互连。应当注意,图1示的电子设备100的组件和结构只是示例性的,而非限制性的,根据需要,所述电子设备100也可以具有其他组件和结构。
所述输入装置106可以是用户用来输入指令的装置,并且可以包括键盘、鼠标、麦克风和触摸屏等中的一个或多个。所述输出装置108可以向外部(例如,用户)输出各种信息(例如,图像或声音),并且可以包括显示器、扬声器等中的一个或多个。所述数据采集装置110可以采集对象的图像,并且将所采集的图像存储在所述存储器104中以供其它组件使用。示例性地,该数据采集装置110可以为摄像头。
在一实施例中,用于实现本申请实施例的软件客户端的界面元素定位方法的示例电子设备100中的各器件可以集成设置,也可以分散设置,诸如将处理器102、存储器104、输入装置106和输出装置108集成设置于一体,而将数据采集装置110分离设置。
在一实施例中,用于实现本申请实施例的软件客户端的界面元素定位方法的示例电子设备100可以被实现为诸如智能手机、平板电脑、台式电脑、笔记本电脑、车载设备等智能终端。
图2是一种软件客户端的界面元素定位方法的流程示意图。所述软件客户端的交互界面是基于特定C++界面库(一套以C++语言提供的界面开发接口函数)开发的。特定C++界面库是指满足特定条件的C++界面库,特定条件为:(1)界面库以DLL(动态链接库)的形式提供功能。(2)界面库中所有界面元素类的构造函数和析构函数都以DLL导出函数的形式提供。(3)界面库中所有界面元素类的信息获取函数(获取位置、大小、文字等)都以DLL导出函数的形式提供。特定C++界面库可以有Duilib界面库、QT界面和MFC界面库(微软基础类库)。特定C++界面库下文简称界面库,以DLL(动态链接库)的形式提供功能,DLL包含代码及可被调用的函数接口。为进行区分,当前实施例中将界面库提供的DLL称为第二动态链接库,将注入到软件客户端的DLL称为第一动态链接库。如图2所示,本申请实施例提供的软件客户端的界面元素定位方法包括以下步骤S210-步骤S240。
步骤S210:机器人软件启动所述软件客户端,并向所述软件客户端注入第一动态链接库,并在所述软件客户端中调用所述第一动态链接库的启动函数。
其中,机器人软件是用来定位软件客户端的界面元素和执行自动化流程的软件。界面元素是软件客户端上与用户交互的各种元素,如按钮,输入框,选择框,表格等。软件客户端是指基于特定C++界面库开发交互界面的软件,例如基于Duilib界面库开发的企业微信、百度杀毒、百度卫士或酷我音乐等。
第一动态链接库是使用DLL注入技术注入到软件客户端的一段C++代码。第一动态链接库的作用有(1)拦截软件客户端与第二动态链接库的函数调用,增加自定义的流程;(2)创建一个通信管道与机器人软件通信,通信管道可以是socket(套接字)、命名管道等任意windows(一种操作***)下允许的通信方式;(3)创建一个动态数组用于存储界面元素。
下文以Duilib界面库举例来说,其他C++界面库可以参照Duilib界面库实现。如图3所示,可以用MyUi.dll表示第一动态链接库,用Duilib.dll表示第二动态链接库。机器人软件可以使用Windows API Create Process(应用程序编程接口创建进程)启动软件客户端。机器人软件使用DLL注入技术,例如Windows API Create RemoteThtread向软件客户端注入MyUi.dll,并且在软件客户端中调用MyUi.dll的启动函数,启动函数的函数名可以用Start表示。
Start函数的作用可以有(1)创建一个通信管道,用于和机器人软件通信。(2)使用函数挂钩技术,拦截Duilib.dll中的CControlUI类的构造函数(DA),使其在执行时先跳转到MyUi.dll中的元素保存函数(MA)。(3)使用函数挂钩技术,拦截Duilib.dll中的CControlUI类的析构函数(DB),使其在执行时先跳转到MyUi.dll中的元素删除函数(MB)。(4)创建一个动态数组A,用于保存界面元素。需要说明的是,上述DA、MA、DB、MB仅是一个代号,不代表实际的函数名称。CControlUI是在Duilib界面库中的一个类,它是所有界面元素的基类,根据C++语言规则,当其任意子类(也就是任意界面元素类)的对象被创建时,CControlUI的构造函数被调用。当其任意子类对象被销毁时,CControlUI的析构函数被调用。基类是指C++语言中被继承的类,也可以叫父类。子类是指C++语言中继承于其它类的类,也可以叫子类。继承是指C++语言中类与类之间的一种关系,继承者可以获得被继承者的数据和函数。换句话说,就是创建任意一个界面元素时,都会调用同一个构造函数。
步骤S220:在所述软件客户端调用第二动态链接库的构造函数创建界面元素时,所述启动函数拦截所述构造函数,跳转到所述第一动态链接库的元素保存函数,所述元素保存函数将所述界面元素存入动态数组。
图4是未注入第一动态链接库状态下Duilib软件客户端的工作流程。如图4所示,软件客户端使用Duilib界面库进行界面展示的过程中,必然会创建各种界面元素,根据C++语言规则,CControlUI的构造函数DA被调用。软件客户端在运行中可能会销毁一些界面元素,根据C++语言规则,CControlUI的析构函数DB被调用。
由于Start的作用有使用函数挂钩技术,拦截Duilib.dll中的CControlUI类的构造函数DA,使其在执行时先跳转到MyUi.dll中的元素保存函数MA。故如图3所示,当CControlUI的构造函数DA被调用时,此时构造函数DA会跳转到MyUi.dll的元素保存函数MA。元素保存函数MA的作用是将界面元素保存到动态数组中。在一实施例中,可以在上述步骤S220之前,由启动函数创建动态数组,动态数组用于存放界面元素。
步骤S230:所述机器人软件与所述第一动态链接库的匹配函数通信,发送当前鼠标位置。
匹配函数(代号MC)位于第一动态链接库中,匹配函数MC的作用有(1)遍历动态数组A查找界面元素。(2)利用Duilib.dll中的导出函数获取界面元素的界面元素信息,界面元素信息可以包括位置,大小、内容等。(3)利用界面元素的界面元素信息和当前鼠标位置筛选出满足条件的界面元素(例如:界面元素可见,且当前鼠标位置落在界面元素所占的矩形区域)。(4)把界面元素信息返回给机器人软件。
当用户在软件客户端上移动,执行界面元素选择操作时,如图3所示,机器人软件可以与MyUi.dll中的匹配函数MC通信,机器人软件向匹配函数MC发送当前鼠标位置。当前鼠标位置可以是当前鼠标所处的位置坐标(x,y)。在上述步骤S230之前,可以由启动函数创建通信管道,用于匹配函数MC与机器人软件通信。通信管道可以是socket、命名管道等任意windows下允许的通信方式。
步骤S240:所述第一动态链接库的匹配函数遍历所述动态数组中的界面元素,将当前鼠标位置对应的界面元素信息返回所述机器人软件。
在一实施例中,匹配函数MC可以遍历动态数组A中所有的界面元素,利用所述第二动态链接库中的导出函数获取每个界面元素的界面元素信息。导出函数是指DLL中提供的可被外部调用的函数。匹配函数MC通过Duilib.dll中的导出函数获取每个界面元素的界面元素信息。其中,所述界面元素信息包括位置信息,还可以包括大小和内容。
匹配函数MC将当前鼠标位置与每个界面元素的位置信息进行比较,筛选出匹配的目标界面元素。界面元素的位置信息可以是一个坐标范围,当前鼠标信息可以是当前鼠标的坐标,如果当前鼠标的坐标在某个界面元素的坐标范围内,则该界面元素可以认为是匹配的界面元素,为进行区分,可以称为目标界面元素。匹配函数MC将目标界面元素的界面元素信息通过通信管道返回机器人软件。
在一实施例中,如图3所示,软件客户端在运行中可能会销毁一些界面元素,根据C++语言规则,CControlUI的析构函数DB被调用。在所述软件客户端调用所述第二动态链接库的析构函数DB销毁若干界面元素时,所述启动函数Start拦截所述析构函数DB,跳转到所述第一动态链接库的元素删除函数MB,所述元素删除函数MB将销毁的所述若干界面元素从所述动态数组A中删除。从而动态数组A中的界面元素可以随着界面元素的销毁,动态减少。
需要说明的是,上述实施例中的构造函数DA和析构函数DB分别仅有一个,在一个或多个界面元素创建时,调用CControlUI的构造函数DA,在一个或多个界面元素销毁时,调用CControlUI的析构函数DB。
下述实施例与上述实施例的不同之处在于,下述实施例的构造函数不止一个,析构函数也不止一个。Duilib界面库提供了一系列若干种类的界面元素,包括编辑框、组合框、按钮列表等。可以用一组代号来表示这些所有的界面元素的构造函数:DA1到DAn。可以用一组代号来表示这些所有的界面元素的析构函数:DB1到DBn。创建界面元素x,就调用这个界面元素x对应的构造函数DAx。销毁界面元素x,就调用这个界面元素x对应的析构函数DBx。Start函数的作用可以是:(1)创建一个通信管道,用于和机器人软件通信。(2)使用函数挂钩技术,拦截Duilib.dll中的所有的界面元素的构造函数DA1到DAn,使其在执行时分别先跳转到MyUi.dll中的元素保存函数MA1到MAn。(3)使用函数挂钩技术,拦截Duilib.dll中的所有的界面元素的析构函数DB1到DBn,使其在执行时分别先跳转到MyUi.dll中的元素删除函数MB1到MBn。(4)创建一个动态数组A,用于保存界面元素对象。
具体的,第二动态链接库包括多个界面元素一一对应的多个构造函数DA1到DAn,所述第一动态链接库包括多个构造函数一一对应的多个元素保存函数MA1到MAn。如图5所示,在所述软件客户端调用所述第二动态链接库中指定界面元素x对应的构造函数DAx时,所述启动函数Start拦截所述构造函数DAx,跳转到所述第一动态链接库中所述构造函数DAx挂钩的MAx,所述元素保存函数MAx将所述界面元素存入动态数组。为进行区分,等待创建的界面元素称为指定界面元素。
同理,第二动态链接库包括多个界面元素一一对应的多个析构函数DB1到DBn,第一动态链接库包括多个析构函数一一对应的多个元素删除函数MB1到MBn。
如图5所示,在所述软件客户端调用所述第二动态链接库中特定界面元素x对应的析构函数DBx时,所述启动函数Start拦截所述析构函数DBx,跳转到所述第一动态链接库中与所述析构函数挂钩的元素删除函数MBx,所述元素删除函数MBx将所述特定界面元素从所述动态数组中删除。为进行区分,等待销毁的界面元素称为特定界面元素。
本申请上述实施例提供的技术方案,通过代码注入技术,向软件客户端注入第一动态链接库,通过函数挂钩技术,在软件客户端调用第二动态链接库的构造函数创建界面元素时,拦截构造函数,跳转到第一动态链接库的元素保存函数,元素保存函数将界面元素存入动态数组;机器人软件与第一动态链接库的匹配函数通信,发送当前鼠标位置;第一动态链接库的匹配函数遍历动态数组中的界面元素,将当前鼠标位置对应的界面元素信息返回机器人软件,从而可以精确定位基于C++界面库开发的软件客户端的界面元素,克服了现有技术无法实现C++软件客户端界面元素定位的缺陷。
图6是本申请另一实施例提供的一种软件客户端的界面元素定位方法的流程示意图。所述软件客户端的交互界面是基于QWebkit/QWebEngine页面展示模块开发的。QWebkit/QWebEngine是Qt框架中的网页展示模块,使用QWebkit/QWebEngine可以让人们用网页的方式展现软件客户端交互界面。Qt是一款著名的跨平台的软件C++开发框架,被软件开发者广泛使用。本申请下述实施例的软件客户端是使用了QWebkit/QWebEngine技术开发交互界面的软件客户端。具体的,使用QWebkit/QWebEngine技术开发交互界面的软件客户端的界面元素定位方法包括以下步骤S610-步骤S650。
步骤S610:机器人软件启动所述软件客户端,并向所述软件客户端注入第一动态链接库,并在所述软件客户端中调用所述第一动态链接库的启动函数。
当前实施例中,第一动态链接库是使用C++语言制作的一个动态链接库,可以命名为MyWebkit.dll,并导出一个可调用的函数,函数名可以叫Start(启动函数)。Start函数的作用:(1)创建一个通信管道(通信管道可以是socket、命名管道等任意windows下允许的通信方式。),用于和机器人软件通信。(2)使用函数挂钩技术,拦截Qt5WebkitWidgets.dll中的QWebFrame对象的构造函数QA,使其在执行时先跳转到MyWebkit.dll中的目标函数MA。Qt5WebkitWidgets.dll是Qt5.x版本的weblit功能所在模块,对于Qt6,这个模块可以叫Qt6WebkitWidgets.dll。Qt5WebkitWidgets.dll和Qt6WebkitWidgets.dll下文均称为页面展示模块。
具体的,机器人软件可以使用Windows API CreateProcess启动目标软件。机器人软件使用DLL注入技术,例如Windows API CreateRemoteThtread向软件客户端注入MyWebkit.dll,并且在软件客户端中调用Start函数。
步骤S620:在所述软件客户端调用所述页面展示模块的构造函数创建网页框架对象时,所述启动函数拦截所述构造函数,跳转到所述第一动态链接库的目标函数,所述目标函数创建所述网页框架对象,并注册页面加载完成的通知回调函数。
下文以QWebkit软件客户端举例来说,QWebEngine软件客户端可以参照QWebkit软件客户端实现。图7是未注入第一动态链接库状态下QWebkit软件客户端的工作流程。如图7所示,软件客户端使用QWebkit技术进行界面展示的过程中,会创建QWebFrame对象(网页框架对象),根据C++语言规则,QWebFrame对象的构造函数QA被调用。软件客户端的界面加载完成时,QWebFrame对象会发出loadFinished信号(加载完成信号)。QWebFrame是QWebkit中一个类,用来表示网页的一个frame(框架),这个类中声明了对网页执行JavaScript的函数(即下文的接口函数QB)。
由于Start函数的作用有使用函数挂钩技术,拦截Qt5WebkitWidgets.dll中的QWebFrame对象的构造函数QA,使其在执行时先跳转到MyWebkit.dll中的目标函数MA。因此,如图8所示,当QWebFrame对象的构造函数QA被调用时,会跳转到MyWebkit.dll的目标函数MA。目标函数MA先让QWebFrame对象完成其构造流程,然后注册页面加载完成的通知回调函数MB。也就是在页面加载完成时,可以自动调用通知回调函数MB。
注册页面加载完成的通知回调函数的方式可以是使用Qt开发框架中的connect函数(连接函数)链接网页框架对象的加载完成信号(即loadFinished信号)和第一动态链接库中的通知回调函数MB。通知调用函数MB相当于槽函数,这是Qt中特有的机制,可以使用Qt中的connect函数链接一个信号和一个槽函数,当信号被发出时,槽函数被调用,也就是在QWebFrame对象发出loadFinished信号时,可以让通知回调函数MB被调用。
步骤S630:在所述网页框架对象的页面加载完成时,调用所述通知回调函数,所述通知回调函数调用所述页面展示模块提供的接口函数,执行自定义代码,生成元素定位函数。
如图8所示,软件客户端的页面加载完成时,QWebFrame对象会发出loadFinished信号,从而通知回调函数MB被调用,通知回调函数MB调用QWebFrame提供的接口函数QB执行自定义代码(JavaScript代码)。此段自定义代码的功能是生成可调用的JavaScript函数,用于定位界面元素,为进行区分,该函数称为元素定位函数。元素定位函数的功能是根据鼠标的位置坐标,返回该位置坐标上界面元素的界面元素信息。
步骤S640:所述机器人软件与所述第一动态链接库的匹配函数通信,发送当前鼠标位置。
在一实施例中,在上述步骤S640之前,由所述启动函数创建通信管道,用于匹配函数与所述机器人软件的通信。通信管道可以是socket、命名管道等任意windows下允许的通信方式。
机器人软件通过该通信管道与第一动态链接库的匹配函数MC通信,发送当前鼠标位置。当前鼠标位置可以是当前鼠标的位置坐标(x,y)。
步骤S650:所述匹配函数通过所述接口函数调用所述元素定位函数,获取所述当前鼠标位置对应的界面元素信息,并将所述界面元素信息返回所述机器人软件。
具体的,匹配函数MC通过QWebFrame的接口函数QB调用元素定位函数,元素定位函数将当前鼠标位置与每个界面元素的位置信息进行比较,筛选出匹配的目标界面元素。界面元素的位置信息可以是一个坐标范围,当前鼠标信息可以是当前鼠标的坐标,如果当前鼠标的坐标在某个界面元素的坐标范围内,则该界面元素可以认为是匹配的界面元素,为进行区分,可以称为目标界面元素。匹配函数MC再把该目标界面元素的界面元素信息返回给机器人软件。需要说明的是,当前实施例中的QA、QB、MA、DB、MB仅是一个代号,不代表实际的函数名称。
本申请上述实施例提供的技术方案,通过代码注入技术,向软件客户端注入第一动态链接库,通过函数挂钩技术,在软件客户端调用页面展示模块的构造函数创建网页框架对象时,启动函数拦截构造函数,跳转到第一动态链接库的目标函数,目标函数创建网页框架对象,并注册页面加载完成的通知回调函数;在网页框架对象的页面加载完成时,调用通知回调函数,通知回调函数调用页面展示模块提供的接口函数,执行自定义代码,生成元素定位函数;机器人软件与第一动态链接库的匹配函数通信,发送当前鼠标位置;匹配函数通过接口函数调用元素定位函数,获取当前鼠标位置对应的界面元素信息,并将界面元素信息返回机器人软件。从而可以精确定位QWebkit/QWebEngine软件客户端的界面元素,克服了现有技术无法实现QWebkit/QWebEngine软件客户端界面元素定位的缺陷。
下述为本申请装置实施例,可以用于执行本申请上述软件客户端的界面元素定位方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请软件客户端的界面元素定位方法实施例。
本申请实施例还提供了一种软件客户端的界面元素定位装置,具体实现过程可参照图2对应实施例,所述软件客户端的交互界面是基于C++界面库开发的,所述界面库以第二动态链接库的形式提供功能,所述装置包括:
代码注入模块,用于通过机器人软件启动所述软件客户端,并向所述软件客户端注入第一动态链接库,并在所述软件客户端中调用所述第一动态链接库的启动函数;
函数挂钩模块,用于在所述软件客户端调用所述第二动态链接库的构造函数创建界面元素时,通过所述启动函数拦截所述构造函数,跳转到所述第一动态链接库的元素保存函数,通过所述元素保存函数将所述界面元素存入动态数组;
建立通信模块,用于通过所述机器人软件与所述第一动态链接库的匹配函数通信,发送当前鼠标位置;
元素匹配模块,用于通过所述第一动态链接库的匹配函数遍历所述动态数组中的界面元素,将当前鼠标位置对应的界面元素信息返回所述机器人软件。
本申请实施例还提供了一种软件客户端的界面元素定位装置,具体实现过程可参照图6对应实施例,所述软件客户端的交互界面是基于QWebkit/QWebEngine页面展示模块开发的,所述装置包括:
代码注入模块,用于机器人软件启动所述软件客户端,并向所述软件客户端注入第一动态链接库,并在所述软件客户端中调用所述第一动态链接库的启动函数;
函数挂钩模块,用于在所述软件客户端调用所述页面展示模块的构造函数创建网页框架对象时,通过所述启动函数拦截所述构造函数,跳转到所述第一动态链接库的目标函数,通过所述目标函数创建所述网页框架对象,并注册页面加载完成的通知回调函数;
函数生成模块,用于在所述网页框架对象的页面加载完成时,调用所述通知回调函数,通过所述通知回调函数调用所述页面展示模块提供的接口函数,执行自定义代码,生成元素定位函数;
通信建立模块,用于通过所述机器人软件与所述第一动态链接库的匹配函数通信,发送当前鼠标位置;
元素匹配模块,用于通过所述匹配函数通过所述接口函数调用所述元素定位函数,获取所述当前鼠标位置对应的界面元素信息,并将所述界面元素信息返回所述机器人软件。
上述装置中各个模块的功能和作用的实现过程具体详见上述软件客户端的界面元素定位方法中对应步骤的实现过程,在此不再赘述。
在本申请所提供的几个实施例中,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
Claims (11)
1.一种软件客户端的界面元素定位方法,其特征在于,所述软件客户端的交互界面是基于特定C++界面库开发的,所述特定C++界面库为满足特定条件的C++界面库,所述特定条件为:所述界面库以动态链接库DLL的形式提供功能;所述界面库中所有界面元素类的构造函数和析构函数都以DLL导出函数的形式提供;所述界面库中所有界面元素类的信息获取函数都以DLL导出函数的形式提供;所述界面库以第二动态链接库的形式提供功能,所述方法包括:
机器人软件启动所述软件客户端,并向所述软件客户端注入第一动态链接库,并在所述软件客户端中调用所述第一动态链接库的启动函数;
在所述软件客户端调用所述第二动态链接库的构造函数创建界面元素时,所述启动函数拦截所述构造函数,跳转到所述第一动态链接库的元素保存函数,所述元素保存函数将所述界面元素存入动态数组;所述界面元素是所述软件客户端上与用户交互的元素;
所述机器人软件与所述第一动态链接库的匹配函数通信,发送当前鼠标位置;
所述匹配函数遍历所述动态数组中的界面元素,利用所述第二动态链接库中的导出函数获取每个界面元素的界面元素信息;所述界面元素信息包括位置信息;
所述匹配函数将所述当前鼠标信息与每个界面元素的位置信息进行比较,筛选出匹配的目标界面元素;
所述匹配函数将所述目标界面元素的界面元素信息返回所述机器人软件。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述软件客户端调用所述第二动态链接库的析构函数销毁若干界面元素时,所述启动函数拦截所述析构函数,跳转到所述第一动态链接库的元素删除函数,所述元素删除函数将销毁的所述若干界面元素从所述动态数组中删除。
3.根据权利要求1所述的方法,其特征在于,在所述软件客户端调用所述第二动态链接库的构造函数创建界面元素时,所述启动函数拦截所述构造函数,跳转到所述第一动态链接库的元素保存函数,所述元素保存函数将所述界面元素存入动态数组,包括:
在所述软件客户端调用所述第二动态链接库中指定界面元素对应的构造函数时,所述启动函数拦截所述构造函数,跳转到所述第一动态链接库中与所述构造函数挂钩的元素保存函数,所述元素保存函数将所述界面元素存入动态数组;
所述第二动态链接库包括多个界面元素一一对应的多个构造函数,所述第一动态链接库包括多个构造函数一一对应的多个元素保存函数。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
在所述软件客户端调用所述第二动态链接库中特定界面元素对应的析构函数时,所述启动函数拦截所述析构函数,跳转到所述第一动态链接库中与所述析构函数挂钩的元素删除函数,所述元素删除函数将所述特定界面元素从所述动态数组中删除;
所述第二动态链接库包括多个界面元素一一对应的多个析构函数,所述第一动态链接库包括多个析构函数一一对应的多个元素删除函数。
5.根据权利要求1所述的方法,其特征在于,在所述启动函数拦截所述构造函数,跳转到所述第一动态链接库的元素保存函数,所述元素保存函数将所述界面元素存入动态数组之前,所述方法还包括:
所述启动函数创建所述动态数组,用于存放所述界面元素。
6.根据权利要求1所述的方法,其特征在于,在所述机器人软件与所述第一动态链接库的匹配函数通信,发送当前鼠标位置之前,所述方法还包括:
所述启动函数创建通信管道,用于与所述机器人软件通信。
7.一种软件客户端的界面元素定位方法,其特征在于,所述软件客户端的交互界面是基于QWebkit/QWebEngine页面展示模块开发的,所述方法包括:
机器人软件启动所述软件客户端,并向所述软件客户端注入第一动态链接库,并在所述软件客户端中调用所述第一动态链接库的启动函数;
在所述软件客户端调用所述页面展示模块的构造函数创建网页框架对象时,所述启动函数拦截所述构造函数,跳转到所述第一动态链接库的目标函数,所述目标函数创建所述网页框架对象,并注册页面加载完成的通知回调函数;所述通知回调函数在所述网页框架对象的页面加载完成的情况下可以被自动调用;
在所述网页框架对象的页面加载完成时,调用所述通知回调函数,所述通知回调函数调用所述页面展示模块提供的接口函数,执行自定义代码,生成元素定位函数;
所述机器人软件与所述第一动态链接库的匹配函数通信,发送当前鼠标位置;
所述匹配函数通过所述接口函数调用所述元素定位函数,获取所述当前鼠标位置对应的界面元素信息,并将所述界面元素信息返回所述机器人软件。
8.根据权利要求7所述的方法,其特征在于,在所述机器人软件与所述第一动态链接库的匹配函数通信,发送当前鼠标位置之前,所述方法还包括:
所述启动函数创建通信管道,用于与所述机器人软件通信。
9.根据权利要求7所述的方法,其特征在于,所述注册页面加载完成的通知回调函数,包括:
使用Qt开发框架中的连接函数链接所述网页框架对象的加载完成信号和所述第一动态链接库中的通知回调函数。
10.一种电子设备,其特征在于,所述电子设备包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行权利要求1-9任意一项所述的软件客户端的界面元素定位方法。
11.一种计算机可读存储介质,其特征在于,所述存储介质存储有计算机程序,所述计算机程序可由处理器执行以完成权利要求1-9任意一项所述的软件客户端的界面元素定位方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210770326.7A CN115061685B (zh) | 2022-06-30 | 2022-06-30 | 软件客户端的界面元素定位方法及电子设备、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210770326.7A CN115061685B (zh) | 2022-06-30 | 2022-06-30 | 软件客户端的界面元素定位方法及电子设备、存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115061685A CN115061685A (zh) | 2022-09-16 |
CN115061685B true CN115061685B (zh) | 2023-07-21 |
Family
ID=83204443
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210770326.7A Active CN115061685B (zh) | 2022-06-30 | 2022-06-30 | 软件客户端的界面元素定位方法及电子设备、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115061685B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114816401B (zh) * | 2022-04-13 | 2022-12-23 | 上海弘玑信息技术有限公司 | 界面元素的定位方法、电子设备及存储介质 |
CN115455227B (zh) * | 2022-09-20 | 2023-07-18 | 上海弘玑信息技术有限公司 | 图形界面的元素搜索方法及电子设备、存储介质 |
CN117215839B (zh) * | 2023-10-30 | 2024-03-12 | 广州鼎甲计算机科技有限公司 | 基于Web的***还原方法、装置、设备、介质和程序产品 |
CN117667285A (zh) * | 2023-12-04 | 2024-03-08 | 九科信息技术(深圳)有限公司 | 元素的选取方法、***、终端设备和可读存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106778269A (zh) * | 2016-12-01 | 2017-05-31 | 腾讯科技(深圳)有限公司 | 一种驱动层防注入方法、装置及客户端 |
CN111290952A (zh) * | 2020-01-22 | 2020-06-16 | 北京深之度科技有限公司 | 一种动态链接库函数的跟踪方法及装置 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7506047B2 (en) * | 2001-03-30 | 2009-03-17 | Bmc Software, Inc. | Synthetic transaction monitor with replay capability |
CN102460344A (zh) * | 2009-06-19 | 2012-05-16 | 莫门特美国股份有限公司 | 用于动态背景用户界面(多个界面)的***和方法 |
CN102023805B (zh) * | 2010-12-16 | 2012-08-22 | 浙江大学 | 一种软件界面文本信息的辅助浏览方法 |
CN102681850B (zh) * | 2012-05-07 | 2015-05-20 | 北京奇虎科技有限公司 | 一种基于Webkit内核提供网页浏览的方法及装置 |
US20180189033A1 (en) * | 2016-12-29 | 2018-07-05 | TechRev, LLC | Graphical software meta-development tool |
CN107103099B (zh) * | 2017-05-26 | 2021-03-16 | 北京金山安全管理***技术有限公司 | 浏览器主页返回方法及装置 |
CN109101294B (zh) * | 2018-08-07 | 2021-07-02 | 北京三快在线科技有限公司 | 数据采集方法及插件、电子设备及存储介质 |
CN111078339B (zh) * | 2019-11-29 | 2022-11-11 | 苏宁云计算有限公司 | 界面元素定位方法、装置、计算机设备和存储介质 |
CN113703859A (zh) * | 2020-05-08 | 2021-11-26 | 腾讯科技(深圳)有限公司 | 一种动态链接库注入方法、装置、设备及存储介质 |
CN112445476A (zh) * | 2020-11-12 | 2021-03-05 | 广东电网有限责任公司 | 一种实现Java Applet自动化操作的方法 |
US11782734B2 (en) * | 2020-12-22 | 2023-10-10 | Automation Anywhere, Inc. | Method and system for text extraction from an application window for robotic process automation |
-
2022
- 2022-06-30 CN CN202210770326.7A patent/CN115061685B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106778269A (zh) * | 2016-12-01 | 2017-05-31 | 腾讯科技(深圳)有限公司 | 一种驱动层防注入方法、装置及客户端 |
CN111290952A (zh) * | 2020-01-22 | 2020-06-16 | 北京深之度科技有限公司 | 一种动态链接库函数的跟踪方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN115061685A (zh) | 2022-09-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115061685B (zh) | 软件客户端的界面元素定位方法及电子设备、存储介质 | |
US11108758B2 (en) | Reactive programming subscription context | |
KR101790190B1 (ko) | 애플리케이션 시나리오 식별 방법, 전력 소비 관리 방법, 장치 및 단말기 장치 | |
US8650481B1 (en) | Stable and secure use of content scripts in browser extensions | |
CN114816401B (zh) | 界面元素的定位方法、电子设备及存储介质 | |
AU2018241159B2 (en) | Contextual solicitation in a starter application | |
WO2018090871A1 (zh) | 应用业务提示方法及应用业务提示装置 | |
RU2746155C2 (ru) | Уничтожение объекта на основе последовательности выполняемых действий | |
WO2014197239A1 (en) | Automatic mediation of resource access in mobile applications | |
US20140223414A1 (en) | Paige control for enterprise mobile applications | |
EP3729262B1 (en) | Framework for contextual notifications | |
US11604662B2 (en) | System and method for accelerating modernization of user interfaces in a computing environment | |
US20170017483A1 (en) | Automatic import of third party analytics | |
CN113448570A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
KR101865343B1 (ko) | 웹 서비스 애플리케이션 개발을 위한 서버측 프레임워크 장치, 이에 의해 개발된 웹 서비스 애플리케이션의 실행 방법 및 이를 위한 컴퓨터 프로그램 | |
CN115809056B (zh) | 组件复用实现方法、装置和终端设备、可读存储介质 | |
US8918716B2 (en) | Context-based smart tags | |
CN113032004B (zh) | 在开发环境中管理开发作业的方法、设备和程序产品 | |
CN114510334A (zh) | 类实例的调用方法、装置、电子设备及自动驾驶车辆 | |
CN103513989B (zh) | 按键数据获取方法及装置 | |
CN113190158A (zh) | 一种重复截图方法及装置 | |
CN112748905A (zh) | 基础库的初始化调用方法、装置、电子设备及存储介质 | |
CN112068814A (zh) | 可执行文件的生成方法、装置、***及介质 | |
US11144431B2 (en) | Configuration-based code construct for restriction checks in component of a web application | |
US20230214310A1 (en) | Infrastructure to integrate an integrated development environment (ide) with game engines |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |