pywinauto实例图文详解,放心不是记事本

pywinauto运用实例图文详解

博主废话有点多,讲得可能有些太细了。

然后这个是在windows中的运用,其他系统我没试过不知道。。

然后有两个例子,第二个是记事本的想了下,你们不一定有vscode,但是记事本都有,你可以试着操作下。。。

pywinauto的安装这里就不做说明了
命令安装

pip install --upgrade pywinauto

pywinauto手动下载的地址点击这里
这里贴一个参考安装的博文,博主也是按照他的弄的点击这里

这里再分享一个我用来查找元素的工具spy++中文版的,我找了挺久还,就分享给你们了。

链接:https://pan.baidu.com/s/1B0yXHCXF9mhtZzVlrEF3PA 
提取码:8pf7

好了开始进行正文
首先需要引入pywinauto

from pywinauto import Application  # 导包

然后找到你需要启动的软件的地址,个人习惯是用地址启动,也可以用标题呀,类什么的,我只是觉得地址比较好找。
我测试执行用的是vscode,其实我是个小前端。。
这是我vscode的地址路径,如果是路径启动的话一定要找到他的.exe启动程序的地址,例子如下:

    app = Application().start(r"F:\Microsoft VS Code\Code.exe")

上面这个命令输入之后就执行项目,他就会启动,下面就是我启动的vscode这个程序。
在这里插入图片描述
然后使用文章顶顶推荐的工具查找启动的程序的标题,工具使用呢就是解压压缩包然后进行如下截图操作:
我电脑是64位的就双击这个spyxx_amd64.exe程序就行了
在这里插入图片描述出现这个界面,图片会不会有点模糊?应该能看清楚吧
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200509114725364.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDI1MTU4NQ==,size_16,color_FFFFFF,t_70
这里按照图上的操作就行,一直按住鼠标左键拖拽到你刚才通过上面的start启动打开了的程序界面上,然后松开鼠标点击确定。
在这里插入图片描述
然后它就会定位到这个窗口,鼠标移到定位的窗口上,就是下面箭头指向的那个窗口,点击鼠标右键,弹出一些选项,点击属性选项
在这里插入图片描述
这里你会发现窗口标题是空的,似乎不是我们需要的窗口,然后我们点击窗口这一项,然后发现它有一个父窗口标题与我们打开的vscode程序标题相同,ok这个就是我们需要的,如果不确定也没关系试一下又不会出现什么问题,在摸索阶段就是要多尝试,错了无非就是报错嘛,然后你就知道不是这个title。。。然后。。。换一个继续尝试就是。。。。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后找到title后就继续写代码了,最好用一个sleep方法让它延迟一两秒再链接,因为有的程序会出现你启动了,但是当时链接不上,需要一两秒之后才行,为什么会这样具体的我忘了,大概意思就是这样。。。感兴趣的话你可以自己查一下。
这里有一个点需要注意,只能同时存在一个该程序启动,意思就是以我的vscode为例,如果你打开了两个它就会报错,或者说你在有一个vscode打开的时候执行这个项目它就会报错,懂?

time.sleep(2)
    # 绑定进程,class_name和title是可选的,可以灵活使用,如果找到多个或没有找到该程序,程序会报错
app = Application().connect(title="欢迎使用 - Visual Studio Code")

这上面的title是根据文章顶顶推荐的工具查找的,你如果使用的其他什么工具也行反正需要找到他的title或者class_name都行,我比较习惯用title个人意愿了这个就是。
这里补充一点,如果你打开的窗口里发现父窗口也是空,你就把这个属性弹窗×掉,然后再观察刚才定位的那个窗口,你就去找他的子窗口,父窗口,爷爷窗口,他的老祖宗窗口,看能不能找到,记住类名也是可以的不是一定要标题,如果都找不到咋办?凉拌,告辞了,等死吧,没救了,你去另寻高明,在下实在是束手无策了呀
在这里插入图片描述
好了继续,不废话了,对了,刚才的代码别忘了整,到目前为止流程的所有代码给你整一哈,你就执行就对了

