Chrome中的Netflix视频播放器 - 如何寻求?

时间:2017-02-08 04:56:54

标签: javascript javascript-events javascript-objects netflix video-player

我一直无法弄清楚如何在Chrome中运行的Netflix视频播放器中进行视频搜索(自动前进到视频中的某个点)。 currentTime属性可以在Netflix播放器中读取但不能设置,设置后立即触发错误“哎呀!出错了。”。其他操作(例如播放暂停)运行良好。例如,您可以尝试以下操作:

  1. 登录Netflix(来自Google Chrome)并转到电影Armageddon
  2. 电影加载后,如果开始播放,请将其暂停。
  3. 打开Chrome开发者工具面板。转到“控制台”选项卡。
  4. 将以下代码段粘贴到控制台中,然后点击<ENTER>
  5. var video = document.evaluate('//*[@id="5670317"]/video',document).iterateNext()

    注意:id值特定于Armageddon。如果您选择其他电影,这很好,请根据该电影的网址中的ID更改ID。

    1. 输入以下内容,然后按<Enter>video.play()。观察视频继续播放。
    2. 很简单,但如何让视频自动前进到视频中的特定点?您可能需要参考this doc。显然,您可以通过从左到右拖动视频播放器滑块手动搜索并将其释放到某个位置。您可能希望在执行此操作时发现调用哪个方法或事件,并对其进行模拟。到目前为止,我还没有运气。

      有什么想法吗?

4 个答案:

答案 0 :(得分:15)

看起来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等等......

答案 1 :(得分:2)

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

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. 选择“body”元素
  3. 选择“事件监听器”
  4. 启用“框架侦听器”
  5. 选择“keydown”事件,“body” - 处理程序p(e),“[[Scopes]]”,1 [[Closure]]
  6. 您可以使用上下文菜单保存此对象参考 - “存储为全局变量”
  7. 然后在新的全局变量中,您可以访问 temp1.cadmium.objects.videoPlayer

    temp1.cadmium.objects.videoPlayer()。getDuration() temp1.cadmium.objects.videoPlayer()寻找(2283839)。 temp1.cadmium.objects.videoPlayer()寻找(4283839);

  8. [![在此处输入图像说明] [1]] [1]

    我不确定是否可以完全自动化。您可以通过

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

    但我不知道如何访问范围变量

    <击>

答案 2 :(得分:1)

以德米特里的回应为基础,以10秒的优势向前跳过

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

答案 3 :(得分:0)

如果您希望netflix在chrome扩展中工作,它只会在netflix的控制台日志中起作用,然后您需要将此代码注入script标记中以使其工作。

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.

enter image description here