如何在带有 Python 的 Selenium 中使用 setPlaybackRate 提高 YouTube 视频播放速率?
How to increase YouTube video playback rate using setPlaybackRate in Selenium with Python?
objective是用Selenium在事件click
之前改变HTML视频播放速率。
有几个线程在讨论请求,例如 并且有两个建议;
来自,Jeremy Visser建议直接更改属性,如下
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 具有特定功能:player.setPlaybackRate(suggestedRate:Number):Void
可以执行此操作。此函数设置当前视频的建议播放速率 iFrame API.
但是,我对如何在我的代码片段中集成 setPlaybackRate(suggestedRate:Number)
没有足够的了解。如果有人可以阐明如何针对这种特殊情况使用 setPlaybackRate
,我们将不胜感激。
在此先感谢您抽出宝贵时间受理此请求。
编辑 4:
-- 肮脏的解决方法:
a) 安装扩展 Video Speed Controller
:仅适用于 Chrome 浏览器。
b) 使用默认 Chrome 配置文件加载扩展,如 OP6, or you can load also via Selenium as discus in detail here.
所述
编辑 3:
此 OP4 建议 iframe 上的 postMessage 以参数中的速率传递 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 具有特定功能:player.setPlaybackRate(suggestedRate:Number):Void
可以执行此操作。此函数设置当前视频的建议播放速率 iFrame API.
编辑 1:
Greg Burghardt 评论我的理解
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;");
在 Web 驱动程序对象上调用 execute_script:
javascript_to_execute = 'document.getElementById("video1").playbackRate = 2'
webdriver.execute_script(javascript_to_execute))
objective是用Selenium在事件click
之前改变HTML视频播放速率。
有几个线程在讨论请求,例如
来自
document.querySelector('video').defaultPlaybackRate = 2.0;
虽然 Armel 手牌建议如下面的代码片段所示
var vid = document.getElementById("video1");
function fastPlaySpeed() {
vid.playbackRate = 2;}
正如
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 具有特定功能:player.setPlaybackRate(suggestedRate:Number):Void
可以执行此操作。此函数设置当前视频的建议播放速率 iFrame API.
但是,我对如何在我的代码片段中集成 setPlaybackRate(suggestedRate:Number)
没有足够的了解。如果有人可以阐明如何针对这种特殊情况使用 setPlaybackRate
,我们将不胜感激。
在此先感谢您抽出宝贵时间受理此请求。
编辑 4:
-- 肮脏的解决方法:
a) 安装扩展 Video Speed Controller
:仅适用于 Chrome 浏览器。
b) 使用默认 Chrome 配置文件加载扩展,如 OP6, or you can load also via Selenium as discus in detail here.
编辑 3:
此 OP4 建议 iframe 上的 postMessage 以参数中的速率传递 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 具有特定功能:player.setPlaybackRate(suggestedRate:Number):Void
可以执行此操作。此函数设置当前视频的建议播放速率 iFrame API.
编辑 1:
Greg Burghardt 评论我的理解
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;");
在 Web 驱动程序对象上调用 execute_script:
javascript_to_execute = 'document.getElementById("video1").playbackRate = 2'
webdriver.execute_script(javascript_to_execute))