applescript 通过 apple 事件与原生支持脚本化的 macos 应用通信,需应用提供 sdef 词典;可用拖拽法测试支持性,再以 tell application 精准控制,并通过 on run 接收输入、return 返回结果,辅以 do shell script 和 system events 扩展能力。
applescript 控制 macos 应用程序的核心,是建立一条从脚本发出指令、到目标 app 接收并执行、再反馈结果的可靠路径。它不是模拟点击,而是通过系统级 apple 事件(apple events)与原生支持脚本化的应用通信——只要 app 提供了脚本词典(sdef),就能被精准调用。
确认目标应用是否支持脚本控制
不是所有应用都能被 AppleScript 操作。判断方法直接有效:
- 打开“访达”,进入 /应用程序/实用工具,启动“脚本编辑器”
- 另开一个访达窗口,定位到你要测试的应用(如“终端”“预览”“自动操作”)
- 把该应用图标直接拖到“脚本编辑器”图标上——如果弹出带“词汇表”的词典窗口,说明它已开放完整脚本接口
- 常见原生支持应用包括:Finder、Mail、Safari、Pages、Numbers、Terminal、Automator、Script Editor 本身
用 tell 语句定向发送指令
AppleScript 依靠 tell application "XXX" 明确指定操作对象。语法必须准确,App 名称需与进程名一致(例如 Safari 的进程名就是 "Safari",不是 "Safari 浏览器"):
查询苹果健康当日数据,分析身体状况是否适合锻炼,给出四档建议(重度/中度/轻度/建议休息)并附详细说明。使用 Python 处理数据。
-
基础激活示例:
tell application "Safari" to activate -
带参数的创建操作:
tell application "Finder" to make new folder at desktop with properties {name:"Backup_2026"} - 多步连续控制:可嵌套或分段写,比如先激活 Mail,再新建邮件,再设收件人
- 注意:部分 App 需要已运行才能响应;若未启动,可在 tell 前加
launch application "XXX"
接收输入并返回结果(尤其在 Automator 中)
当 AppleScript 作为“自动操作”工作流程中的一环时,它天然支持数据流转:
- 脚本开头的
on run {input, parameters}是标准入口,input接收前一操作传来的文件、文本或对象列表 - 处理完成后,
return input或return {"done", myResult}可将结果传递给后续操作 - 例如:选中多个文件 → “获取指定 Finder 项目” → “运行 AppleScript”批量重命名 → “移动 Finder 项目”归档
- 不返回值,后续操作就收不到数据;返回类型需匹配下一操作预期(如文件路径数组、纯文本等)
补充交互能力:do shell script 与 System Events
纯 AppleScript 有时无法覆盖全部场景,这时需要组合使用:
-
do shell script:在脚本中调用 Unix 命令,比如
set userName to do shell script "whoami"或do shell script "say '任务完成'" - System Events:用于操作那些不支持脚本但有 GUI 界面的程序,例如点击菜单栏图标、填写密码框、触发快捷键——但它属于 UI 自动化,稳定性略低于原生脚本控制
- 混合示例:用
do shell script获取当前日期字符串,再用tell application "TextEdit"新建文档并插入该日期










