Python 使用selenium获取当前视频标记URL

Python 使用selenium获取当前视频标记URL,python,html,selenium,selenium-webdriver,html5-video,Python,Html,Selenium,Selenium Webdriver,Html5 Video,我正在尝试使用selenium(带有python绑定)获取当前html5视频标记URL: 问题是url值打印为空。这是为什么?我该如何修复它 我怀疑这是因为在初始化视频标记之前执行了脚本并且返回了currentSrc值。我试图添加一个,但仍然打印了一个空字符串: from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.web

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

问题是
url
值打印为空。这是为什么?我该如何修复它


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

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')))
这让我觉得我需要这么做。可能正在收听并等待
视频开始播放

我也非常确定
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);
根据报告:

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

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

通过订阅来实现以下目的:

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)

我用java试过了,它对我有用。当你可以从视频的
src
属性中获得相同的内容时,你为什么要选择
currentSrc
?@VivekSingh谢谢,我已经更新了这个问题。当我使用
src
时,仍然会得到一个空字符串。请参阅有关从控制台运行它的说明。
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)