from pywinauto import Application  # 导包
import time
def pywinauto_task():  # 定义一个自动化任务的函数
    app = Application().start(r"F:\Microsoft VS Code\Code.exe")
    time.sleep(2)
    # # 绑定进程,class_name和title是可选的,可以灵活使用,如果找到多个或没有找到该程序,程序会报错
    app = Application().connect(title="欢迎使用 - Visual Studio Code")
    
if __name__ == '__main__':  # 执行此函数
    pywinauto_task()

怎么看上面是否执行成功,这个就是,你要操作的程序成功启动了,然后控制台没报错。
然后就看你需要什么操作,我这里就演示下创建一个文件输入代码保存的操作吧。然后,最后面再给你们整一个操作记事本的,这样你也可以试一下。
首先根据打开的页面他有一行菜单栏对吧
在这里插入图片描述
根据你需要的操作选择,我这里需要创建文件,就是如下代码

app["欢迎使用 - Visual Studio Code"].type_keys('%F^N{ENTER}')

这个.type_keys()是他自带的方法不是我自己定义的哈,我没那么厉害。这里的应用你可以理解为用这个.type_keys()来执行括号内的命令,这是我的理解哈,原本啥子意思不太懂他们的解释都是在输入框输入文本。。
这里再解释下括号里的内容,首先%F是键盘快捷alt+F的意思,%就表示alt;^N是ctrl+N的意思,最后的{ENTER}就是enter的意思,懂?
如果还是不懂为什么我要这么写,你就在你试验的时候先像下面一样先执行,然后再添加一个^N再执行,特别提醒这里的键盘快捷是根据我的程序来的,你自己要操作什么程序就是什么快捷,别憨憨的哈

app["欢迎使用 - Visual Studio Code"].type_keys('%F')

还有哪些键盘操作?嘿嘿,给你们个截图,我在别人博客借的?点这里就是这位老哥的博客,感谢下老哥。
在这里插入图片描述
在这里插入图片描述
上面的代码执行完就是这个结果,新建了一个文件夹
在这里插入图片描述
执行完之后,发现窗口标题变了,然后用上面spy++工具去查找,我就不重复了,比较懒。
在这里插入图片描述
找到之后就写内容吧,注意标题变了哟,别忘了改
哦~这里.type_keys()里面为什么是字符串?
因为上面我应该说了一句这个方法是用来在输入框里输入文本的,所以,懂?意思就是你括号里的内容是上面的那些键盘或者鼠标快捷的时候,他就是执行那些操作,是其他字符串的时候就是输入文本。

app['Untitled-1 - Visual Studio Code'].type_keys('测试')

然后执行
执行完好你发现窗口title又变了。。。。
特别提醒一下一定要用复制的方法,不要手动输入title有的时候容易整漏了。。。或者敲错了
在这里插入图片描述

app['● 测试 - Visual Studio Code'].type_keys('%F^A')

这里就弹出了选择保存文件路径
在这里插入图片描述
一样的做法有了新窗口使用spy++查找窗口,然后修改文件名如下

app['另存为'].type_keys('测试.txt')

这里你可能会问,为什么这里会直接就是在文件名这块输入文本?
呵呵~
你如果观察仔细点会发现,你弹出这个保存窗口的时候,文件名这个输入框是选中状态的,所以,就不想解释了,我废话有点太多了。。。

这里为什么多了一个[‘保存(&S)’],因为我发现他是一个的窗口,还是[‘另存为’]的子窗口,我怎么知道的?别问,问就是spy++工具
然后.click()就是点击,一般适用于button按钮。我猜测.type_keys(‘ENTER{}’)也行,果然试了下果然可以,我可真是个小机灵鬼

app['另存为']['保存(&S)'].click()

好了,保存也做完了。
最后就退出吧,然后你发现窗口title又变了。。。真滴烦,去工地找工作去了
算了,继续吧,我热爱编程???
这里try一下因为不确定你是否保存过同名文件。别问问就是去找窗口title

    try:
        app['确认另存为']['是'].click()
    except:
        app['测试.txt - Visual Studio Code'].type_keys('%F^X')
    else:
        app['测试.txt - Visual Studio Code'].type_keys('%F^X')

