AppleScript 快速入门
AppleScript 顾名思义是苹果开发的一套脚本语言,利用 AppleScript 在 macOS 系统上可以对其他程序进行操作,点击按钮、发送消息、模拟自动化执行功能,比如可以打开浏览器,清空回收站等等一些操作,是一个非常有意思的脚本。说好了要快速入门,下面我们开始快速学习了解它吧。
一、让其他程序执行任务
在 macOS 上有一个应用叫脚本编辑器,通过 Launchpad 可以搜索到,打开脚本编辑器之后,可以看到支持编写和解析 AppleScript 和 JavaScript 两种脚本,如下图所示:
AppleScript 的语法和平时的英语语法很类似,你想让哪个程序执行操作,就 tell 它,比如你想让 Finder 清空回收站那就这样写:
1 2 3 4 |
tell application "Finder" empty the trash end tell |
在脚本编辑器上点击运行按钮就可以看到回收站的内容被清空了,或者按快捷键 Command + R 也能运行,运行之前记得回收站得有东西,不然可能会执行失败。
如果你想让系统说话,可以这样写:
1 2 3 4 |
tell application "Finder" say "My name is exchen" end tell |
哈哈,记得把电脑的声音打开,是不是听到说话了?不仅支持英文和中文,其他国家语言,像德语、荷兰语笔者试过,同样也可以。
如果你想让浏览器打开 URL,可以这样写:
1 2 3 4 5 6 7 8 9 10 11 12 |
set myBlog to "https://www.exchen.net" # 告诉 Chrmoe 浏览器打开 URL tell application "Google Chrome" # 新建一个 chrome 窗口 set window1 to make new window tell window1 set currTab to active tab of window1 set URL of currTab to myBlog end tell end tell |
看看 Chrmoe 浏览器是不是打开了你指定的 URL 了?有意思吧?
上面的测试代码都是在脚本编辑器里运行的,如何脱离脚本编辑器,直接在系统上运行呢?我们可以保存或导出脚本,点击文件菜单 -> 存储,可以看到支持的格式有四种,如图所示:
保存为脚本类型,然后通过 osascript 来执行脚本,如下:
1 2 |
/usr/bin/osascript test1.scpt |
如果保存为应用程序类型,就是一个 .app 的包,直接双击打开就能运行。
二、数据类型
AppleScript 的数据类型比较简单,一般常用的有 number、string、list、record,也就是数字类型、字符串类型、列表类型、字典类型。
数字类型的赋值和使用如下:
1 2 3 4 5 |
set num1 to 10 # 给 num1 赋值 set num2 to 20 # 给 num2 赋值 set num3 to num1 + num2 # num1 + num2 赋值给 num3 set num4 to num3 * 2 # num3 * 2 赋值给 num4 |
字符串类型的赋值和使用如下:
1 2 3 4 5 |
set str1 to "exchen.net" set str2 to "hehe" set str3 to str1 + str2 |
字符串与数字的转换方法如下:
1 2 3 4 |
set str3Len to the length of str3 set numToStr to num1 as string set strToNum to "123" as number |
列表类型其实就是相当于数组,定义和操作列表类型的方法如下:
1 2 3 4 |
set myLists to {1, 2, "str", 4, 5} # 定义列表数据 set item 3 of myLists to "exchen" #操作第三列的数据 get myLists # 获取列表数据 |
字典类型的定义和操作方法如下:
1 2 3 4 |
set myRecord to {name:"exchen", blog:"https://www.exchen.net", body:"hehe"} # 定义 Record 数据 set value to the body of myRecord # 从 Record 中获取 body 数据给 value get value |
三、条件语句
既然是脚本语言,当然不能少了 if 和 else 语句,使用方法如下:
1 2 3 4 5 6 7 8 9 10 11 |
set num to 123 if num = 123 then display dialog "等于 123" else if strToNum > 456 then display dialog "大于 456" else display dialog "不等于 123 也不大于 456" end if |
通过 contains 方法来进行字符串的比较判断:
1 2 3 4 5 6 7 |
set domainName to "www.exchen.net" if domainName contains "exchen" then display dialog "包含 exchen" else display dialog "不包含 exchen" end if |
四、循环
循环的写法有好几种,不过都是使用 repeat … end repeat,比如循环 100 次可以这样写:
1 2 3 4 5 6 7 |
set num to 10 repeat 100 times set num to num + 1 end repeat get num |
类似于 for 循环,就这样写:
1 2 3 4 5 |
set num to 5 repeat with counter from 0 to num by 1 display dialog counter end repeat |
类似于 while 循环,可以这样写:
1 2 3 4 5 6 |
set num to 0 repeat until num ≥ 10 display dialog num set num to num + 3 end repeat |
五、函数
如果某些功能有重用性,应该要写成函数,AppleScript 也支持定义函数,定义和使用方法如下:
1 2 3 4 5 6 |
on testFun() set num to 1 end testFun testFun() |
函数当然会有返回值,通过 return 返回值:
1 2 3 4 5 6 7 8 9 |
on testFun() set num to 1 return num end testFun set ret to testFun() get ret |
另外函数可能还会带参数,带参数的方法使用如下:
1 2 3 4 5 6 7 |
on testFun(str) display dialog str end testFun testFun("exchen") |
函数有可能会带多个参数,使用方法如下:
1 2 3 4 5 6 7 8 |
on testFun(str1, str2) display dialog str1 display dialog str2 end testFun testFun("exchen", "hehe") |
六、用户交互对话框
在前面我们使用过 display dialog 弹出对话框,如果要指定标题通过 with title 关键字,代码如下:
1 2 |
display dialog "这是内容" with title "这是标题" |
指定按钮的内容,可以通过 buttons {"No", "Yes"},按钮个数最多三个,代码如下:
1 2 |
display dialog "这是内容" with title "这是标题" buttons {"No", "Yes"} |
也可以通过 default button 设置默认选择的按钮,代码如下:
1 2 |
display dialog "这是内容" with title "这是标题" buttons {"No", "Yes"} default button "Yes" |
还可以指定对话框的图标,icon 图标可以指定 note/stop/caution 类型,或者指向文件路径,代码如下:
1 2 |
display dialog "这是内容" with title "这是标题" buttons {"No", "Yes"} default button "Yes" with icon note |
对话框一般是用于和用户进行交互,通过 button returned 可以获取用户点击了哪个按钮,然后进行相应用操作,代码如下:
1 2 3 4 5 6 7 |
display dialog "这是内容" with title "这是标题" buttons {"No", "Yes"} default button "Yes" if button returned of result = "Yes" then else if button returned of result = "No" then end if |
对话框中也可以带输入框,让用户进行输入内容,代码如下:
1 2 |
display dialog "请输入内容:" default answer "" |
带输入框的对话框的效果如下图:
输入内容之后,通过 text returned 来获取输入框的内容:
1 2 3 4 5 |
display dialog "请输入内容:" default answer "" if text returned of result = "exchen" then get "exchen.net" end if |
七、使用词典
在第一节我们知道了如何在其他程序中执行任务,比如让浏览器打开 URL、清空回收站,如果还想执行其他额外更多的功能怎么办?去哪儿查相应的方法名称?
可以通过词典来找相应的方法名称,将应用直接拖到 Dock 上的脚本编辑器图标,然后就会显示扩展的词典,在这里可以查看该应用支持的相应方法名称说明,比如 Chrome 的词典如下图所示:
有些应用没有功能扩展的词典,就会提示打开词典失败,如下图所示:
八、操作其他程序的界面
本小节我们来试一下操作其他程序来实现简单的自动化,打开计算器,使用 entire contents 显示出 UI 信息,代码如下:
1 2 3 4 5 6 |
tell application "System Events" tell process "Calculator" entire contents end tell end tell |
返回 UI 信息如下:
1 2 3 4 |
{window 1 of application process "Calculator" of application "System Events", group 1 of window 1 of application process "Calculator" of application "System Events", static text "0" of group 1 of window 1 of application process "Calculator" of application "System Events", group 2 of window 1 of application process "Calculator" of application "System Events", button 1 of group 2 of window 1 of application process "Calculator" of application "System Events", button 2 of group 2 of window 1 of application process "Calculator" of application "System Events", button 3 of group 2 of window 1 of application process "Calculator" of application "System Events", button 4 of group 2 of window 1 of application process "Calculator" of application "System Events", button 5 of group 2 of window 1 of application process "Calculator" of application "System Events", button 6 of group 2 of window 1 of application process "Calculator" of application "System Events", button 7 of group 2 of window 1 of application process "Calculator" of application "System Events", button 8 of group 2 of window 1 of application process "Calculator" of application "System Events", button 9 of group 2 of window 1 of application process "Calculator" of application "System Events", button 10 of group 2 of window 1 of application process "Calculator" of application "System Events", button 11 of group 2 of window 1 of application process "Calculator" of application "System Events", button 12 of group 2 of window 1 of application process "Calculator" of application "System Events", ...... column 2 of table 1 of menu item 1 of menu "帮助" of menu bar item "帮助" of menu bar 1 of application process "Calculator" of application "System Events", menu item "计算器帮助" of menu "帮助" of menu bar item "帮助" of menu bar 1 of application process "Calculator" of application "System Events"} |
比如我们关心的是按钮 9,信息比较多,一时看不出我们所关心的按钮,可以通过 Xcode 自带的工具 Accessibility Inspector 查看 UI 信息,打开 Xcode 菜单,在 Open Developer Tool 里可以找到它,打开之后点击捕获按钮,找到我们关心的按钮,效果如下图所示:
在 Accessibility Inspector 界面往下拉,可以看到按钮 9 是在第二组的第四个,如图所示:
从返回的 UI 信息里可以找到按钮信息:
1 2 |
button 4 of group 2 of window 1 of application process "Calculator" |
编写代码实现点击按钮:
1 2 3 4 5 6 7 |
tell application "System Events" tell process "Calculator" entire contents click button 7 of group 2 of window 1 end tell end tell |
如果想点击菜单,在 UI 返回信息里你关心的菜单,编写代码如下:
1 2 3 4 5 6 |
tell application "System Events" tell process "Calculator" click menu item "关于计算器" of menu "计算器" of menu bar item "计算器" of menu bar 1 end tell end tell |
执行之后,就相当于点击了 "关于计算器" 菜单,如下图所示:
九、运行参数
在第一节,我们知道通过 /usr/bin/osascript 能够执行脚本,如果脚本在启动的时候需要参数怎么办?通过 on run 定义好参数,代码如下:
1 2 3 4 |
on run {parameter1, parameter2} display dialog parameter1 end run |
然后在命令行执行的时候,后面跟参数执行就行了,命令如下:
1 2 |
/usr/bin/osascript test1.scpt "exchen.net" "parameter2" |
转载请注明:exchen's blog » AppleScript 快速入门