【Python】PyAutoGUI 库:用于通过代码控制鼠标、键盘和屏幕操作
PyAutoGUI 库:用于通过代码控制鼠标、键盘和屏幕操作
一、库概述
PyAutoGUI 是 Python 的 GUI 自动化工具库,支持跨平台操作(Windows/macOS/Linux)。核心功能包括:
- 🖱️ 鼠标控制(移动、点击、拖拽)
- ⌨️ 键盘操作(输入、快捷键、特殊键)
- 🖼️ 屏幕处理(截图、像素分析、图像识别)
- 🛡️ 安全机制(故障保护、操作延迟)
典型应用场景:
- 软件测试自动化
- 重复性数据录入
- 游戏脚本开发
- 批量文件处理
- 跨平台 GUI 操作
二、安装与配置
# 基础安装pip install pyautogui# 完整功能支持(图像识别)pip install opencv-python pillow
跨平台注意事项:
scrot
等截图工具支持三、核心功能详解
1. 鼠标控制
import pyautogui# 获取屏幕尺寸screen_width, screen_height = pyautogui.size()# 绝对坐标移动pyautogui.moveTo(500, 300, duration=0.5) # 移动到(500,300)# 相对移动pyautogui.move(100, -50) # 右移100px, 上移50px# 点击操作pyautogui.click() # 左键单击pyautogui.rightClick(600, 400) # 右键点击指定位置pyautogui.doubleClick() # 左键双击# 拖拽操作pyautogui.dragTo(800, 600, button=\'left\') # 拖拽到目标位置pyautogui.drag(0, 200, duration=1) # 垂直向下拖拽
2. 键盘操作
# 文本输入pyautogui.write(\'Hello@世界!\', interval=0.1) # 支持Unicode# 按键操作pyautogui.press(\'enter\') # 按回车键pyautogui.press([\'tab\', \'space\']) # 按多个键# 组合快捷键pyautogui.hotkey(\'ctrl\', \'c\') # 复制pyautogui.hotkey(\'ctrl\', \'shift\', \'esc\') # 打开任务管理器# 长按操作pyautogui.keyDown(\'shift\') # 按住Shiftpyautogui.press(\'4\') # 输入$符号pyautogui.keyUp(\'shift\') # 释放Shift
3. 屏幕处理
# 全屏截图pyautogui.screenshot(\'fullscreen.png\')# 区域截图region = (100, 100, 500, 300) # (x, y, width, height)pyautogui.screenshot(\'area.png\', region=region)# 像素分析color = pyautogui.pixel(500, 300) # 获取(500,300)处RGB值if color == (255, 0, 0): print(\"检测到红色像素\")# 图像识别(需OpenCV)try: # 定位图像中心点 x, y = pyautogui.locateCenterOnScreen(\'button.png\', confidence=0.9) pyautogui.click(x, y)except pyautogui.ImageNotFoundException: print(\"未找到目标图像\")
四、高级应用技巧
1. 图像识别优化
# 提高识别效率的参数配置position = pyautogui.locateOnScreen( \'icon.png\', grayscale=True, # 灰度处理加速识别 confidence=0.85, # 匹配阈值(0-1) region=(0,0,800,600) # 限定搜索区域)# 预加载图像模板import cv2template = cv2.imread(\'button.png\', cv2.IMREAD_GRAYSCALE)
2. 智能等待机制
import timedef wait_for_element(image, timeout=10): \"\"\"等待元素出现在屏幕上\"\"\" start = time.time() while time.time() - start < timeout: if pos := pyautogui.locateOnScreen(image, confidence=0.8): return pos time.sleep(0.5) raise TimeoutError(f\"等待 {image} 超时\")
3. 防检测策略
# 随机化操作模式import randomdef human_like_click(x, y): \"\"\"模拟人类点击行为\"\"\" # 随机移动路径 pyautogui.moveTo( x + random.randint(-5, 5), y + random.randint(-5, 5), duration=random.uniform(0.1, 0.3) ) # 随机点击时长 pyautogui.mouseDown() time.sleep(random.uniform(0.05, 0.2)) pyautogui.mouseUp()
五、企业级最佳实践
1. 安全框架
# 启用安全机制pyautogui.FAILSAFE = True # 鼠标到左上角(0,0)终止脚本pyautogui.PAUSE = 0.3 # 操作间强制暂停# 关键操作确认if not pyautogui.confirm(\'继续执行操作?\'): exit()# 异常处理体系try: # 自动化流程except pyautogui.FailSafeException: pyautogui.alert(\"安全机制触发! 脚本已终止\")except Exception as e: timestamp = time.strftime(\"%Y%m%d-%H%M%S\") pyautogui.screenshot(f\"error_{timestamp}.png\") logging.exception(f\"自动化异常: {e}\")
2. 跨平台适配方案
# 操作系统检测if pyautogui.IS_MAC: cmd_key = \'command\'elif pyautogui.IS_WINDOWS: cmd_key = \'ctrl\'else: cmd_key = \'ctrl\' # Linux系统# 分辨率自适应screen_w, screen_h = pyautogui.size()target_x = int(screen_w * 0.8) # 屏幕宽度80%位置
3. 性能优化
# 图像识别缓存image_cache = {}def cached_locate(image_path): \"\"\"带缓存的图像定位\"\"\" if image_path not in image_cache: image_cache[image_path] = cv2.imread(image_path, 0) return pyautogui.locate(image_cache[image_path], pyautogui.screenshot())
六、综合应用示例
自动化登录流程
def auto_login(username, password): \"\"\"自动化登录示例\"\"\" try: # 等待登录界面元素 wait_for_element(\'login_window.png\') # 输入用户名 user_field = pyautogui.locateCenterOnScreen(\'username_field.png\') pyautogui.click(user_field) pyautogui.write(username) # 切换到密码框 pyautogui.press(\'tab\') pyautogui.write(password) # 点击登录按钮 login_btn = pyautogui.locateCenterOnScreen(\'login_btn.png\') human_like_click(login_btn.x, login_btn.y) # 验证登录成功 if not wait_for_element(\'welcome_banner.png\', timeout=5): raise Exception(\"登录失败\") except Exception as e: pyautogui.screenshot(\'login_error.png\') raise
文件批量重命名
def batch_rename_files(folder_path, prefix): \"\"\"文件批量重命名\"\"\" # 打开文件夹 pyautogui.hotkey(cmd_key, \'o\') # 打开文件对话框 time.sleep(1) pyautogui.write(folder_path) pyautogui.press(\'enter\') # 全选文件 pyautogui.hotkey(cmd_key, \'a\') time.sleep(0.5) # 启动重命名 pyautogui.press(\'f2\') # 输入新名称 pyautogui.write(prefix) pyautogui.press(\'enter\')
七、注意事项
-
权限与安全
- 在macOS需启用辅助功能权限
- 避免在敏感系统(如银行软件)使用
- 脚本执行时勿操作鼠标键盘
-
性能瓶颈
- 图像识别是最耗时操作
- 限定搜索区域可提升性能
- 考虑使用像素检测替代图像识别
-
常见问题解决
# 问题1:macOS权限错误# 解决:系统设置 > 安全与隐私 > 辅助功能 > 启用终端权限# 问题2:图像识别失败# 解决:增加confidence参数,使用灰度匹配pyautogui.locateOnScreen(\'icon.png\', grayscale=True, confidence=0.7)# 问题3:输入法干扰# 解决:脚本开始前切换至英文输入法pyautogui.hotkey(\'ctrl\', \'space\') # 切换输入法
最佳实践建议:开发阶段使用
pyautogui.PAUSE = 0.5
降低执行速度便于调试,生产环境适当减小该值提高效率。关键操作前添加time.sleep()
确保界面就绪,重要流程加入异常处理和日志记录。