完整代码:

from pywinauto import Application  # 导包
import time

def pywinauto_task():  # 定义一个自动化任务的函数
    app = Application().start(r"F:\Microsoft VS Code\Code.exe")
    time.sleep(2)
    # 绑定进程,class_name和title是可选的,可以灵活使用,如果找到多个或没有找到该程序,程序会报错
    app = Application().connect(title="欢迎使用 - Visual Studio Code")
    app["欢迎使用 - Visual Studio Code"].type_keys('%F^N{ENTER}')
    app['Untitled-1 - Visual Studio Code'].type_keys('测试')
    app['● 测试 - Visual Studio Code'].type_keys('%F^S')
    app['另存为'].type_keys('测试.txt')
    app['另存为']['保存(&S)'].type_keys('{ENTER}')
    try:
        app['确认另存为']['是'].click()
    except:
        app['测试.txt - Visual Studio Code'].type_keys('%F^X')
    else:
        app['测试.txt - Visual Studio Code'].type_keys('%F^X')
        
if __name__ == '__main__':  # 执行此函数
    pywinauto_task()

再提醒一下随时注意窗口的title变化

wdnmd终于完了。。我裂开了
万恶的记事本就贴下代码,不想解释了,太多记事本的例子了,看不懂问我,看见就会回,但你问的我不一定会,嘿嘿~给个链接没什么好说的,懂的都懂
这老哥讲得很全面,可以点进去康康,不懂就学,还是不懂?风里雨里工地等你。

from pywinauto import Application
import time

app = Application().start("notepad.exe")
time.sleep(1)
app = Application().connect(class_name="Notepad")
app['无标题 - 记事本'].type_keys('测试')
app['无标题 - 记事本'].menu_select("文件->保存")
app['另存为'].type_keys('测试.txt')
dlg_spec = app['另存为']
app['另存为'].type_keys('%T{DOWN}{DOWN}{ENTER}')#选择文件类型保存
app['另存为']['保存(&S)'].type_keys('{ENTER}')
try:
    app['确认另存为']['是'].click()
except:
    app['测试.txt - 记事本'].type_keys('%F^X')
else:
    app['测试.txt - 记事本'].type_keys('%F^X')
  • 19
    点赞
  • 112
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
pywinauto 是一个面向 Windows 平台的自动化测试工具,它可以利用 Python 语言对 Windows GUI 应用程序进行自动化操作和测试。 通过 pywinauto 可以实例化一个与 Windows 系统交互的对象,这个对象可以用来查找并操作应用程序窗口和控件。 实例化一个 pywinauto 对象的一般步骤如下: 1. 导入 pywinauto 库:首先需要在 Python 脚本中导入 pywinauto 库,可以使用 `import pywinauto` 语句。 2. 实例化应用程序对象:通过 `pywinauto.application.Application()` 方法来实例化一个应用程序对象。可以使用该对象来启动或连接到一个运行中的应用程序。例如,可以使用 `app = pywinauto.application.Application().start('notepad.exe')` 来启动记事本应用程序。 3. 查找窗口对象:通过应用程序对象的 `.connect()` 或 `.window()` 方法来查找窗口对象。`.connect()` 方法可以通过应用程序的进程 ID 或标题来查找窗口,而 `.window()` 方法可以通过窗口类名或标题来查找窗口。例如,可以使用 `window = app.connect(title='记事本')` 或 `window = app.window(title='记事本')` 来查找记事本窗口。 4. 操作窗口和控件:通过窗口对象和控件对象的属性和方法来进行操作。例如,可以使用 `window.maximize()` 方法最大化窗口,或使用 `window.Edit.type_keys('Hello World!')` 方法在编辑框中输入文本。 通过以上步骤,我们可以利用 pywinauto 创建与 Windows GUI 应用程序进行交互的实例。通过操作窗口和控件,可以模拟用户在应用程序上的操作,实现自动化测试、自动化部署等功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值