当前位置: 首页 > 知识库问答 >
问题:

如何使用Selenium中的setPlaybackRate和Python提高YouTube视频播放率?

许华清
2023-03-14

目标是在事件单击之前使用Selenium更改HTML视频播放速率。有几个线程讨论了请求,如OP1,并提出了两个建议;

在OP1中,Jeremy Visser建议直接更改属性,如下所示

document.querySelector('video').defaultPlaybackRate = 2.0;
var vid = document.getElementById("video1");


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

正如Greg所建议的,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设置建议的播放速率。

--肮脏的解决方法:a)安装扩展视频速度控制器:仅适用于Chrome浏览器。b)使用默认的Chrome配置文件加载扩展,如OP6中所述,或者您也可以通过Selenium加载,如这里详细讨论的那样。

编辑3:

此OP4建议iframe上的postMessage传递参数中带有rate的setPlaybackRate命令。但问题仍然是把这个放在哪里?

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

格雷格·伯格哈特评论的我的理解

    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个答案

壤驷旭
2023-03-14

对web驱动程序对象调用execute_script:

javascript_to_execute = 'document.getElementById("video1").playbackRate = 2'
webdriver.execute_script(javascript_to_execute))
 类似资料:
  • 问题内容: 谁能帮助我如何使用Selenium自动播放/暂停网页上显示的视频。 提前致谢… 问题答案: 这在很大程度上取决于浏览器和处理视频的播放器。您很有可能需要使用JavaScript执行程序。 我昨晚与一位朋友讨论了这个问题,他提出了以下示例,该示例使用了Webdriver的Python变体,用于html5demos.com的演示视频: 您也可以在使用“播放”的地方“暂停”。 这里有一个更大

  • 我正在制作RSS阅读器应用程序,我从URL获取RSS数据,RSS数据可以包含到YouTube视频链接。 下面是一个链接到youtube vide的例子: 而当我运行我的应用程序时,没有视频,全是黑色的,我无法播放。

  • 我想在android应用程序中播放谷歌驱动器托管的视频。我可以通过视频的私人url在网络浏览器中播放视频。 我想知道我可以使用android youtube api来播放这个视频吗? 如果是,可以给出任何例子… 或建议任何其他方式 谢谢

  • 有人可以帮助使用这个代码来播放嵌入网站的youtube视频吗?我试过各种方法,包括硬件加速=True。 webview显示了youtube页面和缩略图,但点击它们时什么也不会发生。 在某些硬件加速的设备上,它只播放声音,但不播放视频。谢谢大家!

  • 是否可以从webview播放youtube视频,就像我从浏览器访问youtube网站时视频开始播放时一样,它在全屏播放视频。 以下是我到目前为止的代码: