当前位置: 首页 > news >正文

[Python] Python自动化:PyAutoGUI的基本操作

初次学习,如有错误还请指正

目录

PyAutoGUI介绍

PyAutoGUI安装

鼠标相关操作

鼠标移动

鼠标偏移

获取屏幕分辨率

获取鼠标位置

案例:实时获取鼠标位置

鼠标点击

左键单击

点击次数

多次有时间间隔的点击

右键/中键点击

移动时间

总结

鼠标的按下、抬起

鼠标滑轮滑动

键盘相关操作

键盘输入

中文输入

按键输入

组合按键

按键的按住和抬起

截取屏幕图像

消息框和输入框


PyAutoGUI介绍

PyAutoGUI 是一个用于自动化鼠标和键盘操作的 Python 模块,能够轻松实现 GUI 自动化任务。它支持多种操作系统(Windows、macOS 和 Linux),并且兼容 Python 2 和 Python 3

PyAutoGUI安装

在命令行窗口或打开pycharm的终端,输入:

pip install pyautogui

之后使用的时候直接导入包即可:

import pyautogui

鼠标相关操作

鼠标移动

基于屏幕分辨率让鼠标移动到一个坐标位置(按照分辨率来计算)

# 参数:x y
pyautogui.moveTo(100,100)

运行后会发现鼠标立刻被移动到了靠近左上角的位置。若要移动到最左上角则将x和y值都改为0即可。

注意:x值和y值不能超出你目前电脑的分辨率范围(也不能正好和屏幕分辨率相同),否则会报错。 例如你的电脑屏幕分辨率为1920*1080。你想要将鼠标移动到右下角时,若将x值设为1920,y值设为1080,此时会报错。只能将x设为1919,y设为1079才行。 也就是说坐标值最小写0,最大写到分辨率-1.

除此之外还可以规定鼠标花多少时间来移动到这个位置,只需要在坐标后加上时间参数即可:

pyautogui.moveTo(100,100,1)

运行后发现鼠标用了一秒来慢慢移动到规定位置,并且能显示出移动的轨迹,而不像之前一样瞬间到达。

鼠标偏移

基于目前鼠标的位置进行移动

#参数 x y
pyautogui.move(100,100)

其中,当x为正值时,鼠标向右移动。x为负值时,鼠标向左移动。当y为正值时,鼠标向下移动。y为负值时,鼠标向上移动。

注意:当前鼠标位置偏移后不能超过屏幕分辨率,否则会报错。 其次,当前鼠标的位置不能是(0,0),否则也会报错。

同样,鼠标偏移也可以加上时间参数

pyautogui.move(100,100,1)

获取屏幕分辨率

pyautogui.size()

#获取屏幕分辨率
print(pyautogui.size())

获取鼠标位置

pyautogui.position()

print(pyautogui.position())

案例:实时获取鼠标位置

#获取初始鼠标位置
x,y = pyautogui.position()
while True:#接受鼠标变动位置x1,y1 = pyautogui.position()#如果初始位置和变动后的位置不同,则输出最新的位置if x1 != x or y1 != y:x,y = x1,y1print(x,y)

此时控制台会一直输出鼠标的位置:

鼠标点击

左键单击

import pyautogui
import time
#先移动
pyautogui.moveTo(1299,61)
#添加等待时间以防止因为系统卡顿原因而导致漏指令
time.sleep(1)
#鼠标点击(默认左键点击)
pyautogui.click()#也可以合并上面的移动和点击语句,直接给点击方法中传参
pyautogui.click(1299,61)

我这里的位置时能够点击pycharm左侧的项目栏按钮:

执行前:

执行后:

可以看到左侧的项目栏被点击收起了

点击次数

click方法中除了可以传位置参数,还可以传点击次数(clicks)的参数,位于位置参数后。

#双击
pyautogui.click(1299,61,2)

多次有时间间隔的点击

要实现多次有时间间隔的点击,则需要在点击次数参数后,再添加点击间隔(interval)参数

#在(1299,61)位置,点击两下,每次点击间隔1秒
pyautogui.click(1299,61,2,1) 

右键/中键点击

要实现右键或中键点击,则需要在点击间隔参数后再添加按键(button)参数

#在(1299,61)位置,右键点击两下,每次点击间隔1秒
pyautogui.click(1299,61,2,1,'right') 
#中键为middle

移动时间

在button参数后添加移动时间(duration)参数即可

pyautogui.click(1299,61,2,1,'right',1)

总结

click()方法共有六个参数:

  • 位置1 x=坐标值

  • 位置2 y=坐标值

  • 位置3 clicks=点击次数

  • 位置4 interval=点击间隔时间

  • 位置5 button=右键right,中键middle

  • 位置6 duration=鼠标移动时间

  • 如果需要直接使用后面的参数也可以直接在括号内输入对应的方法加=号

  • pyautogui.click(button='left')

鼠标的按下、抬起

#方法1
pyautogui.moveTo(1410,461,1)
#鼠标按下(默认为左键)
pyautogui.mouseDown()
pyautogui.moveTo(1678,679,1)
#鼠标抬起
pyautogui.mouseUp()#方法2

