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

Python Selenium爬取YouTube视频标题时循环仅获取首个元素如何解决

问题原因及修复方案
  • 类名选择器使用错误:By.CLASS_NAME 仅支持传入单个类名,你传入的style-scope ytd-grid-renderer是两个类名的组合,匹配不到正确的元素
  • 容器定位错误:你选择的ytd-grid-renderer是整个视频列表的外层容器,不是单个视频的容器,所以遍历的时候只会拿到1个外层容器,自然只能输出1个标题
  • 缺少等待逻辑:YouTube页面采用动态懒加载机制,页面刚打开时不会加载全部视频元素,未加等待直接查找元素会出现元素未加载完成、获取结果不全的问题
修正后的代码
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# 路径前加r声明为原始字符串,避免反斜杠转义问题
s = Service(r'C:\webdrivers\chromedriver.exe')
driver = webdriver.Chrome(service=s)
# 设置全局隐式等待超时时间
driver.implicitly_wait(10)
driver.get("https://www.youtube.com/c/TechWithTim/videos?view=0&sort=p&flow=grid")

# 显式等待单个视频容器加载完成
WebDriverWait(driver, 15).until(
    EC.presence_of_element_located((By.CLASS_NAME, 'ytd-grid-video-renderer'))
)

# 模拟滚动加载懒加载视频,滚动次数按需调整即可
for _ in range(3):
    driver.execute_script("window.scrollTo(0, document.documentElement.scrollHeight);")
    time.sleep(2)

# 定位所有单个视频的容器
videos = driver.find_elements(By.CLASS_NAME, 'ytd-grid-video-renderer')
titles = []
for video in videos:
    title = video.find_element(By.XPATH, './/*[@id="video-title"]')
    print(title.text)
    titles.append(title.text)

driver.quit()
额外说明

如果遇到title.text为空的情况,可以替换为title.get_attribute('textContent')或者title.get_attribute('aria-label')获取标题内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:54:06