为什么 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
好的,我知道解决这个问题的方法可能非常简单,但我浪费了很多时间来弄明白。正如您可能会说的那样,我是 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