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

时间:2017-02-01 17:04:45

标签: javascript netflix

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

这是相关的js块:

[$-409]mmm yyyy

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

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

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

1 个答案:

答案 0 :(得分:13)

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

暂停<video>代码元素后,您可以使用HTML 5 video API

获取<video>元素

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

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

剩余时间(HH:mm)

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

经过时间(秒)

video.currentTime

经过时间更新

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

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

播放

video.play();

暂停

video.pause();

及时来回

rebelliard提供: netflix.cadmium.UiEvents.events.resize[1].scope.events.drage‌​nd[1].handler(null, {value: 600, pointerEventData: {playing: false}});其中600是要寻找的秒数。

请注意,我遇到了哎呀,出了问题......&#34;用这个:

video.currentTime += 60;

即使有暂停和播放电话。这是this demo page所做的,您无需阅读full spec on seeking

静音并获得静音状态

video.muted = true

video.currentTime类似,这是一个可写属性。