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

Selenium自动化YouTube遇异常:获取前页面元素而非当前页元素

解决YouTube自动化中推荐视频点击失败的问题

我来帮你搞定这个问题!你的代码之所以会拿到搜索结果页的元素,还触发ElementNotInteractableException,核心原因有两个:

问题根源

  1. YouTube的单页应用特性:点击搜索结果后,页面不会完全刷新,之前的搜索结果元素仍然留在DOM里(只是被隐藏到页面上方不可见区域)。你用全局的find_elements_by_id("video-title")会把旧元素和新的推荐视频元素一起捞出来,点击时自然会选中不可见的旧元素,导致报错。
  2. 不可靠的等待策略:time.sleep是固定时长等待,万一页面加载慢,还没等到推荐视频加载完成就去查找元素,拿到的还是之前的旧元素。

修复后的完整代码

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

seed = 1
random.seed(seed)

driver = webdriver.Firefox()
driver.get("http://www.youtube.com/")

# 精准定位搜索框并等待加载完成
search_box = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.NAME, "search_query"))
)
search_box.send_keys("history")
search_box.send_keys(Keys.RETURN)

# 等待搜索结果加载完成再获取元素
search_results = WebDriverWait(driver, 10).until(
    EC.presence_of_all_elements_located((By.ID, "video-title"))
)
# 随机点击前5个搜索结果
search_results[random.randint(0,4)].click()

# 等待视频页面加载(右侧推荐栏出现)
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "secondary"))
)

# 仅在右侧推荐栏内查找推荐视频,避免混入旧元素
recommended_container = driver.find_element_by_id("secondary")
recommended_videos = recommended_container.find_elements_by_id("video-title")

# 确保有足够的推荐视频再执行点击
if len(recommended_videos) >= 5:
    target_video = recommended_videos[random.randint(0,4)]
    # 等待目标元素可交互后再点击
    WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable(target_video)
    )
    target_video.click()
else:
    print("推荐视频数量不足,无法随机选择")

# 用完记得关闭浏览器(可选)
# driver.quit()

关键修改点说明

  • 用显式等待替代time.sleep:WebDriverWait会等待元素出现或可交互,比固定时长等待更可靠,完全适配页面加载速度的波动。
  • 精准限定推荐视频的范围:通过id="secondary"的右侧栏容器来查找推荐视频,确保只获取当前页面右侧的内容,彻底避开之前的搜索结果元素。
  • 精准定位搜索框:用name="search_query"定位搜索框,避免误找到页面上的其他input元素。
  • 增加元素可交互验证:点击推荐视频前,先等待元素可点击,彻底解决ElementNotInteractableException错误。

内容的提问来源于stack exchange,提问作者Omer F Yalcin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:17:24