如何判断 youtube 视频何时停止从终端播放?苹果系统

How to tell when youtube video stops playing from the terminal? macOS

有没有办法从终端确定 YouTube 视频是否已在我的浏览器中播放完毕?

因为您的问题有一个 tag, I'll illustrate one method that can determine the playing/paused/ended status of a YouTube video(例如演示如何将球体内外翻转的链接视频)。

你没有提到你使用的是什么浏览器。我使用 Safari,所以我将在我的 AppleScript 代码中使用它,但是,在 Google Chrome。此方法在 Firefox.

中无效

浏览器设置必须允许 JavaScript 来自 Apple Events,并且允许远程自动化。在 Safari 中,这些在 开发 菜单中可用。

检查 YouTube 视频页面的 HTML DOM 时,似乎有一个用作容器的 <div> 元素对于 HTML5 渲染的视频对象,其 class 名称动态更新以包含一个标签,表示视频是否正在 播放 暂停ended,此外,除此之外,没有其他元素在其 class 名称中包含这些标签。

下面的 AppleScript 只是 运行s 一个 JavaScript 命令在网络浏览器的 YouTube 选项卡中确定 <div> 元素是否在问题是 class playing-modepaused-modeended-mode:

    tell application "Safari" to tell front window to tell ¬
        (first tab whose URL contains "youtube.com/watch?v=") to ¬
        do JavaScript [¬
            "document", ¬
            ".querySelectorAll('div[class*=\"-mode\"]')[0]", ¬
            ".className", ¬
            ".match(/(playing|paused|ended)-mode/)[1]"] ¬
            as text

它 return 可以 playingpausedended 来表示视频的状态,或者 current application 如果有 JavaScript 错误(例如,没有匹配的元素或 class 名称标签)。

您可以在脚本编辑器中运行此脚本,或者通过终端使用osascript命令:

    osascript -e 'tell application "Safari" to tell front window to tell ¬' \
              -e '(first tab whose URL contains "youtube.com/watch?v=") to ¬' \
              -e '    do JavaScript ["document", ¬' \
              -e '        ".querySelectorAll(\"div[class*=-mode]\")[0]", ¬' \
              -e '        ".className", ¬' \
              -e '        ".match(/(playing|paused|ended)-mode/)[1]"] ¬' \
              -e '    as text'

同样,这将 return playingpausedended;在 JavaScript 错误的情况下什么都没有;以及出现 AppleScript 错误时的错误消息(例如 YouTube 选项卡在 Safari 中打开)。