PythonPC客户端自动化实现原理(pywinauto)


Posted in Python onMay 28, 2020

一、前言

今天在这边专门整理了一遍文章,和大家一起聊聊如何使用python做PC端自动化!

二、环境安装

使用python实现来做PC端自动化,前提是先安装好python,那么还需要用到一个第三方库:pywinauto,在这边我们首先需要安装好这个库,安装命令如下:

pip install pywinauto

三、使用说明

安装好了之后,关于使用说明大家可以参照官方文档上的说明

内容翻译如下:

就是说在我们安装好Pywinauto之后,首先要确定哪种可访问性技术(pywinauto的backend)可以用于我们的应用程序,在windows上受支持的辅助功能技术有两种:

Win32 API (backend="win32") 默认backend

MS UI Automation (backend="uia")

如果您不能确定程序到底适用于那种backend,可以借助于GUI对象检查工具来做,常用的检查工具有Inspect.ex,Spy++ 等,这个不做过多介绍,大家自行学习和下载,使用很简单,也非常便捷。

四、快速入门

在安装好环境之后,并且确定了应用程序适用的backend,那么接下来我们就可以使用Pywinauto这个模块来对应用程序进行自动化操作了

1、连接到应用程序这边以window自带的计算器程序作为案例,给大家做讲解

连接应用程序,首先需要用到pywinauto.application.Application()来创建一个应用程序对象,然后再连接到应用程序,有如下两种方法:

方式一:直接通过start方法打开操作的应用程序,

from pywinauto import application
# 方式一:创建应用程序时可以,指定应用程序的合适的backend,start方法中指定启动的应用程序
app = application.Application(backend='uia').start('notepad.exe')

方式二:连接已经打开应用程序,可以通过connect连接到指定的应用程序

from pywinauto import application
# 方式二:查看要打开的程序进程号,通过process指定进程号连接
app = application.Application().connect(process=19035)

运行以上代码,就会自动打开记事本记事本,如下

PythonPC客户端自动化实现原理(pywinauto)

2、窗口选择

打开这个窗口之后,我们要操作该窗口的话,那么就的先选中这个窗口,关于窗口的选择有一下几种方式

# 方式一 :不适用于窗口名为中文的
wind_1 = app.窗口名 
​
# 方式二 :窗口名可以为中文 
wind_2 = app["窗口名"]
​
# 案例使用:选择上面打开的计算器程序窗口
wind_calc = app['无标题 - 记事本']

3、控件操作

程序窗口中的内容,把它称之为控件,我们要对这个窗口的内容进行操作,就需要选择到对应的控件,

获取所有控件

我们可以通过print_control_identifiers()这个方法,来获取这个窗口下的直接子控件,如下:

app['无标题 - 记事本'].print_control_identifiers()

打印出来的结果如下:

PythonPC客户端自动化实现原理(pywinauto)

上面打印出来的内容分别对应窗口种

选择控件

关于控件选择的方法有好几种,最简单的方法如下:

# 选择控件的方法
wind_calc = app["窗口名"]["控件名"]
# 案例操作:选择编辑窗口
edit = app['无标题 - 记事本']['Edit']

内容输入

在上面选择到编辑窗口之后,我们就可以进行内容输入了,

内容输入的方法:type_key()

# 在编辑栏种输入内容
edit.type_keys("柠檬班")
edit.type_keys("python自动化")
edit.type_keys("musen")

运行结果如下:

PythonPC客户端自动化实现原理(pywinauto)

4、键盘操作

输入完上述内容之后,接下来我们要修改编辑框中的内容,

通过键盘完成以下操作:全选(ctrl+A) 复制(ctrl+C) 粘贴(ctrl+V)

pywinauto.keyboard.send_key

pywinauto模拟操作键盘,需要使用到 pywinauto.keyboard.send_keys这个方法

# 导入模块
from pywinauto.keyboard import send_keys
​
# 全选(ctrl+A)  
send_keys("^a")
​
# 复制(ctrl+C) 
send_keys("^c")
​
# 粘贴(ctrl+V)
send_keys("^v")
​
# 回车键
send_keys("{VK_RETURN}")
​
# 粘贴(ctrl+V)
send_keys("^v")

常见的按键操作

字母按键用按键小写字母表示

常用的一些按键

  • ESC键:VK_ESCAPE
  • 回车键:VK_RETURN
  • TAB键:VK_TAB
  • Shift键:VK_SHIFT
  • Ctrl键:VK_CONTROL
  • Alt键:VK_MENU

按键修饰符

  • # 对于一些常用的按键,可以通过修饰符来表示,使用的时候比较方便
  • '+': {VK_SHIFT}
  • '^': {VK_CONTROL}
  • '%': {VK_MENU} Alt键
  • # 上面:全选(ctrl+A) 复制(ctrl+C) 粘贴(ctrl+V)就使用的是修饰符^来代表ctrl

更多的键盘操作大家可以参考官网文档

5、鼠标操作

pywinauto. mouse

pywinauto操作鼠标,需要导入mouse模块,mouse模块中设置了一系列的鼠标操作事件

鼠标移动:move方法

