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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 09:57:52