Chrome 中的 Netflix 视频播放器 - 如何查找?

Netflix video player in Chrome - how to seek?

我无法弄清楚如何在 Chrome 中的 Netflix 视频播放器 运行 中进行视频搜索(自动前进到视频中的某个点)。 currentTime 属性 可以读取但不能在Netflix播放器中设置,设置后立即触发错误"Whoops! Something went wrong."。 PlayPause 等其他操作效果很好。例如,您可以尝试以下操作:

  1. 登录 Netflix(来自 Google Chrome)并观看电影 Armageddon
  2. 电影加载后,如果开始播放则暂停。
  3. 打开 Chrome 开发者工具面板。转到“控制台”选项卡。
  4. 将以下代码片段粘贴到控制台中并点击 <ENTER>:

var video = document.evaluate('//*[@id="5670317"]/video',document).iterateNext()

注意:id 值特定于世界末日。如果您选择不同的电影,没关系,请根据该电影的 URL 中的 ID 更改 ID。

  1. 输入以下内容,然后按 <Enter>video.play()。观察视频恢复播放。

很简单,但是如何让视频自动前进到视频中的特定点?您可能需要参考 this doc。显然,您可以通过从左向右拖动视频播放器滑块并将其释放到某个位置来手动搜索。您可能希望发现执行此操作时调用了哪个方法或事件,并对其进行模拟。到目前为止我还没有运气。

有什么想法吗?

终于找到了一个简单的解决方案:

netflix.cadmium.UiEvents.events.resize[1].scope.events.dragend[1].handler(null, {value: 999, pointerEventData: {playing: false}});

您可以设置:

  • 位置使用 属性
  • 播放状态使用pointerEventData.playing属性

这不是完整的解决方案,但可能会有用。

以前版本的 netflix 播放器带有全局对象 window.netflix.cadmium.objects.videoPlayer。在最新版本中它是空的,但您可以在事件侦听器中访问此对象:

  1. 打开Chrome开发者工具
  2. Select "body" 元素
  3. Select "Event Listeners"
  4. 开启"Framework listeners"
  5. Select "keydown" 事件,"body" - 处理程序 p(e),“[[Scopes]]”,1 [[Closure]]
  6. 您可以使用上下文菜单保存此对象引用 - "Store as a global variable"
  7. 然后在新的全局变量中你可以访问temp1.cadmium.objects.videoPlayer

    temp1.cadmium.objects.videoPlayer().getDuration() temp1.cadmium.objects.videoPlayer().seek(2283839); temp1.cadmium.objects.videoPlayer().seek(4283839);

[![在此处输入图片描述][1]][1]

我不确定是否可以做到全自动。您可以通过

访问此侦听器
getEventListeners(document.getElementsByTagName("body")[0]).keydown[0].listener

但我不知道如何访问作用域变量

看来 netflix 更换了播放器 api。这是我发现的:

const videoPlayer = netflix
  .appContext
  .state
  .playerApp
  .getAPI()
  .videoPlayer

// Getting player id
const playerSessionId = videoPlayer
  .getAllPlayerSessionIds()[0]

const player = videoPlayer
  .getVideoPlayerBySessionId(playerSessionId)

现在您可以使用完整播放器了API。 例如player.seekplayer.getCurrentTimeplayer.pause等...

在 Dmitry 的响应基础上提前 10 秒

player.seek(player.getCurrentTime() - 10000)

如果你想让它在 chrome 扩展中工作,它只会在 netflix 的控制台日志中工作,那么你需要在脚本标签中注入这段代码才能使它工作。

const videoPlayer = netflix.appContext.state.playerApp.getAPI().videoPlayer;
const player = videoPlayer.getVideoPlayerBySessionId(videoPlayer.getAllPlayerSessionIds()[0]);

player.seek(1091243) //seek to roughly 18mins

player.getCurrentTime() // will give you the current video time.