以编程方式模拟点击 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) {});
});
}
(我会等到赏金结束才将其标记为已接受,以防有人发布更好的答案)
我正在尝试通过 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
// 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 扩展程序以编程方式更改视频的当前位置(或模拟用户单击栏并手动更改)?
好吧,感谢
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) {});
});
}
(我会等到赏金结束才将其标记为已接受,以防有人发布更好的答案)