在macOS终端中如何检测浏览器内YouTube视频是否播放结束
嘿,在macOS终端里判断浏览器中的YouTube视频是否播放完毕,我整理了几个实用的方案,你可以根据常用的浏览器来选择:
方案1:用AppleScript调用浏览器执行JS(适用于Safari/Chrome/Edge)
这种方法本质是通过终端触发AppleScript,让浏览器运行一段JavaScript来检测视频状态,简单直接。
针对Safari
首先得给Safari开个权限:打开Safari的偏好设置 → 切换到「高级」标签 → 勾选「在菜单栏显示开发菜单」;然后点开顶部的「开发」菜单,选择「允许自动化」。
搞定权限后,在终端跑这条命令就行:
osascript -e 'tell application "Safari" to do JavaScript "document.querySelector('video.html5-main-video').ended;" in current tab of window 1'
如果返回true,说明主视频已经播放完毕;返回false就是还在播放(或者暂停了)。这里用video.html5-main-video是为了精准定位YouTube的主视频,避免把广告视频算进去。
针对Chrome/Edge
同样需要给终端权限控制浏览器(第一次运行时系统会弹出权限请求,允许就行),直接在终端跑这条命令:
osascript -e 'tell application "Google Chrome" to do JavaScript "document.querySelector('video.html5-main-video').ended;" in active tab of window 1'
返回值逻辑和Safari一样,true表示播放完毕,false表示还没结束。要是用Edge,把命令里的Google Chrome换成Microsoft Edge就行。
方案2:Chrome远程调试协议(适合脚本自动化场景)
如果你需要做更自动化的脚本(比如不需要手动开浏览器权限),可以试试Chrome的远程调试功能:
- 先把所有Chrome进程关掉,然后用这条命令启动Chrome并开启远程调试:
open -a "Google Chrome" --args --remote-debugging-port=9222
要是不需要可视化窗口,加上--headless=new就能开启无头模式。
- 用
curl获取当前打开的标签页信息,找到YouTube页面的调试ID:
curl http://localhost:9222/json
在返回的JSON数据里,找到对应YouTube页面的id字段(看起来像一串随机字符,比如"id": "123abc...")。
- 发送请求执行JS检测视频状态:
curl -X POST -H "Content-Type: application/json" -d '{"id":1,"method":"Runtime.evaluate","params":{"expression":"document.querySelector('video.html5-main-video').ended;"}}' http://localhost:9222/json/version/123abc.../runtime/execute
把命令里的123abc...换成你刚才找到的ID就行。返回的JSON里,result.value字段就是状态:true表示播放完毕,false则相反。
一些小提醒
- 不管用哪种方法,都要确保浏览器的活跃标签页是你要检测的YouTube视频页面,不然脚本找不到视频元素会报错。
- 如果遇到广告干扰,
video.html5-main-video这个选择器能精准定位主视频,比直接用video靠谱得多。 - Chrome远程调试的ID每次启动都会变,要是写自动化脚本,得加一步动态提取ID的逻辑。
内容的提问来源于stack exchange,提问作者matt

