如何使用Selenium在YouTube视频上右键调出“Stats for Nerds”选项?
解决Selenium右键点击YouTube视频调出“Stats for Nerds”的问题
要实现右键点击YouTube视频调出菜单并打开“Stats for Nerds”,核心是用Selenium的ActionChains类模拟右键操作,再定位菜单选项完成点击。以下是具体实现方案:
关键步骤
- 定位视频播放元素:YouTube的视频容器通常可通过
id="movie_player"或class="ytp-player"定位,这是右键操作的目标元素。 - 模拟右键点击:使用
ActionChains.context_click()方法触发右键菜单。 - 打开Stats面板:定位右键菜单中的“Stats for Nerds”选项并点击。
- 提取广告相关ID:通过执行JS代码提取
ytp-sfn-cpn或ytp-sfn-video-id元素的内容。 - 关闭Stats面板:点击面板的关闭按钮完成操作。
完整代码示例(Python)
from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 初始化浏览器 driver = webdriver.Chrome() driver.get("https://www.youtube.com/watch?v=目标视频ID") # 等待视频播放元素加载完成 video_player = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "movie_player")) ) # 模拟右键点击视频区域 actions = ActionChains(driver) actions.context_click(video_player).perform() # 等待右键菜单出现并点击“Stats for Nerds” stats_option = WebDriverWait(driver, 5).until( EC.element_to_be_clickable((By.XPATH, '//div[text()="Stats for Nerds"]')) ) stats_option.click() # 执行自定义JS提取广告CPN(对应你原代码的逻辑) ad_cpn = driver.execute_script(""" var cpn_elem = document.getElementsByClassName("ytp-sfn-cpn"); return cpn_elem.length > 0 ? cpn_elem[0].innerText : null; """) # 提取广告视频ID(Stats面板中的Video ID字段) ad_video_id = driver.execute_script(""" var id_elem = document.getElementsByClassName("ytp-sfn-video-id"); if (id_elem.length > 0) { return id_elem[0].innerText.split(": ")[1]; } return null; """) # 输出提取的信息 print(f"广告CPN: {ad_cpn}") print(f"广告视频ID: {ad_video_id}") # 关闭Stats面板 close_btn = WebDriverWait(driver, 5).until( EC.element_to_be_clickable((By.CLASS_NAME, "ytp-sfn-close")) ) close_btn.click() # 执行跳过广告操作(对应你原代码的逻辑) skip_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CLASS_NAME, "ytp-ad-skip-button")) ) skip_btn.click() # 关闭浏览器 driver.quit()
注意事项
- 元素定位适配:如果YouTube UI更新导致XPath或Class失效,可通过浏览器开发者工具重新定位右键菜单选项和Stats面板元素。
- 等待机制:必须使用
WebDriverWait等待元素加载,避免因页面未渲染完成导致的元素未找到错误。 - 右键菜单触发:右键点击视频元素时,确保元素处于可见状态,若视频被弹窗遮挡需先处理弹窗。
内容的提问来源于stack exchange,提问作者Zain Khalid
相关产品推荐
相关产品推荐