执行前:

执行后:

也可在位置参数后添加按键参数:

如果在按下中添加了右键或中键为参数,那么在抬起时也要添加该参数,否则抬起时依然会默认抬起左键

pyautogui.mouseDown(1410,461,'right')
pyautogui.mouseUp(button='right')

鼠标滑轮滑动

正数向上滑动,负数向下滑动

pyautogui.scroll(200)

键盘相关操作

键盘输入

pyautogui.write('12345abc')

注意:该语句不支持直接输出中文 虽然可以切换成中文输入法,按照拼音顺序来执行,但是比较鸡肋,更好的方法可以参考下一节的中文输入。

如果需要间隔一段时间再输入可以在后面加上间隔时间参数:

pyautogui.write('12345abc',0.2)

中文输入

PyAutoGUI 本身不支持直接输入中文,但可以通过调用 pyperclip 模块将需要输入的中文复制到剪贴板中,然后使用 pyautogui 模拟 Ctrl+V 粘贴操作来实现。

首先需要在终端输入下面的命令来安装第三方库

pip install pyperclip

之后导入包即可使用

import pyperclip
a1 = "我要输入中文"
pyperclip.copy(a1)
pyautogui.hotkey('ctrl','v')#也可以用数组来随机输出数组内的中文
import pyperclip
import random
a1 = ["我要输入中文","我要输入英文","我要输入日文"]
a2 = random.randint(0,2)
pyperclip.copy(a1[a2])
pyautogui.hotkey('ctrl','v')

按键输入

如果要输入回车、删除,则需要按键输入

#按下回车
pyautogui.press('enter')
#按下f5
pyautogui.press('f5')

如果需要多次输入按键或是要间隔时间输入,就需要在后面添加上对应的参数。

#按下两次enter,每次间隔1秒
#参数:(keys,presses,interval)
pyautogui.press('enter',2,1)

组合按键

可以输入快捷键组合

#输入ctrl+v黏贴
pyautogui.hotkey('ctrl','v')

按键的按住和抬起

#输入一个大写S和小写s
pyautogui.keyDown('shift')
pyautogui.press('s')
pyautogui.keyUp('shift')
pyautogui.press('s')

截取屏幕图像

首先安装第三方库Pillow

pip install pillow

获取并保存截图

#第一个参数:保存的位置(默认为当前项目的目录下)
pyautogui.screenshot('1.png')
#上面这个是全屏截取
#下面为范围截取,括号内前两个参数为起始的x轴和y轴,后两个为结束的x轴和y轴
pyautogui.screenshot('2.png',(1410,461,1510,561))

执行前:

执行后:

消息框和输入框

  • 消息框
#参数:(内容,标题,按钮文字)
pyautogui.alert('hello','提示','ok')
#如果不改变按钮文字,则会调用windows原生的样式
pyautogui.alert('hello','提示')

  • 输入框
#参数(内容,标题,默认输入值)
a1 = pyautogui.prompt('显示内容','标题','请在此处输入内容')
print(a1)

输入123123:

消息框还可用于代码的暂停功能,在用户没有点击确定之前,后续的代码不会执行。


THE END         

如有遗漏,欢迎补充,感谢!

http://www.xdnf.cn/news/761203.html

相关文章:

  • ArkTS基础
  • [PCIe]Gen6 PAM4的功耗相比Gen5 NRZ增加了多少?
  • C++测开,自动化测试,业务(第一段实习)
  • 微软常用运行库合集(VisualC++)2025.04.22
  • 阴盘奇门 api数据接口
  • Redis:安装与常用命令
  • Mybatis-Plus 学习
  • RTMP播放器谁更强?深入解析SmartPlayer与VLC、PotPlayer等方案的技术差异
  • 落石石头检测数据集VOC+YOLO格式1185张1类别
  • WEBSTORM前端 —— 第3章:移动 Web —— 第5节:响应式网页
  • 字节golang后端二面
  • 位运算 #常见位运算总结 #题解
  • 优化06-物理读和IO
  • Markdown笔记
  • 81、使用DTU控制水下灯光控制
  • 商品模块中的多规格设计:实现方式与电商/ERP系统的架构对比
  • [AD] Reaper NBNS+LLMNR+Logon 4624+Logon ID
  • GNSS终端授时之四:高精度的PTP授时
  • PINN for PDE(偏微分方程)1 - 正向问题
  • io流2——字节输入流,文件拷贝
  • Docker容器创建Redis主从集群
  • 卢昌海 | 质量的起源
  • 基于FashionMnist数据集的自监督学习(生成式自监督学习VAE算法)
  • [蓝桥杯]螺旋折线
  • 2024 CKA模拟系统制作 | Step-By-Step | 8、题目搭建-创建 Ingress
  • win32相关(互斥体)
  • 大模型赋能低空经济:从技术突破到应用场景拓展
  • 【C语言练习】077. 理解C语言中的嵌入式编程
  • Python实例题:Python3实现图片转彩色字符
  • 【Hexo】4.Hexo 博客文章进行加密