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

Python Selenium爬取YouTube视频标题遇NoSuchElementException求助

YouTube视频标题爬取问题解决方法

问题根源

你用name="style-scope ytd-rich-grid-media"定位元素根本不靠谱——这个属性是YouTube给大量元素加的通用标识,不是视频标题独有的,自然找不到目标元素。另外time.sleep(10)是固定等待,没法保证页面刚好渲染完标题,大概率还是会扑空。

修复方案

1. 换精准的定位器

直接定位视频标题的专属元素,比如用XPATH定位标题链接://ytd-rich-grid-media//a[@id='video-title'],或者用CSS选择器ytd-rich-grid-media #video-title,这俩都是直接指向标题元素的。

2. 用显式等待替代固定sleep

显式等待会等到目标元素出现/可见才继续执行,比硬等10秒靠谱得多,能适配不同网络速度。

修改后的代码示例

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化浏览器
driver = webdriver.Chrome()
driver.get("https://www.youtube.com/@JohnWatsonRooney/videos")

# 最多等20秒,直到所有标题元素可见
wait = WebDriverWait(driver, 20)
video_titles = wait.until(EC.visibility_of_all_elements_located((By.XPATH, "//ytd-rich-grid-media//a[@id='video-title']")))

# 打印所有标题
for idx, title in enumerate(video_titles, 1):
    print(f"{idx}. {title.text}")

driver.quit()

后续比价程序建议

  • 不同电商网站的元素结构差异大,每个网站要单独写精准的定位器(比如价格、商品名、链接的选择器)
  • 统一用显式等待处理页面加载,避免定位失败
  • 提前处理反爬:设置浏览器UA、保存Cookie、必要时用代理
  • 把爬取逻辑封装成函数,每个网站对应一个爬取函数,最后收集所有商品数据后做价格排序,输出最低价链接、商品排名和名称

内容的提问来源于stack exchange,提问作者Charles Perry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:15:24