核心用法
macos-desktop-control 是一套面向 macOS 的桌面自动化技能,采用语义控制与视觉控制分离的显式管道设计。核心工作流程为:先通过 AppleScript 激活应用、读取窗口状态,再基于截图进行 OCR 文本识别或 OpenCV 图像匹配定位目标,最后使用 pyautogui 执行鼠标点击、拖拽或键盘输入。
初始化时必须运行坐标映射脚本,解决 Retina 屏幕像素坐标(screencapture)与逻辑坐标(pyautogui)的 2:1 缩放差异,生成校准文件供后续复用。
主要功能模块
| 模块 | 技术 | 用途 |
|------|------|------|
| 应用控制 | AppleScript | 打开、激活应用,检查运行状态,读取前台应用 |
| 窗口检查 | AppleScript | 获取窗口标题、统计窗口数量、列举窗口列表 |
| 屏幕捕获 | `pyautogui` + 重采样 | 输出逻辑坐标系截图,作为视觉识别基准 |
| 目标定位 | Apple Vision OCR / OpenCV | 通过文本或图像模板匹配获取点击坐标 |
| 鼠标控制 | `pyautogui` | 移动、点击、双击、右键、拖拽,均使用逻辑坐标 |
| 键盘控制 | `pyautogui` | 输入文本、按键、组合快捷键、长按/释放 |
显著优点
- 架构清晰:严格区分 AppleScript(语义层)与 pyautogui(视觉层),避免深层次的 AppleScript UI 脚本复杂性
- 视觉鲁棒:对于自定义绘制界面、弱可访问性应用(如聊天列表、画布内容),截图+OCR/OpenCV 比 accessibility API 更可靠
- Retina 适配:内置坐标校准机制,自动处理 2x 缩放,避免坐标偏移错误
- 安全设计:保留
pyautogui.FAILSAFE = True,鼠标移至左上角可紧急中断自动化 - 零额外依赖:OCR 通过 PyObjC 调用 Apple Vision,无需安装 Tesseract
潜在缺点与局限性
- 单屏限制:V1 仅支持单主屏幕,多显示器、非 Retina 屏、缩放显示需后续版本支持
- 权限门槛:必须授予终端"屏幕录制"和"辅助功能"权限,企业环境可能受 MDM 策略限制
- 视觉脆弱性:界面主题变更、窗口缩放、遮挡弹窗可能导致 OCR/模板匹配失败
- 无原生等待机制:脚本间需外部协调等待时间,缺少内置的元素等待/重试逻辑
- OCR 精度边界:Apple Vision 对复杂字体、小字号、低对比度场景的识别存在误差
适合人群
- 需自动化 macOS GUI 工作流的开发者与 QA 工程师
- 使用 LLM/Agent 构建桌面自动化管道的 AI 应用开发者
- 需要跨应用协调操作(如从网页提取信息填入桌面应用)的自动化场景
常规风险
- 权限滥用:屏幕录制权限可捕获敏感信息,应在受控环境使用
- 误点击风险:坐标校准错误或识别偏差可能导致非预期点击,建议在关键操作前加入人工确认节点
- 状态同步延迟:截图与执行间界面状态变化(如加载动画)可能造成动作失效