最近发现在mac的办公环境下有很多重复的地方,作为一个对电脑略知一二的人都知道,重复工作做了7次以上就应该用代码解决掉它。这种连接VPN的工作每天都得重复个两三次,那么就写个捷径,自动化它吧。
x01 环境需求
Mac
Accessibility inspector(Mac 自带)
自动化对象(理论来说是任何对象,但是只是对App)
Siri捷径
x02 自动化需求
因为有部分业务需要连接到公司VPN内,软件为Cisco的AnyConnect每天需要点击应用两到三次,这还不是最烦的,还要再点击按钮认证,然后弹框,输入用户名和密码,再点击登录,弹窗,再点击同意认证的协议,才能连接上VPN。因为这个工作非常繁琐,并且之前接触过Siri捷径,就想到自动化解决这个事情了。
x03 APP自动化开发
快捷指令内的AppleScript并不是和单独的scpt文件一样,是简化版的scpt。但是语法逻辑和javascript都是很像的。我认为AppleScript更大白话一些,指令都和说话一样好理解。
先了解一下Mac的key code (键盘码),下图简洁明了:
本项目只用了48(Tab)和76(Enter)键盘码。
接下来看程序
默认是给一个run函数的,所有命令都运行在run函数内,但是还是建议不用run函数,因为在调试过程中不方便显示信息,例如运行 “ entire contents – 获取所有 UI 元素” 命令时是无返回的:
run函数:
on run {input, parameters}
(* Your script goes here *)
return input
end run
首先要打开自己的应用,应用名称可以在任务管理器内找到,我这里是 Anyconnect
activate application "Cisco AnyConnect Secure Mobility Client"
打开应用后就是按照逻辑来走了,但是需要的有以下几点:
注意
1.延迟:delay在本地请求可以设置低点,远程连接时还是尽量长一点,防止等待时间不够
2.最开始我尝试用 keystroke 去输入用户名和密码信息,但是发现会遇到输入法的问题,懒得去用applescript调到默认英文输入法了,就直接把信息放在剪贴板内再粘贴到应用内输入
3.粘贴板处理完后要注意信息的保护,尤其是输入密码,因此最后一项操作是覆盖(清楚)剪切板:
set the clipboard to "helloworld" --清除剪切板
项目代码
activate application "Cisco AnyConnect Secure Mobility Client"
tell application "System Events"
tell process "Cisco AnyConnect Secure Mobility Client"
delay 1
-- entire contents -- 获取所有 UI 元素
key code 76 -- 确认
delay 1
-- 输入用户名和密码
set the clipboard to "xxxx"
keystroke "v" using command down
delay 0.5
key code 48 -- 跳转到密码
delay 0.5
set the clipboard to "xxxxxx"
keystroke "v" using command down
key code 76 -- 点击连接vpn
delay 1
set the clipboard to "xxxxxxx"
keystroke "v" using command down
delay 0.5
key code 76 -- enter
delay 0.5
key code 76 --同意协议
set the clipboard to "helloworld" --清除剪切板
end tell
end tell
x04 踩坑
用到Accessibility inspector去找到自己App内的element了。和Chrome的开发者工具找元素是一样的,非常好用。但是我没有找到具体的element对应的button并点击(请大佬指教)。
参考链接:
https://eastmanreference.com/complete-list-of-applescript-key-codes