使用youtube_dl下载年龄限制视频报错,如何程序化解决?
问题描述
我编写了如下Python代码:
from youtube_dl import YoutubeDL videos = [...] with YoutubeDL() as ydl: ydl.download(videos)
运行时出现如下错误:
WARNING: unable to download video info webpage: HTTP Error 410: Gone ERROR: Sign in to confirm your age This video may be inappropriate for some users. Traceback (most recent call last): File "/home/onur/PycharmProjects/youtube_video_downloader/venv/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 815, in wrapper return func(self, *args, **kwargs) File "/home/onur/PycharmProjects/youtube_video_downloader/venv/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 836, in __extract_info ie_result = ie.extract(url) File "/home/onur/PycharmProjects/youtube_video_downloader/venv/lib/python3.10/site-packages/youtube_dl/extractor/common.py", line 534, in extract ie_result = self._real_extract(url) File "/home/onur/PycharmProjects/youtube_video_downloader/venv/lib/python3.10/site-packages/youtube_dl/extractor/youtube.py", line 1731, in _real_extract raise ExtractorError(reason, expected=True) youtube_dl.utils.ExtractorError: Sign in to confirm your age This video may be inappropriate for some users. During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/onur/PycharmProjects/youtube_video_downloader/main.py", line 53, in <module> ydl.download(videos) File "/home/onur/PycharmProjects/youtube_video_downloader/venv/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 2068, in download res = self.extract_info( File "/home/onur/PycharmProjects/youtube_video_downloader/venv/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 808, in extract_info return self.__extract_info(url, ie, download, extra_info, process) File "/home/onur/PycharmProjects/youtube_video_downloader/venv/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 815, in wrapper return func(self, *args, **kwargs) File "/home/onur/PycharmProjects/youtube_video_downloader/venv/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 847, in __extract_info return self.process_ie_result(ie_result, download, extra_info) File "/home/onur/PycharmProjects/youtube_video_downloader/venv/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 885, in process_ie_result return self.extract_info(ie_result['url'], File "/home/onur/PycharmProjects/youtube_video_downloader/venv/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 808, in extract_info return self.__extract_info(url, ie, download, extra_info, process) File "/home/onur/PycharmProjects/youtube_video_downloader/venv/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 815, in wrapper return func(self, *args, **kwargs) File "/home/onur/PycharmProjects/youtube_video_downloader/venv/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 847, in __extract_info return self.process_ie_result(ie_result, download, extra_info) File "/home/onur/PycharmProjects/youtube_video_downloader/venv/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 933, in process_ie_result return self.__process_playlist(ie_result, download) File "/home/onur/PycharmProjects/youtube_video_downloader/venv/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 1067, in __process_playlist entry_result = self.__process_iterable_entry(entry, download, extra) File "/home/onur/PycharmProjects/youtube_video_downloader/venv/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 815, in wrapper return func(self, *args, **kwargs) File "/home/onur/PycharmProjects/youtube_video_downloader/venv/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 1076, in __process_iterable_entry return self.process_ie_result( File "/home/onur/PycharmProjects/youtube_video_downloader/venv/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 885, in process_ie_result return self.extract_info(ie_result['url'], File "/home/onur/PycharmProjects/youtube_video_downloader/venv/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 808, in extract_info return self.__extract_info(url, ie, download, extra_info, process) File "/home/onur/PycharmProjects/youtube_video_downloader/venv/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 824, in wrapper self.report_error(compat_str(e), e.format_traceback()) File "/home/onur/PycharmProjects/youtube_video_downloader/venv/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 628, in report_error self.trouble(error_message, tb) File "/home/onur/PycharmProjects/youtube_video_downloader/venv/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 598, in trouble raise DownloadError(message, exc_info) youtube_dl.utils.DownloadError: ERROR: Sign in to confirm your age This video may be inappropriate for some users.
请问如何通过程序化方式登录以验证年龄,或者彻底避免该错误?我哪里操作有误?
解决方案
核心原因说明
你没写错代码,问题出在youtube-dl已经停止维护,对YouTube最新的年龄验证、反爬机制支持不足,导致无法获取受年龄限制的视频资源。
方案1:切换到yt-dlp(优先推荐)
yt-dlp是youtube-dl的活跃分支,持续更新,对YouTube的新兼容更好,多数情况下能直接绕过普通年龄验证,也支持通过登录cookie解决强制验证问题:
- 安装yt-dlp:
pip install yt-dlp
- 修改代码,用法和youtube-dl基本一致:
from yt_dlp import YoutubeDL videos = [...] with YoutubeDL() as ydl: ydl.download(videos)
- 若仍遇年龄验证,导入浏览器登录后的cookie:
- 用浏览器登录YouTube并完成年龄验证,用插件导出Netscape格式的cookie文件
- 在代码中配置cookie路径:
ydl_opts = { 'cookiefile': '/你的cookie文件路径/cookies.txt' } with YoutubeDL(ydl_opts) as ydl: ydl.download(videos)
方案2:给youtube-dl传入cookie(不推荐)
如果非要用youtube-dl,也可以通过传入登录cookie绕过验证,但因为库已停更,可能还是会遇到其他兼容问题:
- 导出浏览器的YouTube cookie为Netscape格式
- 修改代码配置:
ydl_opts = { 'cookiefile': '/你的cookie文件路径/cookies.txt' } with YoutubeDL(ydl_opts) as ydl: ydl.download(videos)
方案3:确认视频权限
有些视频强制要求登录验证年龄,这种情况下必须使用已通过年龄验证的YouTube账号cookie才能下载,没有其他绕过方法。
内容的提问来源于stack exchange,提问作者mchd
相关产品推荐
相关产品推荐

