2013年9月16日星期一

如何用AppleScript写自动按建的脚本添加GMAI联系人到通讯录

我最近在为一些公益活动做志愿者,需要把收到的邮件整理,还需要把联系人都保存下来,添加到通讯录,方便用BCC群发回复支持者,向支持者报告最新动态。GMAIL本来有自动添加联系人功能的,后来人们抗议自己的通讯录里出现一些不认识的人,于是GMAIL把策略改为回复过的人的邮件地址才进通讯录,以便回邮件时自动完成邮件地址。这样,我需要手工把近千封邮件点开,然后点开右上角的下拉按钮,找到“将 ***加到联系人列表” ,这么一来,我会累死。

所以我想到Applescript也许可以自动帮我点击,结果搜索半天,没发现click()对窗口有作用,后来查看了GMAIL的快捷键,调试了半天,写出下面的脚本,虽然不能完全不干预就自动添加所有联系人,但还是减轻了我的工作量。

下面的脚本遇到几个意外情况需要人工干预,若关掉GMAIL的聊天功能,就可以避免下拉菜单中的“将 ***加到联系人列表” 出现在第五或第六的位置,脚本中就控制按五下向下方向键(arrow down),不过,若遇到联系人已经在通讯录的,第五下又会变成“删除邮件”,这个我没办法避免,删除原有通讯录也不能改善,只好人工干预。

Gmail每次只能预览100个会话,所以,脚本被我设置成循环100次,用下面的:
set var to 0
repeat while var < 30
配合

set var to var + 1
log var
end repeat

来实现。



这一行是激活Chrome窗口
tell application "Google Chrome" to activate
这 一行是调用“System Events",需要去MAC的“辅助功能”里启用“启用辅助设备的控制”
tell application "System Events"
这一行是用计数的,电脑可以语音报数
say var
这一行是用来 报告任务完成的
say "30 times done"

我解释一下下面的代码的效果:复制到AppleScript编辑器(苹果电脑系统自带的工具)里点运行后,先跳到Chrome浏览器,浏览器要先打开GMAIL并到设置里关闭聊天功能,然后开始把计数器var设置为0,然后判断这个数字是否小于30,然后电脑念出数字,然后按j键跳到下一副封邮件,然后按逗号定位到GMAIL的工具栏,然后按tab键15下到下拉菜单,确定,再下拉5下,确定,这样就保存联系人,然后再tab按两下,这两下tab是为了避免邮件会话中有多封邮件的情行光标焦点跑到textarea里导致下一个指令j不能跳转到下一封邮件。然后把var加上1,接下来继续循环,直到计数器达到我设定的30.

查看所有GMAIL的快捷键,输入问题就可以查看。shift+?才能输出“问号”。

tell application "Google Chrome" to activate
tell application "System Events"
tell application process "Google Chrome"
set var to 0
repeat while var < 30
keystroke "j"
say var
keystroke ","
delay 0.05
keystroke tab
delay 0.05
keystroke tab
delay 0.05
keystroke tab
delay 0.05
keystroke tab
delay 0.05
keystroke tab
delay 0.05
keystroke tab
delay 0.05
keystroke tab
delay 0.05
keystroke tab
delay 0.05
keystroke tab
delay 0.05
keystroke tab
delay 0.05
keystroke tab
delay 0.05
keystroke tab
delay 0.05
keystroke tab
delay 0.05
keystroke tab
delay 0.05
keystroke tab
delay 0.05
keystroke return
delay 0.05
keystroke (ASCII character 31)
delay 0.05
keystroke (ASCII character 31)
delay 0.05
keystroke (ASCII character 31)
delay 0.05
keystroke (ASCII character 31)
delay 0.05
keystroke (ASCII character 31)
delay 0.5
keystroke return
delay 0.5
keystroke tab
delay 0.2
keystroke tab
delay 0.2
set var to var + 1
log var
end repeat
say "30 times done"
end tell
end tell




写篇文章不容易,既然来都来了,请留言一下吧

现在已经有 2 条评论 :

  1. repeat 15 times
    keystroke tab
    delay 0.05
    end repeat

    回复删除
    回复
    1. 感谢,原来AppleScript更接近自然语言啊

      删除