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

使用C# Selenium获取YouTube视频标题失败,请求排查问题

YouTube视频标题获取失败的原因及解决方法

问题原因

  • 元素定位器失效:YouTube页面DOM结构会频繁更新,你使用的style-scope ytd-watch-metadata属于动态生成的框架类名,随时可能变动;h1.title yt-formatted-string的层级选择器也可能因页面结构调整不再匹配当前元素。
  • 未等待元素加载完成:YouTube是动态渲染页面,标题元素可能在初始加载后才逐步渲染,直接调用FindElement会因元素未出现抛出异常,或获取到空文本。

解决方法

1. 用显式等待确保元素加载完成

通过Selenium的显式等待,等待标题元素可见后再获取文本,避免动态加载导致的问题:

using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium;

// 设置10秒的显式等待时长
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
// 等待标题元素可见并获取文本
var title = wait.Until(d => d.FindElement(By.CssSelector("ytd-watch-metadata h1 yt-formatted-string"))).Text;

2. 更换更稳定的定位器

优先选择不易变动的属性或层级定位:

// 方法1:通过aria-label属性定位(标题元素的aria-label通常以"Video title"开头)
var title = wait.Until(d => d.FindElement(By.CssSelector("yt-formatted-string[aria-label^='Video title']"))).Text;

// 方法2:直接定位h1下的yt-formatted-string(当前YouTube页面的稳定结构)
var title = wait.Until(d => d.FindElement(By.CssSelector("h1 yt-formatted-string"))).Text;

3. 处理隐藏元素的文本获取

如果元素存在但.Text返回空,可尝试获取innerText或textContent属性:

var titleElement = wait.Until(d => d.FindElement(By.CssSelector("h1 yt-formatted-string")));
var title = titleElement.GetAttribute("innerText");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:15:40