基于 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 设计,提供稳定可靠的桌面自动化能力。使用前请确保已正确配置所有依赖项和系统权限。
共 1 个版本