rpa 软件的元素识别是如何实现的

233 天前
 rekulas

之前一直以为 rpa 大多是基于图像识别的自动化操作,认为技术含量不会太高适合小白做自动化工作,最近接触测试了几款流行 rpa 软件,才发现自己的思维早就落后了,原来只需要鼠标点点,rpa 就能识别各种软件内部元素(比如指定文字的按钮,特定图标的按钮等等)并进行互动操作,大大刷新了我的认知。

在感叹的同时,我也很好奇这些软件是如何实现的,众所周知如果一款软件用主流框架( win32 编程 net 编程)开发 gui 识别很简单,但是现在的桌面软件 ui 框架五花八门,光是基于 h5 的就是数款,rpa 是如何做到能识别几乎每一款软件的元素的,如果基于逆向工程的话也能实现,但是逆向需要定向分析,也不是鼠标点点就能搞定的(还是说逆向工程已经进化到这种智能识别的地步了?)

我怀疑的是 rpa 厂商针对大部分主流 ui 框架做了深入兼容,不过只是个人愚见,不知道有没有做过类似工作的朋友能解释一二。

另外是否存在开源或低成本的类 rpa 解决方案,毕竟一款 rpa 一年几千上万的价格对个人还是不友好

1730 次点击
所在节点    程序员
5 条回复
rekulas
233 天前
@liedownpls
@imrockpan

发现 v2 有几个做 rpa 的朋友 不知道能否解答我的疑问 冒昧 at 一下
GeneralL
233 天前
Windows 桌面应用会使用系统 Win32 API 或者 MSAA 还有 UIA ,系统级别接口无法抓取元素的情况下会辅助使用基于 OCR 的图像识别技术抓取,好像各家都会有自己的 OCR 引擎,但是相比 win GUI 接口抓取,速度会稍微慢一些,以上是作为使用者的感受,不知道有没有厂商开发人员有细节信息。
imrockpan
232 天前
@rekulas 谢邀 (知乎体 🤣) 我的 RPA 是一款浏览器插件哈,它只在浏览器中运行,准确的说是 Browser RPA 或 Web RPA 。因此,它无法识别浏览器之外的 App ,至少目前是这样。

我就说说我知道哈,在网页里,鼠标点一下,就能识别内部元素,这个并不难。网页都是由 HTML 构建出来的,不管用什么 UI 框架 (React, Vue...),最终,出来的都是标准的 HTML ,所以,这个很好处理。稍微有点难度的是,页面嵌套 (iframe) 和 Shadow DOM 这两种情况,不过都是可解的。如果要做数据提取的话,还有一种情况也比较麻烦,就是自定义字体 (从源码里提取到的是字体编码,只有从视觉上才能看出是什么字),这个就需要先截图,再做 OCR 识别。

另一个就是事件处理,如:点击元素、滚动页面、输入文字 等,这些事件都比较好模拟。但,键盘事件就不好模拟,它不会触发 native 行为,比如:模拟按下 Ctrl + C ,它并不会真的去复制东西,除非网页程序特意处理了这个事件。这是浏览器的一些安全行为,网页端暂时无解。在插件里,可以申请 debugger 权限来做,不过这个权限会有一个醒目的提示:“xxx” started debugging this browser ,很烦,会让用户觉得插件很危险!考虑到键盘事件很少用到,也可以通过其它方法达到目的,比如,复制 & 粘贴 可以通过 Clipboard API 实现,所以,就做了些取舍,但这已足够了。

开源的 RPA ,可以看看 UI.Vision RPA 和 Automa ,其它的就不知道了。如果对我的 RPA 感兴趣,也可以来看看热闹哈,它叫:[Tapicker]( https://www.tapicker.com/)
rekulas
231 天前
@imrockpan 多谢回复, 基于网页的自动化我都熟悉, 这 2 个工具也看了下, 不过都是偏向于模拟自动化操作的, 我主要想了解下任意桌面软件的元素定位相关的, 资料不是很多
rekulas
230 天前
这 2 天偶然发现个小工具 accexplorer 能做到类似解析,目前测试能解析原生 flutter electron 等多种软件的元素,感觉跟 rpa 的技术有点像,怀疑可能是类似技术升级而来

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1030571

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX