python自动化神器专题6:所有的软件自动化技术的说明都能在这里找到

1,521 阅读5分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情 今天整理一篇我之前写过的文章,重新做了整理和修改。

引言

关于软件自动化技术,最早主要是用于软件测试,尤其是涉及到UI的自动化测试。很多系统软件设计上会考虑到如何让残障人士可以操作, 可以看看[windows accessiblity](Accessibility Technology & Tools | Microsoft Accessibility)。 近几年,RPA(Robotic Process Automation)机器人流程自动化目前被越来越多的企业接受,RPA在多个业务领域场景上都能发挥很大的作用,将系统间重复性的操作编排设计成一个流程,给企业达到降本增效,快速提高信息化水平。RPA产品一般包括对各种软件的自动化操作组件,数据处理组件,流程逻辑控制组件等等,其中界面自动化组件是被使用最多的。

Windows自动化技术

Windows应用程序会包含这样一个功能设计:Accessibility,如何让更多的人群可以操作使用软件,比如如何让盲人可以使用,通过语音读屏等。微软提供的UI自动化技术可以访问windows应用的控件元素。主要技术有如下两种:

  • UIA(UI Automation)UI 自动化 提供对桌面上大多数 用户界面 (UI) 元素的编程访问,使辅助技术产品(如屏幕阅读器)能够使用标准输入以外的其他方式向最终用户提供有关 UI 的信息并操纵 UI 。 UI 自动化 也使自动化的测试脚本能够与 UI进行交互。
  • MSAA(Microsoft Active Accessibility),这是微软早期提供的应用可访问性解决方案

主要区别:MSAA基于组件对象模型 (COM) 支持双重接口,因此可在 C/c + +、Microsoft Visual Basic 6.0 和脚本语言中进行编程;UIA使用托管代码编写,并且 UI 自动化客户端应用程序可以使用 c # 或 Visual Basic .NET 进行编程。 作为接口实现的 UI 自动化提供程序可以用托管代码或 C/C++ 编写。

关于Windows自动化技术,感兴趣的同学可以直接阅读微软官方技术文档

Java

Java有自己的运行环境(JVM),也提供了java应用可访问性技术JAB(Java Access Bridge),因此大部分产品里对java应用的自动化技术都是基于JAB来做的。

Web自动化

Web自动化主要是看浏览器类型,当前主要是两类:

IE:通过js注入,难点是IE的版本太多,要做到多个版本的IE都兼容还是有一定技术难度的。

基于Chrome内核的浏览器:一般有三种方式:

image.png

  • chrome devtool protocol(CDP) 众多工具使用CDP,参见

awesome-chrome-devtools

跟web自动化测试相关的有Puppeteer, Playwright Playwright启动chrome的脚本

browser = p.chromium.launch(channel="chrome", headless=False)

context = browser.new_context()

# Open new page

page = context.new_page()

# Go to https://www.baidu.com/

page.goto("https://www.baidu.com/")

通过ProcessExplorer,可以看到启动的chrome参数如下

"C:\Program Files\Google\Chrome\Application\chrome.exe" --disable-background-networking --enable-features=NetworkService,NetworkServiceInProcess --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-default-apps --disable-dev-shm-usage --disable-extensions --disable-features=ImprovedCookieControls,LazyFrameLoading,GlobalMediaControls,DestroyProfileOnBrowserClose,MediaRouter,AcceptCHFrame,AutoExpandDetailsElement --allow-pre-commit-input --disable-hang-monitor --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --disable-sync --force-color-profile=srgb --metrics-recording-only --no-first-run --enable-automation --password-store=basic --use-mock-keychain --no-service-autorun --export-tagged-pdf --no-sandbox --user-data-dir=C:\Users\test\AppData\Local\Temp\playwright_chromiumdev_profile-V3LZUg **--remote-debugging-pipe** --no-startup-window

根据chrome启动参数说明

--remote-debugging-pipe: Enables remote debug over stdio pipes [in=3, out=4]. Optionally, specifies the format for the protocol messages, can be either "JSON" (the default) or "CBOR".

如何使用CDP,可以从这个入门

get started with cdp

更多crhome启动参数可以参见官方文档,或者这里

chrome-flags-for-tools.md

特定应用技术的自动化

SAP本身提供script automation功能,因为大部分RPA产品对于SAP应用的自动化都是基于SAP本身提供的自动化技术。 远程桌面/应用的自动化:很多企业都会用到Citrix,windows remote desktop(RDP)来管理操作电脑,基于远程桌面协议的扩展开发RPA远程扩展来支持通过界面自动化操作远程应用或者远程桌面。

自动化补充技术

除了以上原生自动化技术,一般还会借助以下的自动化技术,达到在RPA上的超级自动化

  • 图像识别,快捷键
  • OCR
  • 屏幕取词
  • 计算机视觉
  • Windows Native API
  • ... ...

是不是所有的应用都可以自动化

有个误区,认为所有的应用都能够使用原生自动化技术来操作,事实并不是这样,以下的应用很有可能是无法用原生界面自动化技术来识别和定位的

  • 开发的时候关闭了accessibility的配置,例如基于.net framework开发的应用是有配置可以设定accessibility为false的
  • 应用界面是通过某种方式画出来的
  • 应用使用了一些限制界面元素识别的控件库
  • 一些自定义控件,需要定制优化支持才行