如何用Python获取浏览器中当前播放的YouTube视频?
获取当前播放的YouTube视频的Python实现方案
方法1:浏览器扩展+本地API交互
这种方法能获取完整的视频信息(标题、ID、播放状态等),需要配合浏览器扩展使用:
- 给浏览器安装自定义扩展,监听YouTube页面的播放状态与视频数据
- 扩展通过HTTP请求把数据发送到本地Python服务
- Python脚本监听本地端口接收数据
Python服务示例代码:
from flask import Flask, request app = Flask(__name__) @app.route('/youtube-status', methods=['POST']) def receive_status(): data = request.json print(f"当前播放视频:{data['title']}") print(f"视频ID:{data['videoId']}") print(f"播放状态:{'播放中' if data['isPlaying'] else '暂停'}") return 'OK' if __name__ == '__main__': app.run(host='127.0.0.1', port=5000)
Chrome扩展核心JS代码:
function sendVideoData() { const video = document.querySelector('video'); if (!video) return; const videoData = { title: document.title.replace(' - YouTube', ''), videoId: window.location.href.split('v=')[1]?.split('&')[0], isPlaying: !video.paused }; fetch('http://127.0.0.1:5000/youtube-status', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify(videoData) }); } // 监听播放状态变化 document.querySelector('video')?.addEventListener('play', sendVideoData); document.querySelector('video')?.addEventListener('pause', sendVideoData); // 页面加载时发送一次数据 window.addEventListener('load', sendVideoData);
方法2:Windows系统API获取窗口标题(仅Windows)
只能提取视频标题,无法获取播放状态等细节,适合快速需求:
- 用
pywin32库枚举系统窗口,筛选含YouTube关键词的窗口 - 从窗口标题中提取视频名称
示例代码:
import win32gui import re def get_current_youtube_title(): def window_callback(handle, window_list): window_text = win32gui.GetWindowText(handle) if 'YouTube' in window_text and win32gui.IsWindowVisible(handle): window_list.append(window_text) return True windows = [] win32gui.EnumWindows(window_callback, windows) for window in windows: title_match = re.match(r'(.*) - YouTube', window) if title_match: return title_match.group(1) return None if __name__ == '__main__': title = get_current_youtube_title() print(f"当前播放视频:{title}" if title else "未找到正在播放的YouTube视频")
方法3:浏览器自动化工具(Selenium)
需要用Selenium启动浏览器实例,无法获取手动打开的浏览器内容,但能直接操控页面:
- 用Selenium控制浏览器,读取YouTube页面DOM元素获取视频信息
示例代码:
from selenium import webdriver from selenium.webdriver.common.by import By import time # 启动Chrome浏览器 driver = webdriver.Chrome() driver.get('https://www.youtube.com') # 等待页面加载或手动打开视频 time.sleep(5) # 获取视频标题和播放状态 video_title = driver.find_element(By.CSS_SELECTOR, 'h1.style-scope.ytd-watch-metadata').text video_element = driver.find_element(By.TAG_NAME, 'video') is_playing = not video_element.paused print(f"视频标题:{video_title}") print(f"播放状态:{'播放中' if is_playing else '暂停'}") driver.quit()
内容的提问来源于stack exchange,提问作者elpideus
相关产品推荐
相关产品推荐

