Python pyautogui模块实现鼠标键盘自动化方法详解


Posted in Python onFebruary 17, 2020

本文简单介绍如何使用 Python 的 pyautogui 模块实现鼠标的自动移动以及键盘的自行输入. 该模块不是 Python 自带的, 因此执行以下命令进行安装

# pyautogui模块依赖image模块,没有image会报ImportError: No module named 'PIL'错误

pip install image

pip install pyautogui

官方文档介绍:https://pyautogui.readthedocs.io/en/latest/

使用 pyautogui 模块控制鼠标的移动

size(): 用于获取屏幕分辨率

import pyautogui
 
print(pyautogui.size())

moveTo(): 用于鼠标的移动

pyautogui.moveTo(100,100,duration=1)

这段代码调用了 moveTo() 函数, 其接受 x, y 坐标作为参数, 还有一个可选的持续时间参数. 该函数将鼠标指针从当前位置移动到 (x, y) 坐标指定的位置, 移动花费的时间由持续时间参数指定. 保存并运行该 Python 脚本, 你将看到, 鼠标指针像被施了魔法一样, 从当前位置花 1 秒钟时间移动到坐标位置 (100, 100).

moveRel(): 根据当前位置, 相对移动鼠标指针

pyautogui.moveRel(0,300,duration=1)

这段代码将鼠标指针从原位置相对地移动 (0, 300) 个像素点 (译注: 即向下移动 300 像素). 比如说, 运行代码之前, 鼠标指针在 (1000, 300), 那么代码运行之后, 鼠标指针将移动到 (1000, 600), 耗时 1 秒.

position(): 获取当前鼠标指针的位置

print(pyautogui.position())

输出: 程序执行时的鼠标所在的位置坐标.

click(): 用于控制鼠标点击和拖拽

pyautogui.click(370,120)

在(370,120)的位置模拟鼠标点击,其中click还有一个参数动作button,默认为'lest',当button='right'时,可rightClick()效果一样(鼠标右键点击)

doubleClick() 双击

rightClick() 右击

有两个与鼠标拖拽操作相关的函数: dragTo 和 dragRel. 它们的行为与 moveTo 和 moveRel 类似, 区别在于拖拽操作在移动的过程中, 会保持鼠标左键被按下.

该功能可用于不同的场景, 比如移动对话框,或在 Windows 的画板程序中用铅笔工具自动绘图

import pyautogui
import time
 
time.sleep(5) # 5秒种时间切换到画板程序
 
pyautogui.moveTo(200,200,duration=1) # 鼠标移动到(200,200)的位置
 
pyautogui.dragRel(100,0,duration=1)
pyautogui.dragRel(0,100,duration=1)
pyautogui.dragRel(-100,0,duration=1)
pyautogui.dragRel(0,-100,duration=1)

scroll(): 滚屏函数接受像素数作为参数, 并用给定的像素数向上滚屏

pyautogui.scroll(200)

对选中的窗口进行向上滚屏200个像素点.当值为负数时,向下移动

typewrite(): 用于自动键入字符串, 只需将要键入的字符串传递给函数作为参数即可

pyautogui.click(100,200)
pyautogui.typewrite('hello word!')

假设文本区域位于屏幕 (100, 200) 的坐标位置, 那么这段代码将点击文本区域, 激活它, 并键入'hello word!'

传递键名: 可以向 typywrite() 函数传入分离的键名.

pyautogui.typewrite(['a','left','ctrlleft'])

这段代码等价于: 键入 "a", 然后敲击左方向键, 再敲击左 ctrl 键.

热键组合: hotkey() 可以模拟组合热键, 比如: ctrl-c, ctrl-a, ctrl-v 等

pyautogui.hotkey('ctrlleft','v')

模拟ctrl-v,复制功能

pyautogui.hotkey('ctrl', 'shift', 'esc')
#等价于
pyautogui.keyDown('ctrl')
pyautogui.keyDown('shift')
pyautogui.keyDown('esc')
pyautogui.keyUp('esc')
pyautogui.keyUp('shift')
pyautogui.keyUp('ctrl')

press() :键盘功能按键

pyautogui.press('enter') # press the Enter key
pyautogui.press('f1')   # press the F1 key
pyautogui.press('left')  # press the left arrow key

消息弹窗函数

