为什么 Automator AppleScript 没有结束?

Why doesn't Automator AppleScript End?

好的,我知道解决这个问题的方法可能非常简单,但我浪费了很多时间来弄明白。正如您可能会说的那样,我是 AppleScript 的新手。

我有一个由 Automator 运行 编写的 AppleScript。它单击 Chrome 中的一个按钮。我有一个动作需要重复将近 1000 次,所以我正在尝试使其自动化。这是我拥有的:

tell application "Google Chrome"
    activate
    set theTab to tab 1 of window 1
    execute theTab javascript "document.querySelectorAll('[title=Archive]')[0].click()"
end tell

这如我所愿:它激活 Chrome 并单击活动选项卡上的按钮。单击该按钮会弹出一个警告框,默认情况下是一个 OK 按钮。接下来我需要点击那个按钮,所以我有第二个 AppleScript:

tell application "Google Chrome" to activate
delay 2
tell application "System Events"
    keystroke return
end tell

明确一点:我知道最终我应该有一个脚本,但我创建了两个脚本来诊断我遇到的问题。

第一个脚本似乎永远不会结束,所以它永远不会到达第二个脚本。如果我 运行 第一个脚本,停止它,然后 运行 第二个,我得到我想要的。但除非我停止第一个脚本,否则它只会搅动而永远不会继续。当它执行 javascript 时,它似乎就停在那里。

就像我说的,这可能非常简单...而且我因为没有看到解决方案而感到非常愚蠢。我错过了什么?

这并不像您想象的那么简单,因为带有“确定”按钮的警告框是 模态。这意味着:脚本将等待“确定”按钮被按下,然后才会继续。

我无法测试,因为我不使用 Google Chrome,而且我不知道您测试的网页。自己试试我的建议(它使用 抛出人工制品中断 的想法):

tell application "Google Chrome"
    activate
    set theTab to tab 1 of window 1
    try
        with timeout of 1 second
         set theResult to (execute theTab javascript "document.querySelectorAll('[title=Archive]')[0].click()")
       end timeout
        theResult
    on error
        tell application "System Events" to keystroke return
    end try
end tell

这里已经过我的全面测试以编程方式关闭模式警告框:

try
    with timeout of 1 second
        set theResult to display alert "TEST"
    end timeout
    theResult
on error
    tell application "System Events" to keystroke return
end try