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

如何绕过或自动化pytube的OAuth/PO Token验证实现音频下载?

解决pytube/pytubefix下载音频的Token问题

1. 直接传入Token到pytube

pytube和pytubefix支持手动传入Token,无需弹窗。初始化YouTube对象时,可通过headers或cookies参数注入:

  • 传入PO/OAuth Token:
    from pytube import YouTube
    
    auth_token = "你的Bearer Token"
    yt = YouTube(
        "目标视频URL",
        headers={"Authorization": f"Bearer {auth_token}"}
    )
    # 筛选并下载音频流
    audio_stream = yt.streams.filter(only_audio=True).order_by('abr').desc().first()
    audio_stream.download(output_path="./audio")
    
  • 传入浏览器Cookie(需从已登录YouTube的浏览器导出):
    yt = YouTube(
        "目标视频URL",
        cookies={
            "__Secure-3PAPISID": "你的SID值",
            "__Secure-3PSID": "你的SID值"
        }
    )
    

⚠️ 注意:Token和SID与个人Google账号绑定,分享程序时绝对不能硬编码自己的Token,避免账号权限泄露。

2. 自动化生成Token(无弹窗)

可以让用户导出自己的浏览器Cookie,再通过脚本自动生成可用的Token:

import hashlib
import time
import json

def generate_sapisidhash(cookie_file_path):
    # 从用户导出的Cookie文件中读取SID
    with open(cookie_file_path, 'r', encoding='utf-8') as f:
        cookies = json.load(f)
    sapisid = next(c['value'] for c in cookies if c['name'] == '__Secure-3PAPISID')
    
    # 按照YouTube的算法生成SAPISIDHASH
    timestamp = str(int(time.time() // 3600))
    origin = "https://www.youtube.com"
    hash_str = f"{timestamp} {sapisid} {origin}".encode('utf-8')
    sha1_hash = hashlib.sha1(hash_str).hexdigest()
    return f"SAPISIDHASH {timestamp}_{sha1_hash}"

# 使用示例
auth_token = generate_sapisidhash("用户导出的cookie.json")
yt = YouTube("目标视频URL", headers={"Authorization": auth_token})

这个逻辑基于YouTube的内部认证机制,可能随平台更新变动,但目前稳定性较好。

3. 无需Token的替代方案

如果不想处理Token问题,推荐使用yt-dlp——这款工具维护活跃,自动适配YouTube的反爬策略,无需手动配置Token:

import yt_dlp

ydl_config = {
    'format': 'bestaudio/best',
    'postprocessors': [{
        'key': 'FFmpegExtractAudio',
        'preferredcodec': 'mp3',  # 可选:转换为mp3格式
        'preferredquality': '192',
    }],
    'outtmpl': './audio/%(title)s.%(ext)s',  # 自定义输出路径和文件名
}

with yt_dlp.YoutubeDL(ydl_config) as ydl:
    ydl.download(["目标视频URL"])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 10:05:03