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

如何用Python Selenium获取YouTube视频分类、游戏名及发布日期?

YouTube爬取分类、游戏名、发布日期的NoSuchElementException解决方法

核心问题排查与解决

1. 元素加载延迟导致定位失败

YouTube是动态渲染页面,直接调用find_element会因元素未加载完成报错,改用显式等待确保元素加载完成后再定位:

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

# 示例:等待分类元素加载(需根据你的DOM结构调整定位符)
category = WebDriverWait(driver, 15).until(
    EC.visibility_of_element_located((By.XPATH, '//a[contains(@href, "/category/")]/span'))
).text

# 发布日期定位示例
publish_date = WebDriverWait(driver, 15).until(
    EC.visibility_of_element_located((By.XPATH, '//div[@id="info-strings"]//yt-formatted-string'))
).text

2. 定位符选择错误

YouTube的class名会动态更新,优先用稳定的属性或相对定位:

  • 视频分类:定位指向分类频道的链接,比如//a[contains(@href, "/category/")],取其文本内容
  • 游戏名称:针对Gaming类视频,可通过游戏标签的相对定位,比如//div[text()="Game"]/following-sibling::div/span(需匹配你的DOM结构)
  • 发布日期:找页面中"发布于"相关的元素,常用XPATH如//span[@class="style-scope ytd-video-primary-info-renderer"][2]

3. 页面嵌套iframe的情况

如果目标元素在iframe内,需先切换到iframe再定位:

# 定位并切换到iframe(根据实际iframe的属性调整定位符)
iframe = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.TAG_NAME, 'iframe'))
)
driver.switch_to.frame(iframe)

# 这里执行元素定位操作

# 操作完成后切回主文档
driver.switch_to.default_content()

4. YouTube页面结构更新

YouTube会频繁调整页面布局,需打开浏览器开发者工具(F12)重新检查目标元素的最新DOM结构,更新定位符。

反爬注意事项

  • 添加随机延迟(如time.sleep(random.randint(2,5))),避免短时间内频繁请求被限制
  • 尽量使用无头模式时添加浏览器参数模拟真实用户行为,比如设置user-agent

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 15:50:03