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

Selenium实现YouTube视频播放完成后退出循环问题求助

问题分析与解决方法

你的代码存在这几个关键问题:

  • 驱动焦点未切换到新视频标签页:用window.open打开新标签后,Selenium驱动仍停留在原来的YouTube搜索结果页面,自然找不到新标签里的「播放下一个视频」按钮,必须手动切换标签。
  • 视频未启动播放:打开视频页后默认是暂停状态,不播放的话永远不会触发「播放下一个视频」按钮出现,得先触发播放操作。
  • 不合理的循环与异常处理:空except会吞掉所有错误,你根本看不到元素定位失败的真实原因;无限循环反复等待也会造成资源浪费。
  • 硬编码的time.sleep:固定等待4秒的方式不稳定,换成显式等待更适配不同网络环境。

修正后的代码:

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

def main():
    search = input("请输入要搜索的内容: ")
    driver = webdriver.Chrome()

    # 打开YouTube搜索结果页
    driver.get(f"https://www.youtube.com/results?search_query={search}")

    # 显式等待第一个视频标题可点击,替代固定sleep
    first_video = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, "a#video-title"))
    )
    video_url = first_video.get_attribute('href')

    # 打开新标签并切换到该标签
    driver.execute_script(f"window.open('{video_url}')")
    driver.switch_to.window(driver.window_handles[-1])

    # 等待播放按钮出现并点击启动播放
    play_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, "button.yt-play-button"))
    )
    play_button.click()

    # 等待「播放下一个视频」按钮出现,超时时间可根据视频时长调整
    wait = WebDriverWait(driver, 3600)  # 最长等待1小时,按需修改
    try:
        wait.until(EC.element_to_be_clickable((By.XPATH, "//button[@aria-label='播放下一个视频']")))
        print("视频播放完毕,已出现下一个视频按钮")
    except TimeoutException:
        print("等待超时,未检测到下一个视频按钮")
    finally:
        driver.quit()  # 程序结束后关闭浏览器

if __name__ == "__main__":
    main()

补充说明:

  1. 切换标签时用driver.window_handles[-1],因为新打开的标签会自动排在窗口列表的最后一位。
  2. 所有等待操作都用显式等待,比固定time.sleep更稳定,能根据页面加载情况动态调整等待时长。
  3. 捕获TimeoutException替代空except,能明确区分「超时未找到元素」和其他类型的错误。
  4. 最后通过driver.quit()关闭浏览器,避免残留进程占用资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 10:25:03