Имитация нажатия / изменения значения ползунка арии (netflix) программно

Я пытаюсь управлять плеером Netflix из расширения Google Chrome. Вот изображение панели управления для тех, кто не знаком с ней.

Печать игрока Netflix

Мне удалось смоделировать нажатие кнопки воспроизведения / паузы, следующего эпизода и переключения полноэкранных кнопок (с оранжевым квадратом) с помощью следующего кода:

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

Но та же самая логика, кажется, не применима к ползунку, который контролирует, в какой части видео вы находитесь (та, что внутри синего прямоугольника).

Я хочу изменить текущую позицию видео (например, вернуться назад на 10 секунд). Вот что я пробовал до сих пор:

Изменить aria-valuenow на 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 за то, что он указал мне на этот вопрос, и kb0 за оригинальный код, благодаря небольшому исследованию, я могу изменить громкость и положение плеера из консоли Chrome Developer Tools. Вот код (измените [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 Developer Tools. Когда я запускаю фрагменты из моего расширения, я получаю это:

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?

1 ответ

Решение

Что ж, спасибо Kodos Johnson и Dehli за то, что они kb0 меня в правильном направлении, и kb0 за следующий фрагмент кода [...]

netflix.cadmium.UiEvents.events.resize[1].scope.events.dragend[1].handler(null, {value: 999, pointerEventData: {playing: false}});

[...] после небольшого исследования мне удалось получить доступ как к элементам управления громкостью, так и к позициям видео, и получить к ним доступ из консоли Chrome Developer Tools. Чтобы обойти тот факт, что мое расширение не было доступа к netflix Вар, я ввожу код на странице <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) {});
    });
}

(Я подожду до конца щедрости, чтобы пометить это как принятое, в случае, если кто-то отправит лучший ответ)

Другие вопросы по тегам