Цель состоит в том, чтобы изменить 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;");