move(coords=(x轴坐标,y轴坐标))

缓慢移动鼠标案例

for i in range(10):
   x = 10 * i
   y = 10 * i
   time.sleep(0.5)
   # 移动鼠标
   mouse.move(coords=(x, y))

鼠标点击:click

# button指定左击还是右击,coords指定鼠标点击的位置
​
# 3.1、鼠标单击
# 指定位置,鼠标左击
mouse.click(button='left', coords=(40, 40))
# 指定位置 鼠标右击
# mouse.click(button='right', coords=(100, 200))
# 3.2 鼠标双击
mouse.double_click(button='left', coords=(140, 40))
​
​
# 4 按下鼠标:press
# 将属性移动到(140,40)坐标处按下
mouse.press(button='left', coords=(140, 40))
​
# 5 释放鼠标:repleace
# 将鼠标移动到(300,40)坐标处释放,
mouse.release(button='left', coords=(300, 40))
​
# 6、右键单击指定坐标
mouse.right_click(coords=(400, 400))
​
# 7、鼠标中键单击指定坐标(很少用的到)
mouse.wheel_click(coords=(400, 400))
​
# 8 滚动鼠标
# coords:指定鼠标的坐标位置。
# wheel_dist指定鼠标滚轮滑动的次数,正数往上,负数往下。
mouse.scroll(coords=(1200,300),wheel_dist=-3)

五、说明

关于pywinauto模块的基本使用就该大家介绍到这里了,对pc端自动化感兴趣的同学可以往这个方向去深入学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python定时检查启动某个exe程序适合检测exe是否挂了
Jan 21 Python
python win32 简单操作方法
May 25 Python
2018年Python值得关注的开源库、工具和开发者(总结篇)
Jan 04 Python
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
Apr 18 Python
python3+PyQt5实现自定义流体混合窗口部件
Apr 24 Python
用Python实现校园通知更新提醒功能
Nov 23 Python
python 实现多维数组转向量
Nov 30 Python
基于keras 模型、结构、权重保存的实现
Jan 24 Python
基于Django signals 信号作用及用法详解
Mar 28 Python
Python列表去重复项的N种方法(实例代码)
May 12 Python
django queryset相加和筛选教程
May 18 Python
python3列表删除大量重复元素remove()方法的问题详解
Jan 04 Python
基于Pyinstaller打包Python程序并压缩文件大小
May 28 #Python
Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码
May 28 #Python
Python爬虫requests库多种用法实例
May 28 #Python
在pycharm中创建django项目的示例代码
May 28 #Python
python中有函数重载吗
May 28 #Python
Python可以实现栈的结构吗
May 27 #Python
Python如何脚本过滤文件中的注释
May 27 #Python
You might like
php 破解防盗链图片函数
2008/12/09 PHP
浅析php过滤html字符串,防止SQL注入的方法
2013/07/02 PHP
PHP 设计模式系列之 specification规格模式
2016/01/10 PHP
CI框架网页缓存简单用法分析
2018/12/26 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
2019/12/11 PHP
JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符
2012/10/11 Javascript
JS保留两位小数,多位小数的示例代码
2014/01/07 Javascript
JavaScript版的TwoQueues缓存模型
2014/12/29 Javascript
jQuery实现的感应鼠标悬停图片色彩渐显效果
2015/03/03 Javascript
学习JavaScript正则表达式
2015/11/13 Javascript
jQuery插件支持同一页面被多次调用
2016/02/14 Javascript
javascript计算渐变颜色的实例
2017/09/22 Javascript
windows系统下更新nodejs版本的方案
2017/11/24 NodeJs
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
解决Vue打包之后文件路径出错的问题
2018/03/06 Javascript
详解vue项目中如何引入全局sass/less变量、function、mixin
2018/06/02 Javascript
Bootstrap实现省市区三级联动(亲测可用)
2019/07/26 Javascript
JS回调函数 callback的理解与使用案例分析
2019/09/09 Javascript
JS的时间格式化和时间戳转换函数示例详解
2020/07/27 Javascript
八种Vue组件间通讯方式合集(推荐)
2020/08/18 Javascript
vue 基于abstract 路由模式 实现页面内嵌的示例代码
2020/12/14 Vue.js
[03:08]Ti4观战指南上
2014/07/07 DOTA
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
python代码制作configure文件示例
2014/07/28 Python
Python实现过滤单个Android程序日志脚本分享
2015/01/16 Python
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
2016/01/20 Python
Python实现的简单线性回归算法实例分析
2018/12/26 Python
Python Subprocess模块原理及实例
2019/08/26 Python
中兴通讯全球官方网站:ZTE
2020/12/26 全球购物
师范生实习的个人自我鉴定
2013/10/20 职场文书
鼓舞士气的口号
2014/06/16 职场文书
2015元旦家电促销活动策划方案
2014/12/09 职场文书
2016婚礼主持词开场白
2015/11/24 职场文书
微信小程序实现录音Record功能
2021/05/09 Javascript
django学习之ajax post传参的2种格式实例
2021/05/14 Python
Nginx虚拟主机的搭建的实现步骤
2022/01/18 Servers