之前一直以为 rpa 大多是基于图像识别的自动化操作,认为技术含量不会太高适合小白做自动化工作,最近接触测试了几款流行 rpa 软件,才发现自己的思维早就落后了,原来只需要鼠标点点,rpa 就能识别各种软件内部元素(比如指定文字的按钮,特定图标的按钮等等)并进行互动操作,大大刷新了我的认知。
在感叹的同时,我也很好奇这些软件是如何实现的,众所周知如果一款软件用主流框架( win32 编程 net 编程)开发 gui 识别很简单,但是现在的桌面软件 ui 框架五花八门,光是基于 h5 的就是数款,rpa 是如何做到能识别几乎每一款软件的元素的,如果基于逆向工程的话也能实现,但是逆向需要定向分析,也不是鼠标点点就能搞定的(还是说逆向工程已经进化到这种智能识别的地步了?)
我怀疑的是 rpa 厂商针对大部分主流 ui 框架做了深入兼容,不过只是个人愚见,不知道有没有做过类似工作的朋友能解释一二。
另外是否存在开源或低成本的类 rpa 解决方案,毕竟一款 rpa 一年几千上万的价格对个人还是不友好
1
rekulas OP |
2
GeneralL 229 天前
Windows 桌面应用会使用系统 Win32 API 或者 MSAA 还有 UIA ,系统级别接口无法抓取元素的情况下会辅助使用基于 OCR 的图像识别技术抓取,好像各家都会有自己的 OCR 引擎,但是相比 win GUI 接口抓取,速度会稍微慢一些,以上是作为使用者的感受,不知道有没有厂商开发人员有细节信息。
|
3
imrockpan 229 天前
@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/) |
4
rekulas OP @imrockpan 多谢回复, 基于网页的自动化我都熟悉, 这 2 个工具也看了下, 不过都是偏向于模拟自动化操作的, 我主要想了解下任意桌面软件的元素定位相关的, 资料不是很多
|
5
rekulas OP 这 2 天偶然发现个小工具 accexplorer 能做到类似解析,目前测试能解析原生 flutter electron 等多种软件的元素,感觉跟 rpa 的技术有点像,怀疑可能是类似技术升级而来
|