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

使用Selenium搜索YouTube后无法获取目标内容的问题求助

问题原因与解决方案

问题根源

YouTube首页和搜索结果页都存在ID为contents的元素:

  • 执行搜索后,页面跳转过程中,Selenium可能在新页面的contents元素完全加载前,就获取到了首页的旧contents元素,导致返回跳转前的数据。
  • time.sleep(5)是固定时长等待,无法适配网络波动或页面渲染延迟,有时会出现元素已存在但内容未渲染的情况,所以输出空白。
  • 直接打开搜索结果页属于一次性请求加载,元素与内容同步就绪,因此能拿到预期结果。

解决方案:用显式等待替代固定sleep

Selenium的显式等待可以根据元素的加载状态动态等待,比固定等待更可靠。

步骤1:导入必要模块

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

步骤2:修改搜索后的等待逻辑

方案一:等待搜索结果元素加载完成

等待contents下的视频标题元素出现,确认内容已渲染:

driver = webdriver.Chrome(PATH)
driver.get("https://www.youtube.com/")

# 执行搜索
search = driver.find_element(By.NAME, "search_query")
search.send_keys("Python")
search.send_keys(Keys.RETURN)

# 显式等待:最多等待10秒,直到搜索结果中的视频标题出现
wait = WebDriverWait(driver, 10)
wait.until(
    EC.presence_of_element_located((By.XPATH, '//*[@id="contents"]//a[@id="video-title"]'))
)

# 获取并打印contents内容
main_content = driver.find_element(By.ID, "contents")
print(main_content.text)

方案二:等待URL跳转完成

先确认页面已跳转到搜索结果页,再获取元素:

driver = webdriver.Chrome(PATH)
driver.get("https://www.youtube.com/")

# 执行搜索
search = driver.find_element(By.NAME, "search_query")
search.send_keys("Python")
search.send_keys(Keys.RETURN)

# 等待URL包含搜索关键词,确认页面跳转完成
wait = WebDriverWait(driver, 10)
wait.until(EC.url_contains("search_query=Python"))

# 获取并打印contents内容
main_content = driver.find_element(By.ID, "contents")
print(main_content.text)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:45:51