Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解

竹里
竹里
发布时间:2026-10-13| 6人浏览过
原创

本文详细介绍Python中PyAutoGUI模块的安装方法及核心功能,涵盖鼠标移动、点击、拖拽、滚轮操作及键盘输入。通过代码示例演示如何获取屏幕分辨率、实现自动化点击与拖拽,并利用截图定位功能处理动态按钮,同时提供防失控的安全机制设置。

本文通过具体实例解析Python中PyAutoGUI模块在控制鼠标和键盘以实现自动化任务中的应用,供读者参考学习。

PyAutoGUI是Python语言中用于控制鼠标和键盘操作的第三方模块。

借助该模块,用户可以轻松实现各类自动化任务,从而摆脱重复性、枯燥的手工操作。

PyAutoGUI模块主要具备以下功能:

  • 控制鼠标移动、左右键点击及滚轮滚动。
  • 模拟发送虚拟按键。

# 安装pyautogui

该模块兼容Windows、Mac OS X以及Linux操作系统。

根据具体使用的操作系统不同,可能需要预先安装某些依赖库。

对于Linux系统(Debian系列):

$ sudo apt-get install python3-pip
$ sudo pip3 install python3-xlib
$ sudo apt-get install scrot
$ sudo apt-get install python3-tk
$ and sudo apt-get install python3-dev

Scrot是PyAutoGUI用于截图的工具。

Mac OS X:

$ sudo pip3 install pyobjc-framework-Quartz
$ sudo pip3 install pyobjc-core
$ sudo pip3 install pyobjc
$ sudo pip3 install pillow

Mac OS X上的Python3可通过Homebrew或MacPorts进行安装。

Windows系统无需额外安装依赖。

在确保依赖安装完成后,执行以下命令安装pyautogui:

$ sudo pip3 install pyautogui
# Windows
pip install pyautogui

导入模块进行基础测试:

import pyautogui

# 准备

Python控制鼠标和键盘的速度极快,这可能导致其他应用程序出现异常。如果程序失控且鼠标指针不断乱晃,用户将难以通过常规方式点击窗口退出程序。

针对上述情况,有两种解决方法:

#1 pyautogui的暂停和Fail-Safe(故障安全)机制

你可以在Python脚本中设置每个函数执行后暂停数秒,从而为自己争取几秒钟的控制权。

import pyautogui
pyautogui.PAUSE = 1.5

Fail-Safe机制:当鼠标快速移动到屏幕左上角时,会触发PyAutoGUI的FailSafeException异常。你可以使用try-except语句捕获该异常,或者允许脚本直接异常退出。若希望终止程序,只需快速将鼠标移动至屏幕左上角即可。

import pyautogui
pyautogui.FAILSAFE = True

#2 注销系统

此方法较为粗暴,通常不建议使用。Windows和Linux系统的注销快捷键为Ctrl–Alt–Del;Mac OS X系统的注销快捷键为Command–Shift–Option-Q。

# 移动鼠标

PyAutoGUI采用x、y坐标系统,屏幕左上角的坐标为(0, 0)。

以1366×768分辨率为例:

 

使用pyautogui.size()函数获取屏幕分辨率:

import pyautogui
pyautogui.size()
# (1366, 768)
width, height = pyautogui.size()

 

获取屏幕分辨率后,接下来我们控制鼠标移动。

使用moveTo函数进行绝对坐标移动。(block.py):

import pyautogui
for i in range(10):
   pyautogui.moveTo(300, 300, duration=0.25)
   pyautogui.moveTo(400, 300, duration=0.25)
   pyautogui.moveTo(400, 400, duration=0.25)
   pyautogui.moveTo(300, 400, duration=0.25)

执行结果:

$ python3 block.py

上述代码使鼠标顺时针移动,并绘制10次方框。

绘制圆形:

import pyautogui
import math
width, height = pyautogui.size()
r = 250 # 圆的半径
# 圆心
o_x = width/2
o_y = height/2
pi = 3.1415926
for i in range(10):  # 转10圈
 for angle in range(0, 360, 5): # 利用圆的参数方程
 X = o_x + r * math.sin(angle*pi/180)
 Y = o_y + r * math.cos(angle*pi/180)
 pyautogui.moveTo(X, Y, duration=0.1)

使用moveRel()函数进行相对坐标移动,以当前鼠标位置为基点:

import pyautogui
for i in range(10):
  pyautogui.moveRel(100, 0, duration=0.25)
  pyautogui.moveRel(0, 100, duration=0.25)
  pyautogui.moveRel(-100, 0, duration=0.25)
  pyautogui.moveRel(0, -100, duration=0.25)

获取鼠标当前坐标:

import pyautogui
x, y = pyautogui.position()

实时获取鼠标位置坐标:

import pyautogui
try:
  while True:
    x, y = pyautogui.position()
    print(x,y)
except KeyboardInterrupt:
  print('\nExit.')

# 鼠标点击、拖拽和滚轮

鼠标点击操作

使用click()函数发送虚拟鼠标点击,默认情况下在鼠标当前位置执行左键点击。函数原型如下:

