Power+聚焦于效率工具和生产力技巧的挖掘,辅以对App、数字生活方式的探讨
发表时间:2023-10-17 06:01:17
文章来源:炫佑科技
浏览次数:125
菏泽炫佑科技
Power+聚焦于效率工具和生产力技巧的挖掘,辅以对App、数字生活方式的探讨
⚡️点击此处了解Power+每周更新目录
说到 macOS 上的自动化,我们可能会想到许多知名的软件。 然而,这些生产力应用程序几乎不可避免地需要 macOS 原生脚本语言的帮助。 事实上,很多第三方应用可能只是将编写的内容封装成一个按钮或者快捷键。
另外,如果我们需要某个功能,软件本身并没有提供。 我们还可以基于这些应用定制一些新的功能。
被称为脚本“语言”,让很多本应掌握它的用户望而却步。 但事实上,与其他脚本语言相比,它非常简单易学——涉及的知识点*少,语法也更灵活。 另外,它*好的一点是所有信息都在Mac中预设。 我们可以随时查看。
本文是一篇帮助您入门的文章。 我们先从它是什么开始,然后讲一下如何根据Mac中预设的文档编写自己需要的脚本。
我希望我能解除你对这种“语言”的恐惧自动化软件开发,并释放你 Mac 的自动化能力。
什么是?
我们可以把这个词拆开来看一下:
苹果,很好理解,一看就知道是苹果自家的产品。
呢绒? 如果你查字典,它的意思是“演员的剧本,剧本”。 按照时间顺序,在什么场景,用什么道具,用什么表情、姿势来演绎什么台词,这些都可以是剧本的内容。
在计算机中,它代表一种称为“脚本语言”的编程语言。 剧本语言遵循演员剧本的基本特征。 只不过这次电脑变成了演员,我们变成了编剧。 你可以用脚本语言告诉计算机按时间顺序做什么、在什么场景、以什么姿势。
脚本语言有很多种,你可能听说过Shell、、,它们都是其中的代表。 它是macOS下提供的系统级脚本语言。 与之前的相比,它出奇的简单,因为它:
语法简单,接近自然语言:几乎没有标点符号,语法不像其他语言那么严格1; 语法查询非常方便:系统原生提供语法查询词典,支持关键字查询。
我们可以看一个例子:在我的购物清单中添加三种商品:鸡蛋、牛奶和面包。 这个需求其实是我和macOS之间的一次对话:
我:“你好 macOS,请在我的“购物清单”中添加一些商品!”
macOS:“好的,你想添加什么内容?” (弹出输入框)
我:“鸡蛋(换行)牛奶(换行)面包(输入)”
macOS:(弹出通知)“您的‘购物清单’中已添加 3 件商品!多体贴一点!”
我们理解这个逻辑,并按照这个逻辑编写脚本,macOS 就会一步步有序地解释。
使用它让您的 Mac 在我的使用环境中执行任务
如今,越来越多的人在计算机上工作和学习。 如果你仔细体验的话,你可能会发现有时你会重复执行相同(或一系列)的操作。 如果这些单调且耗时的重复操作让你抓狂,那么你可以充分利用,让系统为你做这件事。
以我的使用场景为例,按照使用频率大致可以分为以下三种使用场景:
写入内容:例如,在不打开应用程序本身的情况下,将项目添加到收件箱并设置项目名称、有效期、标签等; 软件之间传输数据:例如从电子邮件客户端抓取电子邮件内容; 替代键盘和鼠标操作:可以替代一些固定的键盘和鼠标操作。
了解了它的使用情况后,我们从易到难来看看它的语法。
基本语法
作为入门级内容,本文不会对语法进行全面的介绍,否则的话。 所以我只列出我*常用的,它们能满足你的大部分需求。
告诉 xxx 做某事
的语法非常接近自然语言。 如果你想让应用程序()做某事,直接“告诉”它即可。
语法结构
具体例子:开始
tell application "Safari"
activate
end tell
“Tell start”,这是不是很接近英语的表达方式?
告诉 xxx 做某事具有俄罗斯套娃结构。 如果你想指定当前页面,那么你需要访问它的前面(*前面的页面)。 代码是在tell“”结构中嵌入一个tell front。
tell application "Safari"
tell front document
-- 你希望应用 Safari 的当前页面做的事
-- 比如获得当前页面的网页标题,直接用 name 就行
name
end tell
end tell
这里和name分别是套件中的class()和类属性()。 如果你现在不明白也不必担心,下一节将具体介绍什么是套件以及如何使用它。
以此类推,可以说无穷无尽。
tell application "Safari"
tell front document
tell something
tell something
tell something
-- macOS:你够了!
end tell
end tell
end tell
end tell
end tell
定义一个变量
set <变量名> to <类名称>
例如,如果要将剪贴板的内容放入变量中以供后续使用,可以这样做
set 我的变量 to clipboard
其中代表套件中提供的剪贴板的类。
或者,
tell application "Safari"
tell front document
set 标题 to name
end tell
end tell
该脚本将当前页面的标题存储到名为“title”的变量中。
至此,相信你已经对其中的语法和“变量”、“类”等概念有了简单的印象了。 不需要追求完全理解,只要能看懂*后一个例子就可以了。 我们的理解会随着我们的学习和使用而逐渐加深。
模拟键盘操作
模拟键盘操作是. 有两个命令可以用来模拟键盘操作:
这两个命令与模拟键盘操作相同:主要用于输入一串任意字符,非ASCII字符也可以。
例如,
keystroke "少数派"
只要执行这条命令,系统就会直接输入字符串“少数”。 键码:主要用于单键模拟,适用于键盘上的任意键,例如esc等非字符键。
key code 53
其中53是esc键的键码。 您可以在此处找到完整的关键代码。
另外,键码也可以与修饰键2一起使用,像这样
key code 9 using {command down}
其中9是V键的键码,所以上面的命令模拟了粘贴快捷键⌘-V。
注意:打字操作必须在内部进行。 例如,如果我们想模拟输入esc,我们会这样写:
tell application "System Events"
key code 53
end tell
模拟“鼠标”操作
本节与其说是模拟“鼠标”操作,不如说是模拟“点击”操作。 想想鼠标*原始的使用,无非就是两个操作:“移动指针”和“点击”。 “移动指针”也是将鼠标移动到可点击的区域并“点击”。
作为一个键盘人,我对鼠标这个可以“移动指针”的功能是又爱又恨。 我喜欢它,因为它非常直观,但我讨厌它,因为它效率低下。 试想一下,如果我们能够不用移动鼠标,直接进行“点击”操作,那该多好啊!
这样做,就可以实现“点击”操作,而不需要“移动指针”。
我们简单介绍一下它的原理。 一个正在运行的系统界面会有很多支持点击的界面元素,比如各种按钮、很多菜单项等,系统会通过不同的“数字xxx”来区分,避免混淆。 所以我们可以通过两种方式点击它们:
使用鼠标指针移动并点击;
直接告诉计算机“请点击编号为xxx的UI元素”。
我们要实现的是第二种方法。
图形用户界面中的一些 UI 元素
下图演示了分享按钮中的一个菜单项可以不用鼠标“点击”的效果(为了说明我不是通过移动鼠标来点击的,我一直在晃动鼠标,但是可以看到系统没有“通过分享来分享”操作是通过鼠标完成的):
模拟点击
以这种方式模拟“点击”操作的技术术语称为GUI(图形用户界面脚本)。 在我之前的文章《一步步教你如何模拟鼠标键盘操作,实现macOS系统的自动化操作》中有更详细的讲解。
小睡一下
再次运行时,尤其是模拟键盘和鼠标操作时,往往需要等待应用程序打开并弹出窗口才能继续下一步。 然后你需要暂停运行脚本一会儿并使用delay命令。
delay 0.5 -- 暂停 0.5 秒
评论
在不会执行的代码中插入一些注释来解释代码内容,可以让别人(和你自己)更容易理解你写的代码。 双破折号和井号 # 之后的任何内容都将被视为注释并且不会被执行。
-- 这是一条注释
# 这也是一条注释
套房
接下来我们需要增加难度,了解Suite。 一旦我们理解了它并将其与之前解释的基本规则结合起来,我们就可以为不同的软件编写更复杂的脚本。
,它是一个类(class),它的元素()和属性()的集合。
一个类可以是一段数据,比如一个HTML文档(); 它也可以是一个帮助你完成特定功能的函数,例如将任务添加到其中(将任务解析成)。
类可以包含元素和属性。 例如,name 是表示名称的属性。
“类别”中
套件按应用程序分类
suite:“浏览器”提供的类的集合,仅适用于“浏览器”; suite:“”提供的类的集合,仅适用于“”;…
另外,你还可以找到一个套件(标准脚本套件),它是系统的全局脚本套件。 它不限于单一应用,可以在任何场景中使用。
在哪里可以找到套房? 系统原生脚本字典:打开“脚本编辑器”→新建脚本→使用快捷键⌘⇧O打开字典()。 在这里您可以看到 Mac 上所有受支持的应用程序套件。
打开字典
学习和学习别人写的脚本:如果脚本字典里有比较难理解的地方,也可以去应用论坛(Forum)学习别人写的脚本。 例如, 和 有自己的论坛。
善于提问:可以在Stack部分下提问。
如何使用系统脚本字典
我们可以举一个具体的例子来看看如何使用脚本字典:以某种格式发送当前页面。 因为我用它来“稍后阅读”,所以我需要能够以以下格式将当前页面发送到中国:使用页面标题作为任务的标题,并使用页面 URL 作为该任务的注释。
添加任务
第 1 步:检查套件中提供哪些课程
我假设套件肯定提供了当前页面的标题和URL的类别,于是我打开字典,首先在右上角的搜索框中搜索“title”(即标题)。 它给出以下结果:
搜索: "标题" 的结果
这个关键字在添加列表项类别下,指的是阅读列表,这显然不是我们需要的。 再次尝试搜索 name,结果是:
搜索: "名字" 的结果
我们发现类下面有一个name属性。 考虑到页面是HTML文档(),这应该就是我们需要的类。
第二步:随意打开一个网站,在“脚本编辑器”中尝试一下:
成功获取当前页面标题
第三步:通过类似的方法找到页面URL的class属性:
成功获取当前页面URL
第4步:现在您需要添加它。 首先检查套件中提供哪些课程。 我先搜索add,发现没有好的结果:
添加的搜索结果
我尝试了new等,但找不到所需的类。 看来套房不按套路出牌。 *愚蠢但*有效的方法是通读整个套件并找到您需要的内容(否则您可能无法找到它)。 我的做法是搜索论坛或者Stack看看别人是怎么做的Power+聚焦于效率工具和生产力技巧的挖掘,辅以对App、数字生活方式的探讨,然后学习别人的代码。 为了实现一些常见的功能,这些论坛中的人们通常会分享现成的解决方案。
所以我终于了解到快速添加任务类就是将任务解析成。 在字典里查一下:
搜索: "将任务解析为" 的结果
它的功能是在格式中添加一段文本。
第5步:在“脚本编辑器”中尝试一下
尝试运行脚本
完成:现在你已经编写了一段可行的代码。 如果以后想经常使用的话,可以通过这样的软件创建一个新的“服务”,然后将这段代码粘贴到相关的中。 设置为“服务”后,可以在快捷键设置中为这个自动化流程分配一个快捷键,因此从现在起您可以通过快捷键直接调用此脚本。
套件外解决方案:模拟键盘和鼠标
了解Suite并不能解决所有问题,因为:
该应用程序套件不提供您需要的功能。 虽然有,但是你找不到它,或者你不知道如何找到它(比如上一节第4步发生的情况)
那么你能做的就是用它来模拟键盘和鼠标操作,这个我们在上一节“基本语法”中已经介绍过。
通过模拟键盘和鼠标来实现自动化操作,非常接近我们平时的电脑操作习惯,所以非常直观。 但我不建议使用它。 如果可以通过套件解决,请尝试使用套件! 当套件没有其他解决方案时,只能使用模拟键盘和鼠标作为解决方法。
举个例子你就明白了。 我有一个名为 Irvue 的壁纸应用程序。 您可以通过其菜单项“ ”来切换壁纸:
使用Irvue切换壁纸
如果模拟键盘和鼠标,则需要模拟点击菜单中的Irvue图标,然后模拟点击弹出菜单中的“ ”菜单项。 这个过程大约需要0.5秒。
但这种方法的缺点是,在整个过程完成之前,你不能随意点击鼠标——例如,当菜单刚刚弹出时,如果此时你不小心点击了其他地方,菜单消失了,脚本会告诉你找不到名为“ ”的菜单项。 所以这确实是一个比较折衷的方案。
注1:事实上,Irvue提供了一个用于更改当前壁纸的类。 如果你检查Irvue的套件,你会发现它提供了一个名为“更改当前壁纸”的类。 您可以直接调用来更换壁纸,这样就不会干扰您正常使用键盘和鼠标。
注 2:此模拟点击操作不适用于非通过 macOS UI 编写的工具。 例如,很多Web脱壳工具的macOS客户端都是使用框架编写的,我们无法操作其中的UI控件。 4
在我上面提到的《一步步教你如何使用模拟鼠标键盘操作实现macOS系统自动化操作》一文中,提供了更多模拟键盘鼠标操作的例子,而且都非常简单代码。 您可以根据这些具体示例的代码进一步理解和学习。
尾巴
了解基本语法是掌握自动化的**步。 之后,你应该了解Suite的概念以及如何使用它,因为它几乎是构成的主要部分。 只要套件能做到,就是*好的写作方案。 如果套件不能满足需求,模拟键盘和鼠标操作是一个非常有效(但妥协)的解决方案。
希望这篇文章能让您对其有一定的了解。 当你以后发现自己有重复操作的时候,不妨想想如何解决。