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 运算符 供重载参考
Jun 11 Python
python cx_Oracle的基础使用方法(连接和增删改查)
Nov 19 Python
浅谈numpy数组的几种排序方式
Dec 15 Python
python3个性签名设计实现代码
Jun 19 Python
可能是最全面的 Python 字符串拼接总结【收藏】
Jul 09 Python
Python绘制堆叠柱状图的实例
Jul 09 Python
通过python实现随机交换礼物程序详解
Jul 10 Python
Python时间差中seconds和total_seconds的区别详解
Dec 26 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
Mar 06 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
Oct 10 Python
Pytorch之扩充tensor的操作
Mar 04 Python
python模拟浏览器 使用selenium进入好友QQ空间并留言
Apr 12 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
重量级动漫纷纷停播!唯独OVERLORD第四季正在英魂之刃继续更新
2020/05/06 日漫
用php将任何格式视频转为flv的代码
2009/09/03 PHP
基于PHP实现数据分页显示功能
2016/05/26 PHP
php显示页码分页类的封装
2017/06/08 PHP
在浏览器中获取当前执行的脚本文件名的代码
2011/07/19 Javascript
JavaScript模板入门介绍
2012/09/26 Javascript
JS Loading功能的简单实现
2013/11/29 Javascript
浅谈JavaScript Array对象
2014/12/29 Javascript
JavaScript学习总结之JS、AJAX应用
2016/01/29 Javascript
javascript面向对象程序设计高级特性经典教程(值得收藏)
2016/05/19 Javascript
div实现自适应高度的textarea实现angular双向绑定
2017/01/08 Javascript
微信小程序 基础知识css样式media标签
2017/02/15 Javascript
纯JS实现图片验证码功能并兼容IE6-8(推荐)
2017/04/19 Javascript
jQuery Json数据格式排版高亮插件json-viewer.js使用方法详解
2017/06/12 jQuery
Node.js静态服务器的实现方法
2018/02/28 Javascript
Vue.js点击切换按钮改变内容的实例讲解
2018/08/22 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
Python程序员开发中常犯的10个错误
2014/07/07 Python
python实现linux下使用xcopy的方法
2015/06/28 Python
pandas 获取季度,月度,年度首尾日期的方法
2018/04/11 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
2018/05/29 Python
Python使用pandas处理CSV文件的实例讲解
2018/06/22 Python
详解Django中间件执行顺序
2018/07/16 Python
python 实现在一张图中绘制一个小的子图方法
2019/07/07 Python
python 利用pyttsx3文字转语音过程详解
2019/09/25 Python
如何通过Django使用本地css/js文件
2020/01/20 Python
python相对企业语言优势在哪
2020/06/12 Python
利用HTML5 Canvas制作一个简单的打飞机游戏
2015/05/11 HTML / CSS
英国的潮牌鞋履服饰商店:size?
2019/03/26 全球购物
美国在线轮胎零售商:SimpleTire
2019/04/08 全球购物
C#如何调用Word并打开一个Word文档
2013/05/08 面试题
优秀团支部事迹材料
2014/02/08 职场文书
离婚财产分隔协议书
2014/10/23 职场文书
超市员工辞职信范文
2015/05/12 职场文书
二胎满月酒致辞
2015/07/29 职场文书
django注册用邮箱发送验证码的实现
2021/04/18 Python