【问题标题】:Automator permissions error when running AppleScript in Safari – Alternatives and security risks?在 Safari 中运行 AppleScript 时出现 Automator 权限错误 – 替代方案和安全风险?
【发布时间】:2021-07-14 19:47:52
【问题描述】:

我想使用 Automator 和 AppleScript 在 Safari 中填写表格。我有一个看起来像这个玩具示例的功能脚本:

on run {}
    tell application "System Events" to keystroke "Hello"
    tell application "System Events" to keystroke tab
    tell application "System Events" to keystroke "World"
end run

当我在浏览器的特定位置时,我希望使用键盘快捷键执行它。但是,当我这样做时,我遇到了权限问题:

The action "Run AppleSCript" encountered an error: 
"System Events got an error: Automator Workflow Runner 
(WorkflowServiceRunner, my_script_name) is not allowed to send keystrokes"

System Prefrences -> Security & Privacy -> Privacy -> Accessibility 中,我已允许AutomatorAppleScript Utility,在Automation 选项卡下,我已允许System Events 用于Safari。

如果我也允许在 Accessibility 中使用 Safari,我可以让它工作,至少是暂时的,但这似乎 太激烈并且存在安全风险,让 Safari 始终拥有完全控制权只是为了不时运行一个脚本。

我应该如何处理这个问题?我希望脚本易于使用,并且不想每次都进入设置以临时允许 Safari。或者这也可以自动化吗?是否有与 Automator 和 AppleScript 完全不同的方法可以让我以更加用户友好和安全的方式执行此操作?基本上,我想做一些类似于 AutoHotKey 在 Windows 中能够做的事情。

【问题讨论】:

    标签: macos safari applescript automator


    【解决方案1】:

    我猜你所做的是设置一个快速操作,然后在系统偏好设置的“键盘:快捷方式”中的“服务”下为该快速操作提供一个快捷方式。我可以通过这样做来复制问题:尝试运行脚本需要 Safari 本身可以访问“控制您的计算机”。如果这不是你所做的,这个解决方案应该仍然有效,但你可能还想更新你的问题,以防有更好的解决方案可用。

    您可以做的是使用重定向。创建一个可以被授予控制您的计算机的权限的应用程序,然后创建一个将启动该应用程序的服务。

    1. 使用 Automator(或脚本编辑器)通过上述步骤创建应用程序,作为第一步添加 tell application "Safari" to activate。您需要这一步,因为打开应用程序会将焦点从 Safari 转移。

    1. 保存此应用程序。 (如果使用 Automator,您在开始创建脚本时告诉 Automator 它是一个应用程序;如果使用 Script Editor,您在保存脚本时告诉 Script Editor 它是一个应用程序。)

    2. 使用 Automator 创建快速操作。给它“启动应用程序”操作并告诉它启动您刚刚创建的应用程序。

    1. 将您在第 2 步中创建的应用程序拖到系统偏好设置的“安全和隐私”设置中的“辅助功能”列表中。 (您可能必须解锁这些设置以允许更改。)当您将其拖入时,它应该会自动检查,但如果没有,您可以检查它。

    1. 在“系统偏好设置”的“键盘:快捷方式”设置中的“服务”列表中,应列出您在步骤 3 中创建的快速操作。给它一个键盘快捷键。

    此时,您应该可以使用键盘快捷键来运行应用程序,并且只有该应用程序需要具有控制您的计算机的权限。

    【讨论】:

    • 感谢您的出色回答,您的假设是正确的。我是 Automator 的新手,似乎我省略了一些重要的细节。只是一个问题,如果用户打开了多个 Safari 窗口,是否存在“激活”命令会搞砸的风险?我假设用户在运行命令时打开了正确的选项卡/窗口
    • 不是为了这个目的。激活就像在跳出后跳回 Safari 一样。 Safari 保持在离开时的任何状态(可能禁止 JavaScript 在失去焦点时执行某些操作)。由于在这种情况下 Safari 失去焦点的唯一原因是击键启动了一个新应用程序,重新聚焦到 Safari 将返回到它,并在同一个顶部窗口和同一个位置选择。
    • 优秀。搞定了,谢谢最后,我必须将应用程序和快速操作都添加到“辅助功能”列表中,否则就像描述的那样。哦,如果像我这样的人在保存应用程序时遇到签名错误,您需要按照以下说明操作:apple.stackexchange.com/questions/254380/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 2017-06-09
    • 2019-02-08
    • 2016-12-24
    相关资源
    最近更新 更多