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

如何通过Python Selenium点击YouTube画质按钮将分辨率调整为720p

YouTube播放器Selenium切换720p分辨率实现方案

你现有代码无法定位画质选项的核心原因是:设置菜单为动态渲染,点击设置后菜单元素需要一定时间加载完成,且画质选项藏在二级菜单内,直接即时查找会触发元素不存在、元素不可交互的报错。

定位逻辑说明

YouTube播放器的DOM结构里有固定的功能标识属性,不要靠显示文本、动态类名定位,稳定性很差:

  • 一级设置菜单的画质入口固定带data-purpose="quality"属性,不受页面显示语言影响
  • 二级画质列表里的分辨率选项,文本会固定标注720p(高帧率视频会标注720p60),用包含匹配即可兼容
  • 所有元素操作前加显式等待,等元素处于可点击状态再执行操作,不要用固定时长的time.sleep()硬等,兼顾稳定性和执行效率

修正后完整代码

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 pyvirtualdisplay import Display

url = input()
display = Display(visible=1, size=(1920, 1080))
display.start()
driver = webdriver.Chrome('./chromedriver')
wait = WebDriverWait(driver, 10) # 最长等待10秒,元素就绪后立刻执行

driver.get(url)

# 先触发视频播放,避免菜单被播放引导层遮挡
large_play_btn = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'ytp-large-play-button')))
large_play_btn.click()

# 打开设置菜单
setting_btn = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'ytp-settings-button')))
setting_btn.click()

# 点击一级菜单的画质入口
quality_entry = wait.until(EC.element_to_be_clickable(
    (By.XPATH, '//div[@class="ytp-panel"]//div[@data-purpose="quality"]')
))
quality_entry.click()

# 选择720p分辨率,兼容720p、720p60两种场景
target_quality = wait.until(EC.element_to_be_clickable(
    (By.XPATH, '//div[contains(@class,"ytp-quality-menu")]//span[contains(text(),"720p")]/ancestor::div[@class="ytp-menuitem"]')
))
target_quality.click()

# 可选:点击设置按钮收起菜单
setting_btn.click()

注意事项

  • 1920*1080的虚拟显示分辨率足够触发YouTube桌面端播放器布局,不会出现响应式布局下DOM结构变化的问题
  • 若目标视频本身没有720p片源,代码会触发超时异常,可自行添加异常捕获逻辑做降级处理(比如自动选择当前可用的最高分辨率)
  • 需保证本地chromedriver版本和安装的Chrome浏览器大版本完全对应,否则会出现各类元素交互异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 17:33:32