pyautogui.click(x=cur_x, y=cur_y, button='left')

  • x、y参数指定点击位置,默认为鼠标当前坐标。
  • button参数指定点击的按键,可选值包括‘left'、‘middle'、‘right'。

在当前位置执行右键点击:

import pyautogui
pyautogui.click(button='right')

在指定位置执行左键点击:

import pyautogui
pyautogui.click(100, 100)

click函数完成一次鼠标点击。一次完整的点击包含按下mouseDown()和弹起mouseUp()两个动作。上述两个函数的参数与click函数相同,实际上click函数只是对mouseDown()和mouseUp()函数的简单封装。

其他相关函数:

  • pyautogui.doubleClick():鼠标双击,即执行两次click()函数。
  • pyautogui.rightClick():右键点击。
  • pyautogui.middleClick():中键点击。

鼠标拖拽操作

拖拽指按下鼠标键并拖动鼠标。PyAutoGUI提供了两个函数:dragTo()和dragRel()。其参数与moveTo()和moveRel()一致。

注意:duration参数设置的时间不宜过短,拖动速度过快可能导致部分系统无法响应。

利用该功能,你可以在简单的画图程序中绘制复杂图形。

滚轮操作

使用函数scroll(),该函数仅接受一个整数参数。值为正数表示向上滚动,值为负数表示向下滚动。

pyautogui.scroll(200)

# 定位某个按钮的位置

PyAutoGUI具备截屏功能。读者可能会疑惑,为何该模块还包含截屏功能?

假设你需要每隔10秒点击一次按钮,利用前述函数可轻松实现。但如果每次点击后按钮位置随机变化,该如何处理?下面我们将解决这个问题。

首先了解如何使用pyautogui进行截屏:

import pyautogui
im = pyautogui.screenshot()
# 获得某个坐标的像素
im.getpixel((50, 200))
# (30, 132, 153)
# 判断屏幕坐标的像素是不是等于某个值
pyautogui.pixelMatchesColor(50, 200, (30, 132, 153))
# True

小测试:实时获取鼠标所在位置的像素值。

现在解决前述问题。关键在于如何找到按钮所在的坐标。方法很简单:首先对目标按钮进行截屏,保存为button.png。然后使用locateOnScreen函数查找按钮位置:

import pyautogui
pyautogui.locateOnScreen('button.png')
# (643, 745, 70, 29)

locateOnScreen函数主要进行颜色对比,若有一个像素不匹配则返回None。该函数返回匹配图形的坐标,通过计算可得中心点:

x, y = pyautogui.center((643, 745, 70, 29)) # 获得中心点
pyautogui.click(x, y)

locateAllOnScreen():查找所有匹配的位置坐标。

# 键盘按键

前述内容涉及鼠标操作,接下来介绍键盘控制。

输入字符串

pyautogui.typewrite():

import pyautogui
pyautogui.click(100, 100)
pyautogui.typewrite('Hello world!')

上述字符串为一次性输入,为演示效果可设置输入延迟:

typewrite('Hello world!', 0.25)

PyAutoGUI输入单个字符较为简便,但如何处理特殊字符?例如在输入Hello World后换行继续输入。

PyAutoGUI键盘按键表:

‘enter' (或‘return' 或 ‘\n') 回车
‘esc' ESC键
‘shiftleft', ‘shiftright' 左右SHIFT键
‘altleft', ‘altright' 左右ALT键
‘ctrlleft', ‘ctrlright' 左右CTRL键
‘tab' (‘\t') TAB键
‘backspace', ‘delete' BACKSPACE 、DELETE键
‘pageup', ‘pagedown' PAGE UP 和 PAGE DOWN键
‘home', ‘end' HOME 和 END键
‘up', ‘down', ‘left', ‘right' 箭头键
‘f1', ‘f2', ‘f3'…. F1…….F12键
‘volumemute', ‘volumedown', ‘volumeup' 有些键盘没有
‘pause' PAUSE键
‘capslock', ‘numlock', ‘scrolllock' CAPS LOCK, NUM LOCK, 和 SCROLL LOCK 键
‘insert' INS或INSERT键
‘printscreen' PRTSC 或 PRINT SCREEN键
‘winleft', ‘winright' Win键
‘command' Mac OS X command键
import pyautogui
pyautogui.click(100, 100)
pyautogui.typewrite('Hello world!', 0.25)
pyautogui.typewrite(['enter', 'a', 'b', 'left', 'left', 'X', 'Y'], '0.25')

按键的按下和释放操作

与鼠标按键操作类似。

  • keyDown():按下某个键。
  • keyUp():松开某个键。
  • press():完成一次完整击键,是前述两个函数的组合。

执行alt+F4:

pyautogui.keyDown('altleft');
pyautogui.press('f4');
pyautogui.keyUp('altleft')

也可直接使用热键函数:

pyautogui.hotkey('altleft', 'f4')

关于PyAutoGUI的介绍至此结束。如果你使用该模块编写了有趣的自动化脚本,欢迎留言分享。

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述内容对大家学习Python程序设计有所帮助。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。