如何在客户端与Netflix Cadmium视频播放器进行交互?

Her*_*der 13 javascript netflix

我有一个Netflix帐户,我在谷歌浏览器内运行的视频播放器中偷看了它.Netflix将其视频播放器称为"镉",javascript会显示您可能期望的所有功能和事件处理程序,例如播放,停止,暂停,静音等.我正在构建一个小的Chrome扩展程序,可以让我称这些镉玩家功能,但对我来说困难的部分是弄清楚如何创建一个播放器的实例,这样我才能开始通话.javascript很大,很复杂,而且有点模糊.一旦我可以创建该播放器的实例,我认为调用函数将很容易.

这是一个相关的js块:

muteOn: function() {
          this.savedVolume = this.getVolume(),
          this.updateVolumeDisplay(0),
          this.scrubber.updatePercent(0),
          this.muted = !0,
          this.videoPlayer.setMuted(this.muted)
}
Run Code Online (Sandbox Code Playgroud)

在Chrome开发工具中,我可以在该块中设置一个断点,当我点击netflix视频播放器上的静音按钮时执行会遇到断点.Netflix js(毫不奇怪)通过方法重命名严重混淆.我尝试逐步调试调试器中的代码并结束了一百个兔子洞,从来没有找到我的方式到堆栈的顶部,这样我就可以进行相同的调用(在堆栈顶部)来模拟用户点击静音按钮.我还尝试了以编程方式点击UI播放器上的静音按钮的方法,这同样可以很好地满足我的需求,但是他们在那里有严格的防御机制,让我像一个顶部.

由于有超过100K的javascript行,并且我不确定哪个块与这篇文章完全相关,我建议您在Chrome中加载Netflix,打开开发工具,播放电影,并检查暂停或静音按钮.与这些视频播放器控件进行交互会带您进入javascript的迷宫,我正试图看看如何以编程方式控制播放器的各个方面(仅从开发工具中就可以了).我需要弄清楚的另一个重要事项是如何查询视频播放器以确定播放视频的当前经过时间.

我有什么想法可以破解这个坚果?(提前致谢!)

pyb*_*pyb 13

使用Chrome,我可以使用HTML 5视频播放.

保留<video>标记元素后,您可以使用HTML 5视频API:

获取<video>元素

var video = document.evaluate('//*[@id="70143639"]/video',document).iterateNext()
Run Code Online (Sandbox Code Playgroud)

70143639是视频的ID,如https://www.netflix.com/watch/70143639

剩余时间(HH:mm)

document.evaluate('//*[@id="netflix-player"]/div[4]/section[1]/label', document).iterateNext().innerHTML
Run Code Online (Sandbox Code Playgroud)

经过的时间(秒)

video.currentTime
Run Code Online (Sandbox Code Playgroud)

经过的时间更新

video.addEventListener("timeupdate",
    function(e) {
        console.debug("Seconds elapsed: ", e.timeStamp/1000/60);
    }
);
Run Code Online (Sandbox Code Playgroud)

请注意,我没有得到与之相同的结果video.currentTime,您可能需要根据差异使用偏移量.它也可能是规范中解释的内容:https://www.w3.org/TR/html5/embedded-content-0.html

video.play();
Run Code Online (Sandbox Code Playgroud)

暂停

video.pause();
Run Code Online (Sandbox Code Playgroud)

及时来回走动

rebelliard提供: 寻求的秒数netflix.cadmium.UiEvents.events.resize[1].scope.events.drage??nd[1].handler(null, {value: 600, pointerEventData: {playing: false}});在哪里600.

请注意,我遇到了"哎呀,出了什么问题......"使用这个:

video.currentTime += 60;
Run Code Online (Sandbox Code Playgroud)

即使有暂停和播放电话.这就是这个演示页面所做的,你不需要阅读完整的搜索规范.

静音并获得静音状态

video.muted = true
Run Code Online (Sandbox Code Playgroud)

就像video.currentTime,这是一个可写的属性.