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

如何使用Selenium自动选择YouTube视频的最高可用画质

自动选择YouTube最高画质的实现方案

嘿,我来帮你搞定这个自动选最高画质的问题!你之前的思路方向是对的,但我们可以用更可靠的方式来定位最高画质,而不是依赖固定索引(毕竟YouTube的菜单排列偶尔可能有变化,比如“自动”选项的位置)。下面是具体的实现步骤和代码:

核心思路

  1. 用显式等待替代time.sleep:避免网络延迟或页面加载慢导致元素定位失败,让代码更稳定。
  2. 提取所有可用画质选项的分辨率数值:通过正则匹配从选项文本中提取数字(比如从“2160p 超清”里拿到2160),然后找到数值最大的那个选项点击。
  3. 排除“自动”选项:因为我们要选的是手动设置的最高画质,而非YouTube自动适配的选项。

完整代码示例

# 首先导入必要的模块
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import re

# 1. 打开YouTube设置菜单
settings_button = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, "button.ytp-button.ytp-settings-button"))
)
settings_button.click()

# 2. 打开画质选项面板
quality_menu = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.XPATH, "//div[@class='ytp-menuitem-label' and text()='画质']"))
)
quality_menu.click()

# 3. 获取所有可用的画质选项(排除"自动")
quality_options = WebDriverWait(driver, 10).until(
    EC.presence_of_all_elements_located((By.CSS_SELECTOR, "div.ytp-menuitem-content"))
)
# 过滤掉"自动"选项
filtered_options = [opt for opt in quality_options if "自动" not in opt.text]

# 4. 提取每个选项的分辨率数值,找到最大的那个
max_resolution = -1
target_option = None
for option in filtered_options:
    # 用正则提取文本中的数字(比如"2160p"提取2160)
    res_match = re.search(r"(\d+)p", option.text)
    if res_match:
        resolution = int(res_match.group(1))
        if resolution > max_resolution:
            max_resolution = resolution
            target_option = option

# 5. 点击最高画质选项
if target_option:
    target_option.click()
else:
    print("未找到可用的画质选项")

关键细节说明

  • 显式等待:WebDriverWait(driver, 10)表示最多等待10秒,直到元素可点击/出现,比time.sleep()更灵活可靠。
  • 正则匹配分辨率:用re.search(r"(\d+)p", option.text)可以精准提取分辨率数字,不管选项文本是“2160p 超清”还是“1080p 高清”都能适配。
  • 过滤自动选项:确保我们选择的是手动设置的最高画质,而不是YouTube的自动模式。

备选方案(依赖菜单排列)

如果你确定YouTube的画质选项是从高到低排列(且“自动”在最顶部),也可以简化代码,直接选择过滤后的第一个选项:

# 过滤后直接选第一个(假设最高画质在最上面)
if filtered_options:
    filtered_options[0].click()

不过这个方法不如提取数值可靠,因为YouTube的菜单排列可能会有调整,比如某些地区或视频的菜单顺序不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 22:07:50