python 控制桌面程序,Python自动化 gui 桌面应用测试,鼠标操作
基于坐标和图像的设计哲学
pyautogui 并不需要去解析各平台的控件结构,他的元素定位都是基于坐标的。所以不论你是通过手工截图测量,还是通过自动化工具获取,只要你能拿到坐标,你就能进行元素操作。
一,鼠标操作
1,获取坐标
import pyautogui as ui
# 获取屏幕大小
size = ui.size()
# 获取现在鼠标位置
p = ui.position()
# 坐标是否超出屏幕范围
if_on = ui.onScreen(*p)
2, 鼠标移动
ui.moveTo(x/2, y/2, duration=2, tween=easeInCirc)
参数说明:
x, y 坐标
duration 持续秒数,默认是瞬间完成
tween 特效,一般没什么用。
3, 鼠标拖拽, 移动到指定的坐标
ui.dragTo(500, 500)
4, 百发百中的射箭游戏
import random
import time
import pyautogui as ui
x, y = ui.position()
target = (800, 800)
for i in range(10):
rand_x = random.randint(0, x)
rand_y = random.randint(0, y)
# 随机生成位置
print(rand_x, rand_y)
ui.moveTo(rand_x, rand_y)
# 移动到目标位置
ui.dragTo(target, duration=0.2)
time.sleep(1)
效果:
5, 相对移动
ui.move(-500, duration=1)
ui.move(yOffset=-400, duration=1)
ui.move(500, duration=1)
ui.move(yOffset=400, duration=1)
相对移动的小游戏:
start = 20
add_point = 10
duration = 0.5
for i in range(10):
if i % 2 == 0:
ui.drag(start, duration=duration)
ui.drag(yOffset=start, duration=duration)
else:
ui.drag(-start, duration=duration)
ui.drag(yOffset=-start, duration=duration)
start += add_point
效果:
6,点击
ui.click(x=None,
y=None,
clicks=1, # 点击次数
interval=0.0, # 间隔时间
button='right', # 右键
duration=0.0) # 持续时间
通过 click 进一步封装了 leftClick, rightClick, middleClick, doubleClick, tripleClick
7, scroll
窗口滚动,但是封装的滚动感觉比较鸡肋,他是以鼠标点击次数为单位的,所以不知道会滚动到什么位置。
pyautogui.scroll(10) # 向上滚动 10 个 clicks
>>> pyautogui.scroll(-10) # # 向下滚动 10 个 clicks
>>> pyautogui.scroll(10, x=100, y=100) # 移动到位置再滚动
使用 drag 和 dragTo 会更加方便一点,还是以坐标为依据,通过操作鼠标中键来实现窗口滚动,比如这个例子是 scroll 和 drag 的对比:
x, y = ui.size()
ui.scroll(-100)
time.sleep(1)
ui.scroll(100)
time.sleep(1)
ui.dragTo(y=y, button='middle') # 滚动到窗口底部
效果:
二,键盘操作
1, 输入框输入
# 输入yuz, 每个字母时间间隔 0.2 s
pyautogui.write("yuz",interval=0.2)
注意:pyautogui 并不支持输入框自动聚焦,所有输入之前先要点击输入框位置。
2,按下键盘 press
press('enter', presses=1, interval=0.0)
相当于鼠标操作的 click, 可以输入键盘上的按键, 比如 shift 键,enter 键。所有的按键可以查看源码当中的 KEYBOARD_KEYS 或者 KEY_NAMES。
参数:
presses, 操作按键次数
interval, 每次按键的间隔时间
所有按键列表:
3, 热键 hotkey
ui.hotkey('ctrl', 'shift', 'esc')
4, keyUp, keyDown
这是 press 的分解动作,相当于鼠标的 mouseUp 和 mouseDown。上面热键的操作方式可以分解成:
ui.keyDown('ctrl') # 按下 ctrl
ui.keyDown('shift') # 按下 shift
ui.keyDown('esc') # 按下 esc
ui.keyUp('esc') # 释放 ctrl
ui.keyUp('shift') # 释放 shift
ui.keyUp('ctrl') # 释放 esc
三,图像识别
坐标定位这种方式为通用性打下了基础,让 pyautogui 可以轻松做到跨平台。但是实际操作过程中很难清除的知道某个要操作的控件的确切位置,因为每次打开相同的页面都有可能是变动的。pyautogui 给出的解决方案非常简单粗暴,使用图像识别,返回在屏幕中的坐标位置,在通过坐标进行处理。
1,locateCenterOnScreen
返回被识别图像的中心坐标。参数说明:
必传参数,图片路径;
confidence, 识别精度,需要安装 opencv 才能使用;
grayscale, 灰度级别,能够提升识别速度。
locateCenterOnScreen('img/seven.png', confidence=0.7, grayscale=True)
现阶段图像识别的结果并不理想,基于图像识别的使用还存在以下问题:
识别不到指定元素;
识别精度不够;
查找速度比较慢
需要用到重型的 opencv 库, 或许可以尝试换用其他库。
需要提前准备被识别的图片,如果操作元素多,手动处理素材会怀疑人生。
所以 uiautogui 适合的场景是跨平台的少量原生控件交互,如果要对原生应用控件大量操作,还是换用其他工具比较合适。
基于图像识别的具体例子:
import time
import pyautogui as ui
time.sleep(3)
seven = ui.locateCenterOnScreen('img/seven.png', confidence=0.7, grayscale=True)
mult = ui.locateCenterOnScreen('img/multipy.png', confidence=0.7, grayscale=True)
two = ui.locateCenterOnScreen('img/two.png', confidence=0.7, grayscale=True)
equal = ui.locateCenterOnScreen('img/equal.png', confidence=0.7, grayscale=True)
ui.click(*seven)
ui.click(*mult)
ui.click(*two)
ui.click(*equal)
效果:
4, 后期可以期待的
标签:pyautogui,10,鼠标,Python,gui,ui,坐标,duration
来源: https://www.cnblogs.com/wangboyi/p/12660383.html
python 控制桌面程序,Python自动化 gui 桌面应用测试,鼠标操作相关推荐
- python控制电脑程序,Python简单实现控制电脑的方法
本文实例讲述了Python简单实现控制电脑的方法.分享给大家供大家参考,具体如下: 1.windows 下,CMD的一些命令: dir:列出当前的所有文件 time:打印当前的时间 tree:列出当前 ...
- xmanagr 注册机执行ubuntu 桌面程序,ubuntu无需安装 桌面环境
xmanagr 注册机执行ubuntu 桌面程序,ubuntu无需安装 桌面环境 Xshell 5 注册码: 690313-111999-999313 Xftp 5 注册码:101210-450789 ...
- python开发windows桌面程序,python开发windows桌面应用
为什么用Python开发桌面应用程序 1)wxWidgets是一个比MFC优雅的库,TortoiseCVS用wxWidges而不用MFC,就是因为wxWidgets好用,而不是为了可以移植. 2)Py ...
- python控制ie_【Python PAMIE模块实现IE自动化】
Python PAMIE模块实现IE自动化 Python编程语言的出现,给开发人员带来了不一样的开发体验.在这里我们先从一个比较重要的Python PAMIE模块的应用方式来充分的分析一下这一编程语言 ...
- python控制autocad_利用python控制Autocad:pyautocad方式
发现pyautocad模块:可以用python控制autocad的包.今天把文档中的重点内容摘录出来,以后绘图.计算大工程量.或者识别施工图的时候时候也许可以用到. 一.连接cad pyautocad ...
- python怎么读程序-python 怎么念
广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 注意: 您目前查阅的是历史版本 sdk 文档,已不再更新和维护,我们建议您查阅新版 ...
- python简单游戏程序-python基础练习之几个简单的游戏
文档介绍 利用python写"猜数字","猜词语","谁是卧底"这三个游戏,从而快速掌握python编程的入门知识,包括python语法/列 ...
- 用python写期货程序-python如何运用在期货(我用python做期货)
.程序化交易系统目前主要是通过计算机程序实现的,其实就是把交易者决策的过程用计算机语言描述出来,然后由计算机给出交易建议或直接发送交易指令到期货公司的. 想请教下一般python在实际项目中怎样运用? ...
- python开发安卓程序-python可以编写android程序吗?
python可以编写android程序吗?答案是肯定的.Android不直接支持使用python开发应用,需要使用其它中间件或者库.PythonForAndroid.CLE以及Wrapandroid ...
最新文章
- Google Duplex语气自然流利,外媒却质疑其演示通话录音是伪造的
- 8种最有可能在2016年倒闭的光伏企业
- 捕捉mysql中不可忽视的知识点(二)
- WWW 2021 | 通过强化学习控制对话式检索的风险
- Nginx URL 重写
- c语言中注释部分二侧分界符为,C语言常见复习题(选择填空)及参考答案
- pata1015_ATA / PATA的完整形式是什么?
- UGLY NUMBERS II
- java jdbc 连接mysql数据库,Java 通过JDBC连接Mysql数据库
- RocketMQ : RemotingTooMuchRequestException: sendDefaultImpl call timeout
- java多线程详解 六_java多线程学习-java.util.concurrent详解(六) Exchanger
- oracle静态,oracle静态sql和动态sql
- 最齐全的骨头VRay材质球素材,速来收藏
- 《Nature-Inspired Metaheuristic Algorithms》——蝙蝠算法 Bat Algorithm
- Java中进行Debug断点调试
- light动名词_英语里有些动词有名词形式,那还用不用它的动名词?怎么区分?...
- GBase 8a集群运行报错BLK_TEMP: return NULL in alloc
- 刷B站学数分Day1|如何写出一份合格的数据分析师简历
- 微博运营怎么做才能吸引更多的粉丝?
- 中英文停止词表(stopword)