Подтвердить что ты не робот

Имитировать клик на/изменить значение арии (netflix) слайдер программно

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

Netflix player print

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

$(".[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)

@EDIT

Большое спасибо 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

Вот как я запускаю script из моего расширения:

chrome.tabs.getSelected(null, function(tab){
    chrome.tabs.executeScript(tab.id, {code: [SNIPPET]}, function(response) {});
});

Вопрос:

Как я могу изменить текущую позицию видео программно (или имитировать, что пользователь нажал на панель и изменил ее вручную) из расширения Chrome?

4b9b3361

Ответ 1

Хорошо, спасибо 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) {});
    });
}

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