20230620-applescript使用方法

什么是applescript

applescript 是苹果公司退出的一种脚本语言,内置macos 中,可以直接操作控制 macos 以及它的应用程序,是一个实现macos 自动化的一个极其有力地工具,applescript 的前身是一个hypercard 所使用得脚本语言 hypertalk

applescript的特点

与其他的脚本语言python 和JavaScript 相比,applescript 最显著的特点就是可以控制其他macos 上的应用程序,我们可以通过使用applescript来完成一些繁琐重复的工作,applescript 语法简单,接近自然语言,就像在和系统对话一样,另外系统也提供了语法查询字典,可以很方便的查询语法

applescript编辑器

macos上有自带的脚本编辑器,支持applescript,其中有模板工程,模板代码,应用词典等功能,非常方便脚本的编写

applescript 基础语法

按照管理,用applescript写一个hello world display dialog "hello, world!"

然后运行,就可以看到系统弹出了一个hello world 的弹窗

下面会介绍几种常用的语法

  1. 告诉xx 做xx 就像上边说的那样,applescript 的语法非常接近自然语言,如果你想让一个应用做一些任务,就可以直接告诉他就可以,语法类似于
1
2
3
tell 应用
做xx
end tell

启动safari 然后打开花椒

1
2
3
4
tell application “Safari”
activate
open location "https://www.huajiao.com/"
end tell

上述代码告诉了safari 启动,然后打开花椒,这个很接近于英语的表达方式

  1. 设置变量
1
set 变量名 to 值

把花椒直播的网址设置为变量huajiao

1
2
3
4
5
set huajiao to "https://www.huajiao.com/"
tell application "Safari"
activate
open location huajiao
end tell

把地址设置为huajiao变量,然后打开

  1. 条件语句
1
2
3
4
5
6
7
if 条件 then

else if 条件 then

else

end if

例如

1
2
3
4
5
6
7
8
9
10
11
12
set huajiao to "https://www.huajiao.com/"
set baidu to "http://www.baidu.com"
set num to 1

tell application "Safari"
activate
if num > 2 then
open location huajiao
else
open location baidu
end if
end tell
  1. 循环语句
1
2
3
4
5
6
7
8
9
10
11
12
repeat

exit repeat
end repeat

repeat while

end repeat

repeat with

end repeat

eg

1
2
3
repeat with num in [1, 2, 3]
display dialog "hello,word"
end repeat
  1. 模拟点击输入事件,系统会默认把所有支持applescript的应用的各种按钮名编号,类似于button 1 window1 可以通过这些名字直接定位到应用的各种按钮,找到你想要点击的按钮以后,就可以做一些点击输入等操作

首先如何快速拿到各个应用的按钮命名编号

  1. 可以通过entire contents 来打印区域内所有的ui 元素来查找元素,也最精确,例如打印 qq 页面元素

  2. 可以直接通过脚本编辑器内置的字典来查看已经安装的所有支持applescript的应用,列出来所有支持applescript 的app 以及各个app 所支持的接口调用

  3. 介绍一个第三方的软件 ui browser 可以通过直接看到各个软件按钮的名字,这样就可以方便的找到想要点击的按钮,target 选择你要操作的程序,选中对应控件后,勾选 hightlight 对应控件会高亮显示,例如找到qq的登陆页面关闭按钮 window 1 下的checkbox2

找到这个元素后

click 命令来点击按钮,keystroke 输入

1
click checkbox 2 of window "Window"

使用输入keystroke 输入一段内容

1
keystroke "abc"

或者key code 实现单个按键输入(Complete list of AppleScript key codes) 3)

set value of text field 1 of … to "abc"

applescript 应用举例

启动登陆qq

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
set username to “123456789”
set qqpassword to “zhoujielun”
#启动QQ
tell application “QQ”
activate
end tell
delay 1
#输入账号密码
tell application “System Events”
set value of text field 1 of window “Window” of application process “QQ” to username
delay 2
set value of text field 2 of window “Window” of application process “QQ” to qqpassword
delay 1
click checkbox 3 of window “Window” of application process “QQ”
end tell

自动发送一个邮件

1
2
3
4
5
6
7
8
9
10
11
12
set theSubject to “邮件标题”
set recipientName to “test”
set recipientAddress to “2541740067@qq.com”
set theContent to “我是正文”

tell application “Mail”
set theMessage to make new outgoing message with properties {subject:theSubject, content:theContent, visible:false}
tell theMessage
make new to recipient with properties {name:recipientName, address:recipientAddress}
end tell
send theMessage
end tell

applescript 小结

applescript 是一个macos 上非常简单的ui 自动化控制脚本语言
无需代码基础即可做一些自动化控制
一些系统自带app 和第三方app 都暴露了很多提供脚本调用接口,完全可以将不同的应用串接起来完成一些流畅的自动化操作

applescript 官方文档

Introduction to AppleScript Language Guide

https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html


告诉xxx 做某事具有俄罗斯套娃的结构,如果你要具体到safari 的当前页面,那么就要访问它的front document 最前面的页面,代码就是在

tell application “safari” 结构里再嵌入一个 tell front document

1
2
3
4
5
6
7
tell application "Safari"
tell front document
-- 你希望应用 Safari 的当前页面做的事
-- 比如获得当前页面的网页标题,直接用 name 就行
name
end tell
end tell

这里的activate 和name 分别是applescript suite 里的类 command 和类的属性 property

现在不理解别担心,下一节会专门介绍什么事applescript suite 以及如何使它它

依此类推,你可以无限tell 下去

1
2
3
4
5
6
7
8
9
10
11
tell application "Safari"
tell front document
tell something
tell something
tell something
-- macOS:你够了!
end tell
end tell
end tell
end tell
end tell

模拟键盘操作

模拟键盘操作是applescript的另一个特长,有两条命令可用于模拟键盘操作

keystroke 一串字符
key code 键位编码

再运行applescript 时,尤其是模拟键鼠操作时候,经常需要等待一个应用被打开,一个窗口弹出才能继续执行下一步操作,那就需要让运行中的脚本暂停片刻
用delay 命令就好

delay 0.5 – 暂停 0.5 秒

注释

在代码中插入一些不会被执行的注释用于解释代码内容,可以让别人和自己看自己写的代码时更好动¥,applescript 中凡是双短线和井号 后的内容都会被认为是注释,不会被执行

-- 这是一条注释
# 这也是一条注释

applescript suite

applescript suite 就是applescript 类,及其元素和属性的集合

一个类,可以是一个数据,比如safari HTML文档,也可以是一个函数,帮你完成一个特定功能,比如往 omnifocus 里添加任务这个动作

parse tasks into

一个类中可能包含元素和属性,比如name 是document的一个属性,代表document 的名称

suite 是按照应用来分类的

safari suite

finder suite 访达 提供的applescript 类的集合,只适用于 访达

此外,你还能找到一个standard suite 标准脚本套件,它是系统的全局脚本套件,不局限于单个应用,可在任意场景下使用

在哪里可以找到 applescript suite 呢

  1. 系统原生的脚本词典,打开 脚本编辑器,新建一个脚本,用快捷键 打开applescript 字典,在这里你可以看到你的mac 上所有支持applescript 的应用的suite

目前你已经写出了一段可行的代码了,如果你之后经常使用它,可以通过automator 之类的软件界,新建一个服务,然后把这段代码粘贴到相关的动作中,被设为服务后这个自动化流程就可以在快捷键中设置被赋予快捷键,

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2015-2024 TeX_baitu
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~