Как увеличить скорость воспроизведения видео на YouTube с помощью setPlaybackRate в Selenium с Python? - PullRequest
2 голосов
/ 19 апреля 2020

Цель состоит в том, чтобы изменить HTML скорость воспроизведения видео до события click с помощью Selenium. Есть несколько веток, обсуждающих запрос, таких как OP1 , и было два предложения:

Из OP1 , Джереми Виссер предложил изменить непосредственно атрибут, как показано ниже

document.querySelector('video').defaultPlaybackRate = 2.0;

В то время как Armel на руке предлагается, как показано в фрагменте кода ниже

var vid = document.getElementById("video1");


function fastPlaySpeed() { 
    vid.playbackRate = 2;}

Как предложено Грег , подход Armel можно эмулировать, как показано ниже,

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

chrome_options = webdriver.ChromeOptions()
browser = webdriver.Chrome(executable_path=r"\Browsers\chromedriver.exe",
                           options=chrome_options)


browser.get("https://www.youtube.com/watch?v=nXbfZL5kttM")

WebDriverWait(browser, 70).until(EC.element_to_be_clickable(
    (By.XPATH, "//button[@aria-label='Play']"))).click()

print('Complete play')

javascript_to_execute = 'document.getElementById("video1").playbackRate = 2'
webdriver.execute_script(javascript_to_execute))

Однако, похоже, у YouTube разные ElementById для разных видео, поэтому js подход работает не так, как задумано.

Очевидно, на YouTube есть функция c: player.setPlaybackRate(suggestedRate:Number):Void, чтобы сделать это. Эта функция устанавливает рекомендуемую скорость воспроизведения для текущего видео iFrame API .

Однако у меня нет достаточных знаний о том, как интегрировать setPlaybackRate(suggestedRate:Number) в мой фрагмент кода. Благодарим вас за то, что кто-то может пролить свет на то, как использовать setPlaybackRate для этого конкретного случая.

Заранее благодарим за потраченное время на обработку этого запроса.

Редактировать 4:

- Грязное решение: a) Установите расширение Video Speed Controller: применимо только для браузера Chrome. б) Использование профиля по умолчанию Chrome для загрузки расширения, как описано в OP6 , или вы также можете загрузить через Selenium, как подробно описано здесь .

Редактировать 3 :

Этот OP4 предложил postMessage для iframe передать команду setPlaybackRate со скоростью в аргументе. Но все же вопрос в том, где это разместить?

var playbackRate = 2;
var data = {event: 'command', func: 'setPlaybackRate', args: [playbackRate, true]};
var message = JSON.stringify(data);
$('#iframe1')[0].contentWindow.postMessage(message, '*');

Редактировать 2:

По-видимому, YouTube имеет определенную c функцию: player.setPlaybackRate(suggestedRate:Number):Void, чтобы сделать это. Эта функция устанавливает рекомендуемую скорость воспроизведения для текущего видео iFrame API .

Редактировать 1:

Мое понимание, как прокомментировал Грег Бургхардт

    WebDriverWait(browser, 70).until(EC.element_to_be_clickable(
        (By.XPATH, "//button[@aria-label='Play']"))).click()

    print('Complete play')

JavascriptExecutor js;
js = (JavascriptExecutor)driver;
js.executeScript("vid.playbackRate = 2;");

1 Ответ

0 голосов
/ 19 апреля 2020

Вызовите execute_script для объекта веб-драйвера:

javascript_to_execute = 'document.getElementById("video1").playbackRate = 2'
webdriver.execute_script(javascript_to_execute))
...