PyAutoGUI鼠标控制功能完全指南
屏幕坐标系基础
在自动化控制中,理解屏幕坐标系是首要任务。PyAutoGUI采用笛卡尔坐标系系统,但与数学坐标系有所不同:
- X轴:从左到右递增,最左侧为0
- Y轴:从上到下递增,最上方为0
例如在1920×1080分辨率的屏幕上:
- 左上角坐标为(0, 0)
- 右下角坐标为(1919, 1079)(注意坐标从0开始计数)
获取屏幕分辨率和鼠标位置的方法:
import pyautogui
# 获取屏幕分辨率
screen_width, screen_height = pyautogui.size()
# 获取当前鼠标位置
current_x, current_y = pyautogui.position()
实时鼠标位置追踪
开发过程中,实时查看鼠标位置非常有用。以下是实现方法:
import pyautogui
print('按Ctrl-C退出')
try:
while True:
x, y = pyautogui.position()
print(f'X: {x:4} Y: {y:4}', end='\r')
except KeyboardInterrupt:
print('\n结束')
鼠标移动控制
PyAutoGUI提供两种鼠标移动方式:
绝对移动(moveTo)
移动到屏幕指定坐标:
# 立即移动到(100,200)
pyautogui.moveTo(100, 200)
# 2秒内移动到(100,200)
pyautogui.moveTo(100, 200, duration=2)
相对移动(move)
基于当前位置移动:
# 向右移动50像素
pyautogui.move(50, 0)
# 向下移动30像素,耗时1秒
pyautogui.move(0, 30, duration=1)
高级移动效果:缓动函数
PyAutoGUI支持多种缓动效果,使鼠标移动更自然:
# 先慢后快
pyautogui.moveTo(100, 100, 2, pyautogui.easeInQuad)
# 先快后慢
pyautogui.moveTo(100, 100, 2, pyautogui.easeOutQuad)
# 弹跳效果
pyautogui.moveTo(100, 100, 2, pyautogui.easeInBounce)
# 弹性效果
pyautogui.moveTo(100, 100, 2, pyautogui.easeInElastic)
鼠标拖拽操作
拖拽操作结合了移动和按键保持:
# 按住左键拖到(100,200)
pyautogui.dragTo(100, 200, button='left')
# 按住右键向右拖拽30像素,耗时2秒
pyautogui.drag(30, 0, 2, button='right')
鼠标点击操作
PyAutoGUI提供多种点击方式:
# 简单点击
pyautogui.click()
# 指定位置点击
pyautogui.click(x=100, y=200)
# 右键点击
pyautogui.click(button='right')
# 双击
pyautogui.doubleClick()
# 三击
pyautogui.tripleClick()
# 带间隔的多次点击
pyautogui.click(clicks=3, interval=0.25)
按键按下与释放
对于需要精细控制的场景,可以分开按键操作:
# 按下左键
pyautogui.mouseDown()
# 释放左键
pyautogui.mouseUp()
# 组合实现拖拽
pyautogui.mouseDown(x=100, y=200, button='left')
pyautogui.mouseUp(x=300, y=400, button='left')
鼠标滚轮控制
控制滚轮滚动:
# 向上滚动10个单位
pyautogui.scroll(10)
# 向下滚动10个单位
pyautogui.scroll(-10)
# 水平滚动(仅Mac/Linux)
pyautogui.hscroll(10) # 向右
pyautogui.hscroll(-10) # 向左
实用技巧与注意事项
-
坐标验证:使用
onScreen()检查坐标是否有效if pyautogui.onScreen(x, y): pyautogui.click(x, y) -
移动速度控制:通过
duration参数控制移动速度,避免动作太快导致系统无法响应 -
错误处理:建议添加异常处理,防止脚本意外中断
-
多显示器环境:PyAutoGUI在主显示器上工作最佳,多显示器环境下坐标可能需要进行转换
通过掌握这些功能,你可以使用PyAutoGUI实现各种复杂的鼠标自动化操作,从简单的点击到复杂的拖拽和滚动控制。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



