我试图通过Google Chrome扩展来控制Netflix的播放器.这是控制栏的图像,对于那些不熟悉它的人来说.
我设法模拟一个点击播放/暂停,下一集,并使用以下代码切换全屏按钮(橙色方块):
$(".[control class]").click();
但是,相同的逻辑似乎不适用于控制您当前处于哪个视频的部分(蓝色矩形中的那个)的滑块.
我想要做的是更改视频的当前位置(例如,返回10秒).这是我迄今为止所尝试的:
更改aria-valuenow on section role =“slider”:
$(".player-slider")["aria-valuenow"] = 0;
检索红色圆圈,更改其位置并单击它:
$(".player-scrubber-target")["style"] = "width: 30%"; $(".player-scrubber-target").click();
(绝望)更改宽度和/或点击部分中的每个栏:
.player-scrubber-progress-buffered (change width and click) .player-scrubber-progress-completed (change width and click) .player-scrubber-progress (click) #scrubber-component (click)
@编辑
非常感谢Kodos Johnson指出我的this问题,到kb0的原始代码,有一些研究,我可以从Chrome开发者工具的控制台更改音量和播放器的位置.以下是代码(为所需位置更改所需体积0〜99和[POSITION]的[VOLUME]):
// Change volume netflix.cadmium.UiEvents.events.resize[0].scope.events.dragend[0].handler(null,{pointerEventData: {drag: {current: {value: [VOLUME]}}}}); // Change player position netflix.cadmium.UiEvents.events.resize[1].scope.events.dragend[1].handler(null,{value: [POSITION],pointerEventData: {playing: false}});
不幸的是,这在Chrome开发者工具之外似乎不起作用.当我从我的扩展程序运行代码片段时,我得到:
Uncaught ReferenceError: netflix is not defined at <anonymous>:1:1
以下是我从我的扩展程序运行脚本的方式:
chrome.tabs.getSelected(null,function(tab){ chrome.tabs.executeScript(tab.id,{code: [SNIPPET]},function(response) {}); });
题:
如何通过Chrome扩展程序以编程方式更改当前视频位置(或模拟用户点击该栏并手动更改它)?
解决方法
那么,感谢
Kodos Johnson和
Dehli把我放在正确的方向,到
kb0为以下代码[…]
netflix.cadmium.UiEvents.events.resize[1].scope.events.dragend[1].handler(null,{value: 999,pointerEventData: {playing: false}});
[…]通过一些研究,我设法获得了访问量和视频位置控件,并从Chrome开发者工具的控制台访问它们.为了解决我的扩展程序无法访问netflix var的事实,我将代码注入页面的< head> ;. 这是一个完整的例子:
function ChangeVolume(volume) { InjectScriptOnPage("netflix.cadmium.UiEvents.events.resize[0].scope.events.dragend[0].handler(null,{pointerEventData: {drag: {current: {value: " + volume + "}}}});"); } function ChangePosition(position) { InjectScriptOnPage("netflix.cadmium.UiEvents.events.resize[1].scope.events.dragend[1].handler(null,{value: " + position + ",pointerEventData: {playing: false}});"); } function InjectScriptOnPage(script) { var script = "var head = document.getElementsByTagName('head')[0]; \ var script = document.createElement('script');\ script.type = 'text/javascript'; \ script.innerHTML = '" + script + "'; \ head.appendChild(script);"; ExecuteScriptOnPage(script); } function ExecuteScriptOnPage(script) { chrome.tabs.getSelected(null,function(tab){ chrome.tabs.executeScript(tab.id,{code: script},function(response) {}); }); }
(我会等到赏金结束标记为被接受,以防有人发布更好的答案)