Safari-AppleScript不会移动到bookdown在线图书的下一部分

Safari-AppleScript不会移动到bookdown在线图书的下一部分,safari,applescript,bookdown,Safari,Applescript,Bookdown,我正在编写一个脚本,将bookdown的一部分打印为PDF,然后转到下一部分,依此类推 打印部件工作,关键代码来自: 甚至重新开放狩猎,但什么也没发生 tell application "Safari" activate tell application "System Events" key code 124 -- right arrow to move to the next section

我正在编写一个脚本,将bookdown的一部分打印为PDF,然后转到下一部分,依此类推

打印部件工作,关键代码来自:

甚至重新开放狩猎,但什么也没发生

tell application "Safari"
    
    activate
    
    tell application "System Events"
        key code 124 -- right arrow to move to the next section
    end tell
    
end tell
我怎样才能让AppleScript翻页并转到下一节

此外,我欢迎您提出改进脚本的建议!我想知道避免重复15次标签是否容易。我查看了可访问性检查器,发现打印菜单中的PDF对应于NSPopUpButtonCell。我曾尝试使用其工作表的select NSPOUPPBUTTONCELL,但它不起作用

我可以手动单击右箭头并移动到下一节,但我无法使用脚本来执行此操作

我怎样才能让AppleScript翻页并转到下一节

如果您试图以编程方式单击右箭头,如下图所示,则以下示例AppleScript代码可以执行此操作:

告诉应用程序Safari 告诉文件1 做JavaScript document.getElementsByClassName'fa-fa-angle-right'[0]。单击; 注:

这需要允许在隐藏的“开发”菜单上检查来自Apple事件的JavaScript

要取消隐藏隐藏的“开发”菜单,请执行以下操作:

Safari>首选项…>高级>[√] 在菜单栏中显示“开发”菜单 更新地址:

此外,我欢迎您提出改进脚本的建议!我想知道是否可以轻松避免重复15次

下面是我如何使用上面的JavaScript并进行编码,以避免使用键代码和/或击键系统事件命令,尤其是在UI中使用选项卡

AppleScript代码示例:

告诉应用程序系统事件 告诉应用程序进程Safari 将frontmost设置为true 将i设置为0 重复此操作,直到其最前面=true 延迟0.1 将i设置为i+1 如果我≥ 20然后返回 结束重复 单击菜单项“打印…” 菜单1,共页 菜单栏项文件的 菜单栏1 告诉它的前窗 将i设置为0 重复此操作,直到存在第1页的菜单按钮PDF 延迟0.1 将i设置为i+1 如果我≥ 20然后返回 结束重复 单击第1页的菜单按钮PDF 将i设置为0 重复此操作,直到存在菜单项另存为PDF,共页 菜单按钮的菜单1第1页PDF 延迟0.1 将i设置为i+1 如果我≥ 20然后返回 结束重复 单击菜单项另存为PDF,共页 菜单1,共页 菜单按钮PDF,共页 表1 将i设置为0 重复此操作,直到活页1的活页1的“保存”按钮存在 延迟0.1 将i设置为i+1 如果我≥ 20然后返回 结束重复 单击“保存工作表1的工作表1”按钮 将i设置为0 在第1页存在时重复上述步骤 延迟0.1 将i设置为i+1 如果我≥ 100然后返回 结束重复 结束语 结束语 结束语 告诉应用程序Safari 告诉文件1 做JavaScript document.getElementsByClassName'fa-fa-angle-right'[0]。单击; 注:

由于这种类型的AppleScript脚本使用UI脚本,因此我以重复循环的形式提供了一个错误处理,以等待最多两秒钟,使目标UI元素可以对大多数目标执行操作,但是最后一个重复循环等待的时间更长,因为它必须等待另存为PDF才能完成可以使用具有适当值的delay命令,但在重复循环中包含十分之一秒的延迟时,它不必等待超过需要的时间。换句话说,如果我想减缓脚本在UI的各种事件中的运行速度,我只会使用简单的delay命令。这一点值得怀疑d需要调整,但显然在必要时进行调整