如果你需要消息弹窗,通过单击OK暂停程序,或者向用户显示一些信息,消息弹窗函数就会有类似JavaScript的功能:

pyautogui.alert('这个消息弹窗是文字+OK按钮') # 返回OK 
pyautogui.confirm('这个消息弹窗是文字+OK+Cancel按钮') # 返回OK 或 Cancel
pyautogui.prompt('这个消息弹窗是让用户输入字符串,单击OK') # 返回输入的字符串

更多关于Python pyautogui模块的使用方法请查看下面的相关链接

Python 相关文章推荐
python使用正则表达式分析网页中的图片并进行替换的方法
Mar 26 Python
python基于xmlrpc实现二进制文件传输的方法
Jun 02 Python
Python中int()函数的用法浅析
Oct 17 Python
python的socket编程入门
Jan 29 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
May 27 Python
python实现接口并发测试脚本
Jun 25 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
Aug 26 Python
python画环形图的方法
Mar 25 Python
django queryset相加和筛选教程
May 18 Python
python查看矩阵的行列号以及维数方式
May 22 Python
Django项目在pycharm新建的步骤方法
Mar 02 Python
基于Python的EasyGUI学习实践
May 07 Python
Matplotlib使用字符串代替变量绘制散点图的方法
Feb 17 #Python
关于tf.TFRecordReader()函数的用法解析
Feb 17 #Python
将数据集制作成VOC数据集格式的实例
Feb 17 #Python
将labelme格式数据转化为标准的coco数据集格式方式
Feb 17 #Python
开启Django博客的RSS功能的实现方法
Feb 17 #Python
Python3打包exe代码2种方法实例解析
Feb 17 #Python
Django 博客实现简单的全文搜索的示例代码
Feb 17 #Python
You might like
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
php中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
2011/08/23 PHP
深入PHP数据加密详解
2013/06/18 PHP
thinkphp控制器调度使用示例
2014/02/24 PHP
PHP读取文件内容的五种方式
2015/12/28 PHP
PHP实现递归目录的5种方法
2016/10/27 PHP
Referer原理与图片防盗链实现方法详解
2019/07/03 PHP
top.location.href 没有权限 解决方法
2008/08/05 Javascript
Firefox中beforeunload事件的实现缺陷浅析
2012/05/03 Javascript
js读取cookie方法总结
2014/10/31 Javascript
招聘网站基于jQuery实现自动刷新简历
2015/05/10 Javascript
JS组件Bootstrap Select2使用方法解析
2016/05/30 Javascript
微信小程序 省市区选择器实例详解(附源码下载)
2017/01/05 Javascript
详解JavaScript中this的指向问题
2017/01/20 Javascript
微信小程序实现留言板
2018/10/31 Javascript
vue-cli 首屏加载优化问题
2018/11/06 Javascript
layui 实现自动选择radio单选框(checked)的方法
2019/09/03 Javascript
nodejs中的异步编程知识点详解
2021/01/17 NodeJs
[35:27]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第二场 10.29
2020/10/29 DOTA
python实现TCP服务器端与客户端的方法详解
2015/04/30 Python
利用python实现微信头像加红色数字功能
2018/03/26 Python
Python设计模式之观察者模式原理与用法详解
2019/01/16 Python
Django框架中间件(Middleware)用法实例分析
2019/05/24 Python
PyTorch的深度学习入门教程之构建神经网络
2019/06/27 Python
python opencv 简单阈值算法的实现
2019/08/04 Python
django项目用higcharts统计最近七天文章点击量
2019/08/17 Python
python写一个随机点名软件的实例
2019/11/28 Python
python基于三阶贝塞尔曲线的数据平滑算法
2019/12/27 Python
Sofmap官网:日本著名的数码电器专卖店
2017/05/19 全球购物
加拿大领先的牛仔零售商:Bluenotes
2018/01/22 全球购物
FC-Moto西班牙:摩托车手最大的购物场所之一
2019/04/11 全球购物
英国领先的维生素和营养补充剂直接供应商:Healthspan
2019/04/22 全球购物
实习生求职自荐信
2014/02/07 职场文书
情人节活动总结范文
2015/02/05 职场文书
python中的None与NULL用法说明
2021/05/25 Python
Spring Security使用单点登录的权限功能
2022/04/03 Java/Android