【问题标题】:Getting current video tag URL with selenium使用 selenium 获取当前视频标签 URL
【发布时间】:2015-04-10 03:34:51
【问题描述】:

我正在尝试使用 selenium(使用 python 绑定)获取当前的 html5 视频标签 URL:

from selenium import webdriver


driver = webdriver.Chrome()
driver.get('https://www.youtube.com/watch?v=9x6YclsLHN0')

video = driver.find_element_by_tag_name('video')
url = driver.execute_script("return arguments[0].currentSrc;", video)
print url

driver.quit()

问题在于url 值打印为空。为什么会这样,我该如何解决?


我怀疑这是因为脚本被执行并且currentSrc 值在视频标签被初始化之前返回。我尝试添加Explicit Wait,但仍然打印了一个空字符串:

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

wait = WebDriverWait(driver, 5)
video = wait.until(EC.visibility_of_element_located((By.TAG_NAME, 'video')))

这让我觉得我需要这样做asynchronously。可能正在收听media events 并等待video 开始播放。

我也很确定 currentSrc 应该可以工作,因为如果我在控制台中执行代码并手动等待视频开始 - 我看到它打印视频 currentSrc 属性值。


仅供参考,也尝试了 java 绑定,结果相同,一个空字符串:

WebDriver driver = new ChromeDriver();
driver.get("https://www.youtube.com/watch?v=9x6YclsLHN0");

WebElement video = driver.findElement(By.tagName("video"));

JavascriptExecutor js = (JavascriptExecutor) driver;
String url = (String) js.executeScript("return arguments[0].currentSrc;", video);

System.out.println(url);

【问题讨论】:

  • 我在java中试过了,它对我有用。当您可以从视频的src 属性中获得相同的结果时,您为什么要选择currentSrc
  • @VivekSingh 谢谢,我已经更新了问题。当我使用src 时,我仍然得到一个空字符串。另请参阅有关从控制台运行它的说明。

标签: python html selenium selenium-webdriver html5-video


【解决方案1】:

根据W3 video tag specification

currentSrc DOM 属性最初是空字符串。它的价值 由资源选择算法改变。

这解释了问题中描述的行为。这也意味着要可靠地获取 currentSrc 值,我们需要等到媒体资源定义好它

订阅loadstart media eventexecute_async_script() 成功了:

driver.set_script_timeout(10) 

url = driver.execute_async_script("""
    var video = arguments[0],
        callback = arguments[arguments.length - 1];

    video.addEventListener('loadstart', listener);

    function listener() {
        callback(video.currentSrc);
    };
""", video)
print(url)

【讨论】:

    猜你喜欢
    • 2022-01-03
    • 2014-05-08
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 2013-04-23
    相关资源
    最近更新 更多