如果存在对话框,请使用Applescript单击特定按钮

如果存在对话框,请使用Applescript单击特定按钮,applescript,Applescript,我一直在想,如果对话框弹出,如何有条件地单击它。我有一个脚本,可以在Apple Music中将一组播放列表复制到另一个播放列表,但有时这些播放列表可能会有重复的播放列表,我想跳过。问题是,它并不是每次都发生,只有在你已经复制了一些之后,它才会开始遇到那些重复的。我试着按return键来关闭对话框,但有时似乎会错过 这是我希望实现的逻辑,但我似乎无法确定是否存在对话 if (dialog = true) then click button "Skip" of windo

我一直在想,如果对话框弹出,如何有条件地单击它。我有一个脚本,可以在Apple Music中将一组播放列表复制到另一个播放列表,但有时这些播放列表可能会有重复的播放列表,我想跳过。问题是,它并不是每次都发生,只有在你已经复制了一些之后,它才会开始遇到那些重复的。我试着按return键来关闭对话框,但有时似乎会错过

这是我希望实现的逻辑,但我似乎无法确定是否存在对话

if (dialog = true) then
    click button "Skip" of window "Music"
end if
更新:我能够采用@wch1zpink answer的方法来获得解决方案。我遇到的一个问题是,在使用UI浏览器进行探索时,有时弹出窗口是窗口1,有时是窗口2,因此当它不符合标准时,它将失败。所以我为这两个例子都设定了条件,现在似乎都起作用了

tell application "System Events"
    if exists of UI element "Skip" of window 1 of application process "Music" then
        click UI element "Skip" of window 1 of application process "Music"
    else if exists of UI element "Skip" of window 2 of application process "Music" then
        click UI element "Skip" of window 2 of application process "Music"
    end if
end tell

这是我不久前为自己的一些项目提出的一个解决方案。需要将以下AppleScript代码保存为保持打开的应用程序。它的功能是在使用Music.app打开对话框时,处理所有“点击跳过按钮”。为此,我将其保存为一个应用程序,并在脚本编辑器中将其命名为“Click Skip.app”

保存完“单击Skip.app”后,立即转到系统首选项/安全和隐私/隐私,并将其添加到允许控制计算机的应用程序列表中

on idle
    set musicRunning to application "Music" is running
    if not musicRunning then quit
    tell application "System Events"
        if exists of UI element "Skip" of window 1 of application process "Music" then
            click UI element "Skip" of window 1 of application process "Music"
        end if
    end tell
    return 0.1 -- in seconds
end idle

on quit
    --  Executed when the script quits
    continue quit -- allows the script to quit
end quit
下一步:使用以下AppleScript代码并将Music.app命令插入新的脚本编辑器文档。这将是您的主脚本。它将启动您的“单击跳过.app”,然后启动您的音乐代码,然后在脚本完成运行时退出“单击跳过.app”

tell application "Music" to activate

tell application "Click Skip" to activate

tell application "Music"
    
    -- Insert Your Code For 
    -- Copying Music To Playlists
    
end tell

tell application "Click Skip" to quit

如果没有测试,我不能完全确定,但是,假设它是一个模态(对话框)窗口,您将无法从启动复制过程的脚本将其关闭,因为在用户响应模式对话框窗口之前,该脚本无法执行任何其他操作。它是独立的对话框窗口还是显示在通知中心?如果是后者,则可能有第三方解决方法。但是,另一个选项是对其进行编码,使其仅复制目标中不存在的项。我能够从您的解决方案中获取一部分并立即使用它。UI元素的if exists是我缺少的。