type
status
date
slug
summary
tags
category
icon
password
第一章 自动化部分
“最小可用 + 稍微稳一点”的封装,快速实现:
- 点击、双击、右击、滚动、拖拽(鼠标操作)
- 输入文本(含中文/表情/长文本优化)
- 组合键
- 等待窗口聚焦
- 简单的防抖与异常处理。
一、安装依赖(最小)
(pyautogui 会自动拉 Pillow;pyperclip 用于剪贴板输入)
二、快速注意事项
事项 | 建议 |
Failsafe | 若不想鼠标移到左上角就抛异常: pyautogui.FAILSAFE = False |
默认暂停 | 去掉全局 0.1s 延迟: pyautogui.PAUSE = 0 |
坐标越界 | 先用 screenWidth, screenHeight = pyautogui.size() 检查 |
前台窗口 | 给浏览器聚焦,避免发到后台( win32gui.SetForegroundWindow(hwnd) ) |
高 DPI | 大多数情况下 pyautogui 已适配;若发现偏移,考虑 ctypes.windll.user32.SetProcessDPIAware() |
中文/复杂字符 | 使用剪贴板粘贴比逐字发送更快更稳 |
特殊键 | 用 pyautogui.hotkey('ctrl','l') 等 |
延迟 | 大模型响应慢,可在点击前再判断鼠标是否需要移动(减少“可视跳动”) |
三、封装一个简单驱动模块
四、典型使用场景示例
1. 直接点击模型返回坐标
2. 安全点击(带简单防抖)
3. 输入英文
4. 输入中文(自动走剪贴板)
5. 组合键
6. 打开网址
7. 拖拽 & 滚动
五、与你的大模型结合(伪代码)
六、常见坑与处理
问题 | 现象 | 处理 |
失焦 | 输入打到别的窗口 | 先调用 bring_window_to_front() |
中文部分缺字 | 逐字方式丢失 | 用剪贴板法 |
偶尔点偏 | 模型坐标不匹配真实放缩 | 记录截图分辨率,做比例换算 |
项目卡顿 | pyautogui 默认 pause | 设置 PAUSE=0 |
弹窗挡住 | 点不到目标 | 模型或逻辑加“当前窗口层级检测” |
连续误操作 | 循环内无状态判断 | 引入一个“当前是否允许点击”标志位 |
想撤销 | 没有紧急停止 | 加一个线程监听键盘(keyboard 库 或 pynput) |
七、什么时候该换技术栈?
触发 | 建议 |
模型越来越快 → pyautogui move+click 成瓶颈 | 改用 SendInput(ctypes) |
浏览器没获得焦点 | 增加 win32 窗口枚举聚焦 |
偶发误点高 | 加 UIA 验证(检查 ControlFromPoint) |
输入法切换问题 | 统一用剪贴板粘贴 |
想游戏/DirectX 窗口自动化 | 必须 SendInput or 驱动级 |
八、下一步你可以加的“小功能”(按优先级)
- dry-run 模式:只打印动作,不执行。
- 动作日志:记录时间、坐标、语义、结果。
- 点击后局部截图保存(调试训练)。
- 黑名单区域过滤(如关闭按钮)。
- 双帧确认(模型→下一帧仍识别才执行)。
九、改进建议
1. 错误处理和日志
2. 配置文件支持
- 将延时、坐标等参数外置到配置文件
- 支持不同场景的参数配置
3. 图像识别集成
4. 操作录制和回放
- 添加操作录制功能
- 支持操作序列的保存和重放
5. 更强的窗口管理
6. 性能优化
- 添加操作缓存机制
- 支持批量操作优化
- 异步操作支持
7. 安全性增强
第二章 引入视觉模型实现物体定位
- Author:沈林曦
- URL:https://aibhtt.com//article/cua-pyautogui
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts