4

Мне не удалось выяснить, как выполнить поиск видео (автоматически перейти к определенной точке видео) в видеоплеере Netflix, работающем в Chrome. Свойство currentTime может быть прочитано, но не установлено в проигрывателе Netflix, и, когда установлено, немедленно вызывает ошибку «Упс! Что-то пошло не так». Другие действия, такие как Воспроизвести и Пауза работать довольно хорошо. Например, вы можете попробовать следующее:Видеоплеер Netflix в Chrome - как искать?

  1. Войдите в Netflix (из Google Chrome) и перейдите к фильму Armageddon.
  2. После загрузки фильма приостановите его, если он начнет воспроизведение.
  3. Откройте панель инструментов Chrome для разработчиков. Перейдите на вкладку «Консоль».
  4. Вставьте следующий фрагмент кода в консоль и нажмите <ENTER>:

var video = document.evaluate('//*[@id="5670317"]/video',document).iterateNext()

Примечание: Значение Идентификатор специфичен для Армагеддона. Если вы выберете другой фильм, что хорошо, измените идентификатор в соответствии с идентификатором в URL-адресе этого фильма.

  1. Введите следующие данные, а затем нажмите <Enter>: video.play(). Обратите внимание, что видео возобновляется.

Прост достаточно, но как сделать автоматическое продвижение видео в определенную точку видео? Вы можете обратиться к this doc. Очевидно, вы можете вручную искать, перетаскивая ползунок видеопроигрывателя слева направо и отпускать его где-нибудь. Вы можете захотеть узнать, какой метод или событие вызывается, когда вы это делаете, и имитировать это. Мне пока не повезло.

Любые идеи?

ответ

2

Наконец нашел простое решение:

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

Вы можете установить:

  • положение с помощью значения свойства
  • играет состояние с помощью pointerEventData.playing свойства

Это не полное решение, но может быть полезно.

Предыдущая версия игрока netflix была с глобальным объектом window.netflix.cadmium.objects.videoPlayer.В последней версии она пуста, но вы можете получить доступ к этому объекту в пределах событий слушателей:

  1. Открыть Инструменты разработчика Chrome
  2. Выберите элемент «тело»
  3. Выберите «Слушателей событий»
  4. Включите «Framework прослушиватели "
  5. Выберите событие« keydown »,« body »- обработчик p (e),« [[Scopes]] », 1 [[Closure]]
  6. Вы можете сохранить эту ссылку на объект с помощью контекстного меню -« Сохранить как глобальная переменная "
  7. Тогда в новой глобальной переменной вы можете получить доступ к temp1.cadmium.objects.videoPlayer

    temp1.cadmium.objects.videoPlayer(). GetDuration() temp1.cadmium.objects.videoPlayer(). искать (2283839); temp1.cadmium.objects.videoPlayer(). Seek (4283839);

[! [Введите описание изображения здесь] [1]] [1]

Я не уверен, что это возможно сделать полностью автоматический. Вы можете получить доступ к этим слушателям по

getEventListeners(document.getElementsByTagName("body")[0]).keydown[0].listener 

Но я не знаю, как получить доступ к переменным SCOPES

+0

Кажется перспективным, но пожалуйста, дайте примеры кода для всего этого. Благодаря! – HerrimanCoder

+0

kb0, это прекрасно работает внутри Chrome Dev Tools (консоль), но когда я выполняю ту же строку кода внутри расширения Chrome, я всегда получаю ту же ошибку: 'netflix не определен'. Я перешел в код с точкой останова и подтвердил, что выполняю ту же строку, что и в консоли, и то же, что и вы вставили выше. Почему это будет работать на консоли, но не на расширении Chrome? (В моем расширении я уже взаимодействую с другими элементами DOM. Например, это отлично работает и получает объект видео: 'document.evaluate ('// * [@ id =" 60003082 "]/video', document) .iterateNext(); ') – HerrimanCoder

+0

@SweatCoder. Он не работает в расширении chrome из-за ограничений для скриптов контента (https://developer.chrome.com/extensions/content_scripts):« Однако сценарии содержания имеют некоторые ограничения. Они не могут ... Использовать переменные или функции, определенные веб-страницами или другими сценариями контента ... ». Вы можете попытаться использовать обходные пути в http://stackoverflow.com/questions/12395722/can-the-window-object-be-modified-from-a-chrome-extension – kb0

5

выглядит как Netflix изменил Player API. Что я нашел:

const videoPlayer = netflix 
    .appContext 
    .state 
    .playerApp 
    .getAPI() 
    .videoPlayer 

// Getting player id 
const playerSessionId = videoPlayer 
    .getAllPlayerSessionIds()[0] 

const player = videoPlayer 
    .getVideoPlayerBySessionId(playerSessionId) 

Теперь вы можете использовать API полного игрока. Например player.seek или player.getCurrentTime или player.pause и т.д ...

+1

Это именно то, что я искал. Объект 'cadmium' больше недоступен через' netflix' api. Благодарю. –

+0

Димитрий, вы не возражаете, объясняя свой дедуктивный процесс, чтобы понять это? Я сдался этим месяцем назад, потому что я просто не мог взломать его. Как вы это выяснили? Какие инструменты, какой процесс, какой ход мыслей. Благодаря! –

+1

@StephenCagle Ничего сверхъестественного :) Просто хром dev-tools и его автозаполнение. Сначала я искал любую глобальную переменную (так что я нашел 'window.netflix'). Затем я просто внимательно прочитал все свойства, имена методов и т. Д. И потратил много времени на эксперименты с ним :) –

-1

Опираясь на ответ Дмитрия забегать вперед 10 секунд

player.seek(player.getCurrentTime() - 10000)