如果达到超时,脚本将在该点中止,而不会显示任何错误消息≥ 20然后返回语句可以转换为完整的if块,并根据需要通过显示对话框、显示警报或显示通知命令包含错误消息

我可以手动单击右箭头并移动到下一节,但我无法使用脚本来执行此操作

我怎样才能让AppleScript翻页并转到下一节

如果您试图以编程方式单击右箭头,如下图所示,则 示例AppleScript代码可以做到这一点:

告诉应用程序Safari 告诉文件1 做JavaScript document.getElementsByClassName'fa-fa-angle-right'[0]。单击; 注:

这需要允许在隐藏的“开发”菜单上检查来自Apple事件的JavaScript

要取消隐藏隐藏的“开发”菜单,请执行以下操作:

Safari>首选项…>高级>[√] 在菜单栏中显示“开发”菜单 更新地址:

此外,我欢迎您提出改进脚本的建议!我想知道是否可以轻松避免重复15次

下面是我如何使用上面的JavaScript并进行编码,以避免使用键代码和/或击键系统事件命令,尤其是在UI中使用选项卡

AppleScript代码示例:

告诉应用程序系统事件 告诉应用程序进程Safari 将frontmost设置为true 将i设置为0 重复此操作,直到其最前面=true 延迟0.1 将i设置为i+1 如果我≥ 20然后返回 结束重复 单击菜单项“打印…” 菜单1,共页 菜单栏项文件的 菜单栏1 告诉它的前窗 将i设置为0 重复此操作,直到存在第1页的菜单按钮PDF 延迟0.1 将i设置为i+1 如果我≥ 20然后返回 结束重复 单击第1页的菜单按钮PDF 将i设置为0 重复此操作,直到存在菜单项另存为PDF,共页 菜单按钮的菜单1第1页PDF 延迟0.1 将i设置为i+1 如果我≥ 20然后返回 结束重复 单击菜单项另存为PDF,共页 菜单1,共页 菜单按钮PDF,共页 表1 将i设置为0 重复此操作,直到活页1的活页1的“保存”按钮存在 延迟0.1 将i设置为i+1 如果我≥ 20然后返回 结束重复 单击“保存工作表1的工作表1”按钮 将i设置为0 在第1页存在时重复上述步骤 延迟0.1 将i设置为i+1 如果我≥ 100然后返回 结束重复 结束语 结束语 结束语 告诉应用程序Safari 告诉文件1 做JavaScript document.getElementsByClassName'fa-fa-angle-right'[0]。单击; 注:

由于这种类型的AppleScript脚本使用UI脚本,因此我以重复循环的形式提供了一个错误处理,以等待最多两秒钟,使目标UI元素可以对大多数目标执行操作,但是最后一个重复循环等待的时间更长,因为它必须等待另存为PDF才能完成可以使用具有适当值的delay命令,但在重复循环中包含十分之一秒的延迟时,它不必等待超过需要的时间。换句话说,如果我想减缓脚本在UI的各种事件中的运行速度,我只会使用简单的delay命令。这一点值得怀疑d需要调整,但显然在必要时进行调整

如果达到超时,脚本将在该点中止,而不会显示任何错误消息≥ 20然后返回语句可以转换为完整的if块,并根据需要通过显示对话框、显示警报或显示通知命令包含错误消息。

@Emy,请参阅我更新的答案的更新地址:部分,因为它解决了OP最后一段的第一句话。@Emy,我更改了最后一个重复循环a它最初的目标是错误的UI元素。现在它的编码是为了给保存到PDF的时间来完成,因为我注意到一些章节相当长,可能已经被截断。对不起!@Emy,请查看更新后的答案的更新地址:部分,因为它解决了您的OP最后一段的第一句话。@Emy,我更改了答案上次重复循环,因为它最初的目标是错误的UI元素。现在对它进行编码,以便有时间保存到PDF,因为我注意到有些章节很长,可能已经被截断。对不起!
tell application "System Events"
        key code 124 -- right arrow to enter the next page
    end tell
tell application "Safari"
    
    activate
    
    tell application "System Events"
        key code 124 -- right arrow to move to the next section
    end tell
    
end tell