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

求助:使用pytube下载YouTube视频时出现get_throttling_function_name匹配错误

解决pytube报错:get_throttling_function_name: could not find match for multiple

错误原因

这个错误的核心原因是YouTube更新了页面的JavaScript加密逻辑,pytube内置的节流函数名称匹配规则无法适应新的JS代码结构,导致无法解析视频流的加密参数——哪怕你安装了最新版pytube,也可能因为YouTube的更新速度快于pytube的官方修复节奏而触发这个问题。

修复方案

方案1:修改pytube源码中的正则匹配规则

找到你本地Python环境中pytube的cipher.py文件(通常路径类似Lib/site-packages/pytube/cipher.py),定位到get_throttling_function_name函数里的function_patterns列表,更新正则匹配规则来适配YouTube的新JS:

原代码片段:

function_patterns = [
    r'a\.[a-zA-Z]\s*&&\s*\([a-z]\s*=\s*a\.get\("n"\)\)\s*&&.*?\|\|\s*([a-z]+)',
    r'\([a-z]\s*=\s*([a-zA-Z0-9$]+)(\[\d+\])?\([a-z]\)',
]

替换为:

function_patterns = [
    r'a\.[a-zA-Z]\s*&&\s*\([a-z]\s*=\s*a\.get\("n"\)\)\s*&&.*?\|\|\s*([a-z]+)',
    r'\([a-z]\s*=\s*([a-zA-Z0-9$]+)(\[\d+\])?\([a-z]\)',
    r'\b[cs]\s*&&\s*[adf]\.set\([^,]+\s*,\s*encodeURIComponent\s*\(\s*([a-zA-Z0-9$]+)\(',
]

保存文件后重新运行代码即可。

方案2:使用OAuth认证绕过节流检查

在初始化YouTube对象时添加use_oauth和allow_oauth_cache参数,通过YouTube OAuth认证来避开节流参数的解析:

修改你的初始化代码:

video = YouTube(audio_link, use_oauth=True, allow_oauth_cache=True)

第一次运行时会弹出浏览器要求你登录YouTube账号,登录成功后凭据会被本地缓存,后续运行无需重复登录。这种方法不用修改源码,适合快速解决问题。

方案3:安装社区修复的pytube分支

如果官方版本迟迟没有修复,可以安装社区维护的修复分支:

pip install git+https://github.com/pytube/pytube.git@fix/throttling-function

安装完成后直接使用原有代码即可,无需额外修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:20:37