applescript通过system events间接调用ax框架实现gui元素操作,前提是启用辅助功能权限并授权对应应用;可查询窗口、按钮等元素并执行点击、输入等动作,适用于chrome等无原生脚本支持的应用,但受沙盒、动态渲染等因素限制。

AppleScript 本身不直接暴露 macOS 辅助功能(Accessibility)API 的底层方法,但它通过 System Events 这一系统级桥接应用,间接调用 AX(Accessibility)框架,实现对任意 GUI 元素的读取、定位与操作。这种能力不是“深度调用”传统意义上的 API 编程,而是基于 macOS 可访问性架构的声明式控制——前提是用户已授权、目标界面元素可被 AX 层识别。
必须启用辅助功能权限
这是所有操作的前提,没有它,System Events 无法获取任何窗口或控件信息:
- 前往「系统设置 → 隐私与安全性 → 辅助功能」
- 点击「+」添加你将运行脚本的应用(如「脚本编辑器」「Automator」「FastScripts」或导出的 .app)
- 首次调用时系统可能弹窗提示,需手动允许;若后续失效,检查该条目是否仍勾选
用 System Events 获取并操作界面元素
一旦授权完成,即可用 AppleScript 查询进程、窗口、按钮、文本框等,并执行点击、输入、选中等动作:
-
获取前台应用及主窗口:
tell application "System Events" to set frontApp to first application process whose frontmost is true -
查找特定按钮(如 Safari 的“刷新”):
click (first button whose description is "Reload this page" of window 1 of process "Safari") -
向文本框输入内容:
set value of text field 1 of group 1 of window "登录" of process "Mail" to "user@example.com" -
遍历列表项并点击第 3 项:
click (row 3 of table 1 of scroll area 1 of window 1 of process "Finder")
注意:元素名称、层级、描述字段依赖实际 UI 的 AX 属性,可用「辅助功能检查器」(Xcode 自带或通过快捷键 ⌘⌥F5 启动)实时查看结构。
查询苹果健康当日数据,分析身体状况是否适合锻炼,给出四档建议(重度/中度/轻度/建议休息)并附详细说明。使用 Python 处理数据。
绕过无脚本支持应用的典型场景
对 Chrome、VS Code、微信、钉钉等未开放 AppleScript 词典的 App,GUI Scripting 是唯一可行路径:
- Chrome 中触发「打印」菜单:
tell application "System Events" to click menu item "打印…" of menu "文件" of menu bar 1 of process "Google Chrome" - 微信中点击「文件传输助手」聊天项:
click (row 2 of table 1 of scroll area 1 of window 1 of process "WeChat")(需先确认其在列表中的稳定位置) - VS Code 中执行「保存全部」:
keystroke "s" using {command down, shift down}(模拟快捷键更可靠)
限制与规避策略
并非所有界面都可被 AX 访问,常见限制包括:
- 沙盒化强的应用(如部分 Catalyst 或 SwiftUI 原生 App)可能隐藏控件,导致
button或text field查询失败 - 动态渲染内容(如 Webview 内部 DOM)通常不可见,需退而求其次用快捷键或 URL Scheme 替代
- 全屏或遮罩层覆盖时,System Events 可能无法命中目标窗口,建议先
activate目标进程再操作 - 性能敏感任务(如高频轮询)应避免
repeat+delay,改用launchd定时触发或监听文件/网络事件
真正“深度”集成往往需要组合手段:AppleScript 负责流程调度与 UI 导航,do shell script 执行系统命令(如 defaults write 修改偏好),必要时调用 Swift/Python 工具补足 AX 能力边界。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










