让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
macOS Desktop Controller v2 - macOS 14 兼容版是一项面向实际任务的技能,主要用于基于 Python + AppleScript 的 macOS 14 兼容桌面自动化控制器,提供稳定可靠的 UI 自动化能力;🏗️ 架构设计;
启动/关闭应用 :精确控制应用的启动、关闭、重启;窗口管理 :移动、调整大小。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
基于 Python + AppleScript 的 macOS 14 兼容桌面自动化控制器,提供稳定可靠的 UI 自动化能力。
┌──────────────────────────────┐
│ 用户触发层/接口 │
│ - Terminal CLI / 界面 │
│ - Chatbot/数字人接口 │
└─────────────┬────────────────┘
│
▼
┌──────────────────────────────┐
│ 调度 & 核心 Agent │
│ - Action Queue / Task Manager │
│ - Skill Dispatcher │
│ - 状态 & 超时管理 │
└─────────────┬────────────────┘
│
▼
┌──────────────────────────────┐
│ 技能模块层 (Skills) │
│ - app_control_skill │
│ - click_skill / drag_skill │
│ - vision_skill │
│ - workflow_skill │
└─────────────┬────────────────┘
│
▼
┌──────────────────────────────┐
│ 系统执行层 (Executor) │
│ - Python + PyAutoGUI │
│ - AppleScript / Automator │
│ - subprocess 调用 / CLI │
└─────────────┬────────────────┘
│
▼
┌──────────────────────────────┐
│ macOS 14 系统层 │
│ - Accessibility / UI Events │
│ - Screen Capture / Permissions│
└──────────────────────────────┘
# 基础依赖 pip install pyautogui opencv-python numpy pillow # 可选依赖(增强功能) pip install pyobjc-framework-Cocoa pyobjc-framework-Quartz
系统设置 → 隐私与安全性 ✅ 辅助功能(控制鼠标键盘) ✅ 屏幕录制(截图识别) ✅ 自动化(控制 Safari / Finder / App)
from macos_desktop_controller import app_control
# 启动应用
app_control.open_app("Safari")
# 激活窗口
app_control.activate_window("Safari")
# 关闭应用
app_control.close_app("Safari")
from macos_desktop_controller import click_control
# 坐标点击
click_control.click_at(500, 300)
# 文本输入
click_control.write_text("Hello World", interval=0.05)
# 拖拽操作
click_control.drag_from_to(100, 100, 500, 500, duration=1.0)
from macos_desktop_controller import vision_control
# 截图分析
screen = vision_control.capture_screen()
# 模板匹配
position = vision_control.find_template("target.png", threshold=0.8)
if position:
click_control.click_at(position[0], position[1])
from macos_desktop_controller import workflow
# 定义工作流
workflow_steps = [
{"action": "open_app", "params": {"app_name": "Safari"}},
{"action": "wait", "params": {"duration": 2}},
{"action": "click_template", "params": {"template": "search_bar.png"}},
{"action": "write_text", "params": {"text": "macOS automation"}},
{"action": "press_key", "params": {"key": "enter"}},
]
# 执行工作流
workflow.execute_steps(workflow_steps)
{
"default_timeout": 30,
"retry_count": 3,
"screenshot_dir": "/tmp/screenshots",
"template_dir": "/tmp/templates",
"log_level": "INFO",
"automation_delay": 1.0,
"mouse_speed": 0.5,
"keyboard_delay": 0.05
}
export MACOS_CONTROLLER_LOG_LEVEL=INFO export MACOS_CONTROLLER_SCREENSHOT_DIR=/tmp/screenshots export MACOS_CONTROLLER_TEMPLATE_DIR=/tmp/templates
# 等待元素出现
position = vision_control.wait_for_template("login_button.png", timeout=30)
if position:
click_control.click_at(position[0], position[1])
# 等待应用激活
app_control.wait_for_app_active("Safari", timeout=10)
# 批量点击多个位置
positions = [(100, 100), (200, 200), (300, 300)]
for pos in positions:
click_control.click_at(pos[0], pos[1])
time.sleep(0.5)
# 条件判断
if vision_control.find_template("error_dialog.png"):
# 处理错误
click_control.click_template("ok_button.png")
else:
# 正常执行
click_control.write_text("Success")
# 检查辅助功能权限 osascript -e 'tell application "System Events" to get the name of every process whose background only is false' # 添加到辅助功能白名单 sudo spctl --add /path/to/your/script
# 调试截图
vision_control.capture_screen("/tmp/debug.png")
# 调整阈值
position = vision_control.find_template("target.png", threshold=0.6)
# 检查应用状态
if app_control.is_app_running("Safari"):
print("Safari is running")
else:
print("Safari is not running")
import logging logging.basicConfig(level=logging.DEBUG) # 启用调试模式 from macos_desktop_controller import set_debug_mode set_debug_mode(True)
# 启用截图缓存 vision_control.enable_cache(True) # 设置缓存过期时间 vision_control.set_cache_timeout(5.0)
# 批量截图 screenshots = vision_control.capture_multiple_screens(["screen1", "screen2"]) # 批量模板匹配 results = vision_control.batch_find_templates(["template1.png", "template2.png"])
MIT License - 详见 LICENSE 文件
此技能专为 macOS 14.x 设计,提供稳定可靠的桌面自动化能力。使用前请确保已正确配置所有依赖项和系统权限。