使用Selenium截取YouTube视频截图遇到的问题求助
YouTube视频截图自动化问题汇总与求助
我有大约600个YouTube视频URL,需要为每个视频截取一张截图。在对整个URL列表循环处理前,我先尝试为单个视频实现该功能,但遇到了多个问题:
- 点击播放按钮失败
- 截图无法渲染视频内容,仅显示播放按钮、时间码等元素
- 不确定如何处理视频中偶尔出现的广告(暂时不确定是否会影响流程)
问题1:点击播放按钮失败
我使用以下代码尝试点击播放按钮:
vid_xpath = '//*[@id="movie_player"]' driver = webdriver.Firefox() url = 'https://www.youtube.com/watch?v=xjlmFGO3fKE&t=110s' driver.get(url) #driver.implicitly_wait(10) # 点击播放按钮 driver.find_element(By.CSS_SELECTOR, ".ytp-large-play-button").click() time.sleep(1) driver.find_element(By.CSS_SELECTOR, ".ytp-large-play-button").click() # 后续执行截图操作
执行时出现以下错误:
ElementNotInteractableException Traceback (most recent call last) /var/folders/k9/wwjktzjs3lzg4xwn06htpryh0000gn/T/ipykernel_1601/155648964.py in <module> 12 driver.find_element(By.CSS_SELECTOR, ".ytp-large-play-button").click() 13 time.sleep(1) ---> 14 driver.find_element(By.CSS_SELECTOR, ".ytp-large-play-button").click() 15 #I would then Take the screen shot 16 ~/opt/anaconda3/envs/macs40400/lib/python3.9/site-packages/selenium/webdriver/remote/webelement.py in click(self) -> None: 91 def click(self) -> None: 92 """Clicks the element.""" ---> 93 self._execute(Command.CLICK_ELEMENT) 94 95 def submit(self): ~/opt/anaconda3/envs/macs40400/lib/python3.9/site-packages/selenium/webdriver/remote/webelement.py in _execute(self, command, params) 408 params = {} 409 params["id"] = self._id --> 410 return self._parent.execute(command, params) 411 412 def find_element(self, by=By.ID, value=None) -> WebElement: ~/opt/anaconda3/envs/macs40400/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py in execute(self, driver_command, params) 442 response = self.command_executor.execute(driver_command, params) ... webdriverClickElement@chrome://remote/content/marionette/interaction.sys.mjs:150:11 interaction.clickElement@chrome://remote/content/marionette/interaction.sys.mjs:119:11 clickElement@chrome://remote/content/marionette/actors/MarionetteCommandsChild.sys.mjs:198:29 receiveMessage@chrome://remote/content/marionette/actors/MarionetteCommandsChild.sys.mjs:86:31
我尝试使用XPATH替代CSS选择器,但仍出现相同错误。
问题2:截图无法渲染视频内容
我使用以下代码截图,但仅得到空白视频框,无法显示视频内容:
element = driver.find_element(By.XPATH,vid_xpath) element.screenshot(".\\test.png")
我尝试更换过多个视频XPATH:
- /html/body/ytd-app/div[1]/ytd-page-manager/ytd-watch-flexy/div[5]/div[1]/div/div[1]/div[2]/div/div/ytd-player/div/div/div[1]/video
- //*[@id="movie_player"]
- //*[@id="ytd-player"]
- //*[@id="container"]
问题3:广告处理疑问
我发现使用YouTube URL中的时间码可以观看5秒无广告视频,暂以此作为可能的解决方案,但尚未验证效果。
内容的提问来源于stack exchange,提问作者BegginerScraper Griff
相关产品推荐
相关产品推荐

