如何用Selenium获取视频进度HTML变量值并监控100%状态
监控视频进度条并在播放完成时触发操作
没问题,我来帮你搞定这个视频进度监控的需求!你找对了方向,用JavaScript Executor确实是获取这类动态更新属性的可靠方式,下面是具体的实现步骤和代码示例:
步骤1:定位目标进度条元素
首先用Selenium的常规定位方法找到那个带aria-valuenow的scrubBar元素:
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() # 先打开你的目标视频页面 scrub_bar = driver.find_element(By.CLASS_NAME, "scrubBar")
步骤2:用JavaScript Executor获取实时进度值
因为这个属性是动态更新的(尤其是Angular这类框架渲染的元素),直接用get_attribute()可能拿不到最新值,用JS执行器能更稳定地获取到实时的aria-valuenow:
def get_current_progress(): # 执行JS获取属性值,去掉末尾的%号转成数字方便判断 progress_text = driver.execute_script('return arguments[0].getAttribute("aria-valuenow");', scrub_bar) return float(progress_text.replace('%', ''))
步骤3:循环监控进度直到完成
接下来就可以循环检查进度,直到它达到100%后触发你的操作。记得加个超时限制,避免无限等待:
import time # 最多等待5分钟,可根据视频时长调整 max_wait_duration = 300 start_time = time.time() while True: current_progress = get_current_progress() print(f"当前播放进度:{current_progress}%") # 判定播放完成(有些播放器可能不会精确到100%,可以设成>=99.5) if current_progress >= 100: print("视频播放完成!开始执行后续操作...") # 这里写入你要触发的代码,比如点击按钮、导出数据等 # your_custom_action() break # 检查是否超时 if time.time() - start_time > max_wait_duration: print("等待超时,视频未完成播放") break # 每秒检查一次,可根据需求调整间隔 time.sleep(1)
额外提醒
- 如果页面会刷新或者元素会重新渲染,建议每次检查前重新定位
scrub_bar元素,避免出现StaleElementReferenceException - 如果你用的是Java/C#等其他语言,核心逻辑完全一致,只是语法略有不同。比如Java里的写法是:
((JavascriptExecutor) driver).executeScript("return arguments[0].getAttribute('aria-valuenow')", scrubBar);
内容的提问来源于stack exchange,提问作者Udi
相关产品推荐
相关产品推荐

