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

如何正确提取YouTube评论数?Selenium超时异常排查

问题分析与解决方案

问题描述

已成功获取YouTube视频标题,但提取评论数时触发selenium.common.exceptions.TimeoutException;已确认XPATH路径//h2[@id="count"]/yt-formatted-string/span[1]在开发者工具中指向正确元素。


可能的原因及修复方案

1. 评论区懒加载未触发

YouTube评论区采用懒加载机制,仅当页面滚动到对应区域时才会加载评论数元素。需先滚动到评论区位置:

# 滚动到评论区所在位置
wd.execute_script("window.scrollTo(0, document.getElementById('comments').offsetTop);")
# 等待元素加载完成
time.sleep(3)

2. 定位方式不够稳定

即使开发者工具中XPATH显示正确,页面渲染时可能存在层级变化,建议换用更稳定的CSS选择器或调整XPATH:

  • 改用CSS选择器:
comments_selector = "#count > yt-formatted-string > span:nth-child(1)"
v_comm_cnt = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, comments_selector)))
  • 调整XPATH(避免依赖精确层级):
comments_xpath = '//yt-formatted-string[@class="count-text style-scope ytd-comments-header-renderer"]/span[1]'

3. 可见性判断逻辑不适用

visibility_of_element_located要求元素可见才返回,若元素存在但暂时不可见,可换用presence_of_element_located(仅判断元素是否存在):

v_comm_cnt = wait.until(EC.presence_of_element_located((By.XPATH, comments_xpath)))

4. 错误的结果调用方式

wait.until返回的是WebElement对象,len(v_comm_cnt)会报错,需获取元素的文本内容:

print(v_comm_cnt.text)  # 输出评论数字符串,如"1,234"

修改后的完整代码示例

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

DRIVER_PATH = "<your chromedriver path>"
wd = webdriver.Chrome(executable_path=DRIVER_PATH)

url = 'https://www.youtube.com/watch?v=5qzKTbnhyhc'

wd.get(url)
wait = WebDriverWait(wd, 30)

# 获取视频标题
v_title = wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="container"]/h1/yt-formatted-string'))).text
print("title Is ")
print(v_title)

# 滚动到评论区触发加载
wd.execute_script("window.scrollTo(0, document.getElementById('comments').offsetTop);")
time.sleep(3)

# 获取评论数
comments_selector = "#count > yt-formatted-string > span:nth-child(1)"
v_comm_cnt = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, comments_selector)))
print("评论数:", v_comm_cnt.text)

wd.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:36:41