用于自动化Windows应用程序的工具(最好是Python)?

时间:2018-10-16 09:42:47

标签: python windows automation

我有一个执行重要业务功能的旧版Windows应用程序。它没有自动化的API或官方支持。该程序需要人员执行一系列操作,才能将特定输入格式的文件转换为PDF,然后我们可以从中抓取内容,然后正常处理数据。

如果没有该软件执行的一些计算/报告,业务将无法正常运行,但是不幸的是,这些计算尚未得到很好的理解,并且我们没有能够使我们重新实现该软件的研发预算。

该软件读取专有文件格式,并以行业认可的格式生成许多PDF报告,从中我们可以抓取图像并以更常规的方式处理它们。

有人建议我们将应用程序包装在某种API中,在其中我可以将一些输入数据提交到队列中,而在其中的某个深处,我们可以使软件自动化,就像人类在驱动它执行一样操作。

不幸的是,操作很复杂,并且取决于许多输入,还取决于要处理的文件的内容。这不是我们可以用一个简单的宏完成的事情-将需要一些逻辑来模拟受过训练的人工操作员的行为。

那么有什么解决办法吗?我们希望能够尽快地驱动该软件,并且由于我们拥有许多Python开发人员,因此有必要在Python中尽可能多地实现。该系统的外层也将使用Python,这样可以减少复杂性。是否有任何工具已经可以提供这类行为?

3 个答案:

答案 0 :(得分:2)

试用机器人自动化工具,该工具可以模拟或记录人类与计算机的交互,并随着时间的推移重复进行。可以使用依赖于该软件的脚本来处理更复杂的任务。选择不同输入,浏览器组件以及Windows应用程序的示例。

答案 1 :(得分:2)

您有多种选择:

1. winshell: A light wrapper around the Windows shell functionality
2. Automa: Utilty to automate repetitive and/or complex task 
3: PyAutoGUI is a Python module for programmatically controlling the
mouse and keyboard.
4. Sikuli automates anything you see on the screen http://www.sikuli.org/
5. pure Python scripting. example below:  

import os os.system('notepad.exe')
import win32api
win32api.WinExec('notepad.exe')

import subprocess
subprocess.Popen(['notepad.exe'])

答案 2 :(得分:2)

使应用程序自动化的最简单方法是向其发送击键。如果您可以仅通过击键来驱动目标应用程序,则无需更改屏幕分辨率,大字体和鼠标位置即可对它进行操作。 [1]

最困难的部分是识别应用程序的显示状态。理想情况下,您可以使用Python [2]读取控件的内容,以至少检测错误情况并将程序重置为已知的良好状态。如果通过常规导航重置程序失败,请考虑终止目标进程并重新启动该进程。

[1] How to send simulated keyboard strokes to the active window using SendKeys

[2] Problem when getting the content of a listbox with python and ctypes on win32