以编程方式模拟点击 aria (netflix) 滑块的 on/change 值

Simulate click on/change value of aria's (netflix) slider programatically

我正在尝试通过 Google Chrome 扩展程序控制 Netflix 的播放器。这是控制栏的图像,对于那些不熟悉它的人。

我设法模拟点击 play/pause、下一集并使用以下代码切换全屏按钮(带有橙色方块的按钮):

$(".[control class]").click();

但同样的逻辑似乎不适用于控制您当前所在视频的哪一部分(蓝色矩形内的那一部分)的滑块。

我想做的是改变视频的当前位置(比如后退10秒)。到目前为止,这是我尝试过的方法:

立即更改 section role="slider" 上的 aria-value:

$(".player-slider")["aria-valuenow"] = 0;

检索红色圆圈,更改其位置并单击它:

$(".player-scrubber-target")["style"] = "width: 30%";
$(".player-scrubber-target").click();

(Desperate) 更改宽度 and/or 单击该部分内的每个栏:

.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 for pointing me out to question, and to kb0 提供的原始代码,通过一些研究,我能够从 Chrome 开发人员工具的控制台更改音量和播放器位置。这是代码(将 [VOLUME] 更改为所需音量 0~99,将 [POSITION] 更改为所需位置):

// 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 扩展程序以编程方式更改视频的当前位置(或模拟用户单击栏并手动更改)?

好吧,感谢 and Dehli for putting me in the right direction, and to 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) {});
    });
}

(我会等到赏金结束才将其标记为已接受,以防有人发布更好的答案)