You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Selenium爬取YouTube视频获取链接触发AttributeError报错如何解决

问题解决方法

报错原因

  • find_elements_by_id 是复数查找方法,返回值是符合条件的所有WebElement组成的列表,列表对象本身没有get_attribute属性,因此触发AttributeError
  • 你直接调用driver.find_elements_by_id是全局查找页面所有缩略图元素,无法和当前遍历的单个视频匹配,就算解决列表问题也拿不到对应视频的链接

修复代码

你只需要调整遍历内获取链接的逻辑,改为从当前遍历的video元素下,用单数查找方法定位对应缩略图拿href即可,修改后的完整代码如下:

from selenium import webdriver

driver = webdriver.Chrome(".\chromedriver.exe")

driver.get("https://www.youtube.com/c/edurekaIN/videos")
driver.implicitly_wait(180)

videos = driver.find_elements_by_class_name('style-scope ytd-grid-video-renderer')

for video in videos:
    title = video.find_element_by_xpath('.//*[@id="video-title"]').text
    views = video.find_element_by_xpath('.//*[@id="metadata-line"]/span[1]').text
    when = video.find_element_by_xpath('.//*[@id="metadata-line"]/span[2]').text
    print(title, views, when)
    # 修改后的代码:从当前video下查找单个thumbnail元素拿href
    video_url = video.find_element_by_id("thumbnail").get_attribute('href')
    print(video_url)

补充注意点

  • 如果部分元素查找不稳定,可以替换为xpath写法:video.find_element_by_xpath('.//a[@id="thumbnail"]').get_attribute('href'),相对路径查找更精准
  • 老版本Selenium的find_element_by_*系列方法在Selenium 4.0+已经弃用,如果你后续升级版本可以替换为find_element(By.ID, "thumbnail")的写法,需要提前导入from selenium.webdriver.common.by import By

内容的提问来源于stack exchange,提问作者Al Baari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 04:36:04