如何使用蟒蛇硒查找 Youtube 视频持续时间?



我正在尝试使用Selenium和python 3获取视频持续时间。该代码在小视频中正常工作(我已经尝试了长达 30 分钟(。但是对于较长的视频,什么都不会显示。我找不到任何解决方案。

我的代码:

from selenium import webdriver
import time, os
firefox = webdriver.Chrome()
#youtube_url = "https://www.youtube.com/watch?v=oEx-SBpZP_M"  # Short Video
youtube_url = "https://www.youtube.com/watch?v=EMWM2uN8WCQ" # Long Video
firefox.get(youtube_url)
number_of_views = firefox.find_element_by_css_selector('#count > yt-view-count-renderer > span.view-count.style-scope.yt-view-count-renderer')
print(number_of_views.text)
duration = firefox.find_element_by_css_selector('#movie_player > div.ytp-chrome-bottom > div.ytp-chrome-controls > div.ytp-left-controls > div > span.ytp-time-duration')
print(duration)
print(duration.text)

所有这些解决方案的问题在于元素是否可见。

cur_time = driver.find_element_by_class_name("ytp-time-current").text
print(cur_time)

仅当我的鼠标悬停在视频上并且元素显示时,它才会打印cur_time。 否则,如果视频播放时间没有显示硒将无法抓取该元素。 这是一个 GIF 显示情况。

https://i.imgur.com/bmWdC7A.gif

您需要在页面上执行javascript以获取当前时间和持续时间。 Youtube Player API具有两者的功能。

video_dur = self.driver.execute_script(
"return document.getElementById('movie_player').getCurrentTime()")
video_len = self.driver.execute_script(
"return document.getElementById('movie_player').getDuration()")
video_len = int(video_len) / 60
print(f"{video_dur}/{video_len})

https://i.stack.imgur.com/9eUGQ.gif

即使我不在页面上,这也将继续工作。

https://i.stack.imgur.com/iGf7L.gif

只需使用这个:

duration = firefox.find_element_by_class_name('ytp-cued-thumbnail-overlay-duration')
print(duration)
print(duration.text)
duration = driver.find_elements_by_xpath("//span[@class='ytp-time-duration']")[0]
print(duration.text)

相关内容

  • 没有找到相关文章

最新更新