如何使用Python改变Selenium中HTML视频的播放速率?

问题描述 投票:1回答:1

目的是在事件click之前使用Selenium更改HTML视频的播放速率。关于请求的讨论有多个线程,例如OP1OP2

OP1Jeremy Visser建议直接更改属性(不确定我的理解是否正确,如下)

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

虽然手上建议的Armel如下面的代码片段所示(我相信这是某种js:如果我错了请指正我]

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


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

请注意,这是我第一次尝试将Seleniumjs注入一起使用。所以,我的问题的方向可能是错误的。

所以,我的问题是,如果我们要使用Jeremy VisserArmel的方法,那么在下面的代码中,应该放置建议的语法吗?

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')


## Should put the java script here or should it exist on its own file?
## or maybe the attribute editor here?

虽然我已经阅读了一些有关使用硒进行js注入的tutorial,但是我的知识仍然很有限,特别是在申请这种特殊情况时。

感谢您花费时间接受此请求。

编辑3:

OP4建议在iframe上使用postMessage来传递setPlaybackRate命令,并在参数中添加rate。但是,问题仍然在哪里呢?

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;");

目的是在使用Selenium单击事件之前更改HTML视频的播放速率。关于请求的讨论有多个线程,例如OP1或OP2。在OP1中,Jeremy Visser ...

python html selenium html5-video playback
1个回答
0
投票

在Web驱动程序对象上调用execute_script:

© www.soinside.com 2019 - 2024. All rights reserved.