正在获取错误:“ JavaScript错误:无法读取属性”,使用JavaScript和Selenium的组合跟踪HTML视频当前时间

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

我希望每隔一段时间就可以跟踪HTML视频中的视频播放进度。

基于tutorial,HTML视频DOM timeupdate事件可以通过以下方式实现:

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
import time

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

javascript_to_execute = ' return document.getElementById("ytplayer").currentTime();'
for x in range(0, 2):
    time_current = browser.execute_script(javascript_to_execute)
    print(time_current)
    time.sleep(1)

但是,出现以下错误

消息:javascript错误:无法读取null的属性'currentTime'

我可以知道我在哪里做错了。感谢任何提示或帮助。在此先感谢

javascript python selenium dom video
1个回答
0
投票

由于OP1的建议,以下代码应能正常工作。要使用JS获取HTML视频的currentTime,可以考虑以下内容。

JS代码,以提取视频当前时间为

"return document.getElementsByTagName('video')[0].currentTime;"

上述JS可以使用execute_script方法执行

   time_video = browser.execute_script("return document.getElementsByTagName('video')[0].currentTime;")

例如,调查上述实现是否能够获得视频定时。我们首先使用以下代码,从起点开始jump to a position,即180秒。

player_status = browser.execute_script("document.getElementsByTagName('video')[0].currentTime += 180;")

完整代码如下;

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
import time

chrome_options = webdriver.ChromeOptions()
browser = webdriver.Chrome(executable_path = r"some_path\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('Fast forward')
player_status = browser.execute_script("document.getElementsByTagName('video')[0].currentTime += 80;")
print('Get Current time')
time_video = browser.execute_script("return document.getElementsByTagName('video')[0].currentTime;")
© www.soinside.com 2019 - 2024. All rights reserved.