Pywinauto-0.6.8入门指南 电脑端软件GUI鼠标键盘Python自动化办公、测试、重复性工作制定库

前言

转眼间学 Python 也有接近 4 年的事情了。
自从学了这门所谓的编程语言之后,一切皆对象的思维方式影响了我的工作、生活,顺带着影响着人生观等。所以说,专注一件事情的同时,顺带着把其他的一些东西醒悟了,这也算是一件圆满的答复吧。

  • 本人学习、整理的笔记个人YY为比较直观,用词刺眼,如有冒犯,多多见谅。

网上介绍 Python 的太多,我就用最实际的来说:我个人认为硬件技术的发展使得目前的硬件问题变得性能过剩,加上最近几年网上大多数“专家”也发现了摩尔定律可能性或者存在被打破的规律,so,不用多说,学 Python 还是学 other 那是需求者要说的事情;假设你不喜欢蛋糕,每天路过一个蛋糕店,且这个蛋糕店能让你免费领取、试吃新鲜刚做好蛋糕,对于你自己而言,东西再好、免费也是白搭。所以说,一门技术对于一个人来说,最重要的第一点是用途,其次就是易学、易用。
与我来说,Python 在我实际当中本就有实现的用途,其次就是易学与易用。
那么本文的主角 Pywinauto 顾名思义,就是利用 Python 在电脑上进行软件的 GUI 自动化,模拟人工操作;那么,你的流程可以先这样:

  1. 利用面向对象的思维方式,先将重复性且有规律的工作内容进行分类;
  2. 利用流程思维(思维导图的方式)将工作类进行流程设计(面向过程);
  3. 使用 Python Pywinauto 库、os 模块(或者 Pathlib)、win32clipboard(像手动操作复制图片、或者文字需要的)……
    [这里只列举了我自己常用的几个]

以上只是自己的开头,接下来是正文的开始,我自己从 Pywinauto 官方文档 - 点击传送 里使用 沉浸式翻译 插件进行摘录保存,里面根据自己的理解修改了一定量的东西,再加上根据自己的阅读习惯进行一定量的排版。


推荐辅助工具:Windows - SDK - inspect,微软官方:https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/ 点击 Download the installer 等待下载好,安装时尽管点下一步。

inspect 安装之后先重启电脑,否则打开 inspect 可能会卡死并且该软件不工作。重启后请在我的电脑依次打开:C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64 (注意:10.0.22621.0 是我自己目前电脑最新的版本号,请根据你的电脑来,否则就不是说依次打开了!) 在 x64 的文件夹下找到 inspect.exe 建议右击 - 发送到 - 桌面快捷方式 。


这是什么?


pywinauto是一组用于自动化Microsoft Windows GUI的python模块。在最简单的情况下,它允许您将鼠标和键盘操作发送到窗口对话框和控件。

安装


pywinauto 可以与 pip 和 conda 一起安装。Run pip install pywinautoconda install -c conda-forge pywinauto .

手动安装


要检查是否正确安装了它,请运行 Python

from pywinauto.application import Application
app = Application(backend="uia").start("notepad.exe")
app.UntitledNotepad.type_keys("%FX")

它是如何工作的


《入门指南》中介绍了核心概念。

通过每个类的属性访问 ( __getattribute__ ) 可以完成很多工作。例如,当您获取 Application 或 Dialog 对象的属性时,它会分别查找对话框或控件。

myapp.Notepad # looks for a Window/Dialog of your app that has a title 'similar'
              # to "Notepad"

myapp.PageSetup.OK # looks first for a dialog with a title like "PageSetup"
                   # then it looks for a control on that dialog with a title
                   # like "OK"

此属性解析会延迟(默认超时),直到成功。因此,例如,如果您选择一个菜单选项,然后查找生成的对话框,例如

app.UntitledNotepad.menu_select("File->SaveAs")
app.SaveAs.ComboBox5.select("UTF-8")
app.SaveAs.edit1.set_text("Example-utf8.txt")
app.SaveAs.Save.click()

在第 2 行执行此行时,“另存为”对话框可能未打开。因此,我们等到有控件要解决后再解决对话框。
此时,如果我们找不到带有 ComboBox5 控件的 SaveAs 对话框,那么我们会等待很短的时间并重试,这会重复到最长时间(当前为 5 秒!
这是为了避免显式使用 time.sleep 或“wait”函数。
如果应用程序执行长时间操作,则新对话框可能会在以后出现或消失。您可以像这样等待它的新状态

app.Open.Open.click() # opening large file
app.Open.wait_not('visible') # make sure "Open" dialog became invisible
# wait for up to 30 seconds until data.txt is loaded
app.window(title='data.txt - Notepad').wait('ready', timeout=30)

一些类似的比较工具


如果有这么多自动化工具,为什么还要编写另一个自动化工具呢?


有很多原因:-)

采用不同的方法:**

大多数其他工具都不是面向对象的,你最终会写出这样的东西:

window = findwindow(title = "Untitled - Notepad", class = "Notepad")
SendKeys(window, "%OF")  # Format -> Font
fontdialog  = findwindow("title = "Font")
buttonClick(fontdialog, "OK")

我希望创造一些更人性化的东西(和 pythonic)。例如,上面的翻译是:

win = app.UntitledNotepad
win.menu_select("Format->Font")
app.Font.OK.click()

Python 使它变得简单:
Python 是一种很棒的编程语言,但没有 Python 的自动化工具(极少数库是用 Python 实现的)。

本地化作为主要要求:

Mark:马克:

“我在本地化行业工作,GUI 自动化经常被广泛使用,你需要做的就是确保你的 UI 相对于源 UI 的行为和正确性。这实际上比测试原始源 UI 更容易。

但是大多数自动化工具都是基于控件的坐标或文本,这些可以在本地化软件中更改。
因此,我的目标(尽管尚未实现)是允许脚本在原始源语言(通常是英语)和翻译软件(日语、德语等)之间保持不变。

  • 26
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ょ镜花う水月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值