低学习成本的Gui自动化
近几天来有几个需求是软件自动化,之前没有接触过。在没有接触过自动化的情况下摸索了几天,找到了两个学习成本比较低的解决方案,采用的开发语言皆为Python。

Pywinauto

需准备如下环境
1.Python 3.x
python这样一门因为机器学习而大热的低学习成本的语言就不多做介绍了。
2.Python库 pywinauto
Github上Star700+的一个用于Windows GUI自动化库,官网上虽然写着Linux版本正在开发中,不过作者似乎咸鱼了有一段时间,Github上的最近一次更新也是在几个月之前。
3.Spy++
用于查看要进行自动化操作的软件的窗口句柄,简单易用。

Github: https://github.com/pywinauto/pywinauto

文档: https://pywinauto.readthedocs.io

​ 该解决方案只适用于调用Winapi接口的应用程序,对于使用Java编写的Jar等其他类型的GUI应用则无法操作,局限性较大。且调试略显麻烦,当然也有可能是我没有掌握正确的代码调试姿势。该方案不重点介绍,放上核心代码稍微注释一下就掠过了。

1
2
3
4
5
6
7
8
9
10
from pywinauto.application import Application

# tips: 启动软件
def start_soft(soft_path, soft_name, soft_title):
# 启动soft_path的应用
app = Application().start(soft_path)
# 根据窗体标题与应用进行连接
# 还可通过进程ID等方式进行连接,具体
app = app.window(title_re=soft_title)
return controller
1
2
3
4
5
6
7
8
9
10
11
12
# 使用start_soft获取窗体对象以后,对控件进行操作
# 打印应用所拥有的控件的相关信息
app.print_control_identifiers()

# 根据打印出来的控件信息
# 来选择想进行操作的控件,对其进行操作
app['控件名称'].click()
app['控件名称'].type_keys("test")
# 使用 "->" 来分割菜单层级
app['控件名称'].menu_select('一级菜单 -> 二级菜单')
# 通过index选择List的选项
app['控件名称'].select('ItemInList')

​ 更多高级用法阅读 https://pywinauto.readthedocs.io

方案二:

sikulix http://www.sikulix.com

sikulix1.1.2 最新版官方下载地址: https://launchpad.net/sikuli/sikulix/1.1.2

​ 简单易学的、基于OpenCV的图像识别来进行自动化的脚本图形脚本语言 —— sikuli。同时支持Java与Jython(可以使用Python2.x版本)、JRuby、Javascript来编写自动化脚本。

supports as scripting languages

  • Python language level 2.7 (supported by Jython)
  • running RobotFramework text-scripts is supported (see docs)
  • Ruby language level 1.9 and 2.0 (supported by JRuby)
  • JavaScript (supported by the Java Scripting Engine)**

​ sikuli还支持基本的文本识别(基于Tesseract实现)。

SikuliX comes with basic text recognition (OCR) and can be used to search text in images. This feature is powered by Tesseract.

Sikulix的基本操作

1
2
3
4
5
openApp("Cmd Command") # 划重点:不支持中文路径
click(img) # 点击指定区域
wait(img) # 等待某个组件出现
type("string") # 输入指定字符串
type(Key.ENTER) # 输入回车键

Sikulix全局设置

详细的可设置参数列表:http://sikulix-2014.readthedocs.io/en/latest/scripting.html#controllingsikuliscriptsandtheirbehavior

1
2
3
4
5
Settings.option = value
一些常用设置
MoveMouseDelay # 鼠标移动速度,默认为0.5
ClickDelay # 点击延迟,默认为0
TypeDelay # 键入延迟,默认为0
文章作者: Ryan
文章链接: https://lrybackinblack.github.io/blog/2018/04/02/自动化/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Ryan