news 2026/5/8 16:18:56

抖音视频下载器开发手记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
抖音视频下载器开发手记

从零打造抖音视频下载器:一个 Python GUI 工具的开发手记

📅发布时间:2026-05-07
🏷️标签:Python / GUI / PyInstaller / Playwright / 爬虫
💡适合人群:想用 Python 开发桌面工具、解决实际问题的人,该工具仅限于学习研究


一、缘起:为什么我要做这个工具?

起因很简单——我需要一个不需要复杂操作的抖音视频下载器。

现有的方案要么需要装各种依赖,要么要手动复制 Cookie,要么下载下来有水印。找了一圈,发现 f2 这个 Python 库是最靠谱的无水印下载方案,但它只有命令行界面。

于是我想:能不能做一个带图形界面的 exe,双击就能用?


二、技术方案选型

核心需求

需求解决方案
无水印下载f2Python 库
图形界面Tkinter(Python 内置,零依赖)
自动获取 Cookieplaywright浏览器自动化
打包成 exePyInstaller

为什么选 Tkinter 而不是 PyQt?

最初考虑过 PyQt/PySide,界面会更漂亮。但最终选择 Tkinter 的理由很简单:

  • 零依赖:Python 内置,不需要额外装任何东西
  • 打包体积小:PyQt 打包后动不动 200MB+,Tkinter 只要 140MB
  • 够用就好:这个工具界面简单,Tkinter 完全能满足

三、核心代码实现

1. 主界面(Tkinter)

importtkinterastkfromtkinterimportttk,messagebox,filedialog,scrolledtextclassDouyinDownloaderApp(tk.Tk):def__init__(self):super().__init__()self.title("抖音视频无水印下载器 v1.0")self.geometry("750x620")# 核心组件:链接输入、Cookie输入、保存路径、日志输出# ...(完整代码见文末)def_start_download(self):url=self.video_url.get().strip()cookie=self.txt_cookie.get("1.0",tk.END).strip()save_path=self.save_path.get().strip()# 调用 f2 下载thread=threading.Thread(target=run_f2_download,args=(url,cookie,save_path,self.txt_log),daemon=True,)thread.start()

2. 关键问题:PyInstaller 打包后 sys.executable 指向 exe 本身

打包后最头疼的问题出现了——sys.executable不再是python.exe,而是打包出来的 exe 本身,导致无法通过python -m f2调用 f2。

解决方案:写一个 Python 路径查找器

importsys,os,shutildef_find_python_executable()->str:""" PyInstaller 打包后,sys.executable 指向 exe 本身, 需要手动查找本机 Python 路径。 """# 如果是开发环境(未打包),直接用 sys.executableifnotgetattr(sys,"frozen",False):returnsys.executable# 打包场景:从常见路径中查找 Pythoncommon_paths=[r"D:\Python\Python311\python.exe",r"D:\Python\Python310\python.exe",r"C:\Python311\python.exe",]forpincommon_paths:ifos.path.isfile(p):returnp# 从系统 PATH 搜索which_python=shutil.which("python")ifwhich_python:returnwhich_pythonraiseFileNotFoundError("未找到 Python 解释器")

3. URL 格式自动转换

用户经常发来精选页链接(/jingxuan?modal_id=xxx),但 f2 只认识视频页链接(/video/xxx)。加一个转换器:

fromurllib.parseimporturlparse,parse_qsdef_normalize_douyin_url(url:str)->str:"""将精选页/话题页链接转换为视频页链接"""parsed=urlparse(url)# 如果已经是视频页,直接返回if"/video/"inparsed.path:returnurl# 从 modal_id 提取视频 IDif"modal_id"inparsed.query:modal_id=parse_qs(parsed.query).get("modal_id",[None])[0]ifmodal_id:returnf"https://www.douyin.com/video/{modal_id}"returnurl

4. Playwright 自动获取 Cookie

最实用的功能——点击按钮自动从浏览器提取 Cookie:

fromplaywright.sync_apiimportsync_playwright KEY_COOKIES=["ttwid","odin_tt","passport_csrf_token","__ac_nonce","__ac_signature","s_v_web_id"]deffetch_cookies_auto(on_log=None)->str|None:"""打开浏览器,访问抖音,自动提取 Cookie"""withsync_playwright()asp:browser=p.chromium.launch(headless=False)context=browser.new_context()page=context.new_page()page.goto("https://www.douyin.com/",wait_until="domcontentloaded")time.sleep(3)# 等待 Cookie 加载cookies=context.cookies(["https://www.douyin.com"])cookie_str="; ".join(f"{c['name']}={c['value']}"forcincookiesifc["name"]inKEY_COOKIES)returncookie_str

四、打包配置(PyInstaller)

# 抖音下载器.spec a = Analysis( ['douyin_downloader_gui.py'], hiddenimports=[ 'f2.cli', 'f2.utils', 'playwright', 'playwright.sync_api', 'tkinter', '_tkinter', ], ) exe = EXE(pyz, a.scripts, [], name='抖音下载器', console=False, # 不显示控制台黑窗口 ) coll = COLLECT(exe, a.binaries, a.zipfiles, a.datas, name='抖音下载器', )

打包命令:

pyinstaller 抖音下载器.spec

五、踩坑总结

原因解决方案
f2 调用失败打包后 sys.executable 指向 exe自定义 Python 路径查找器
精选页链接下载失败modal_id 格式不被 f2 识别URL 预处理转换
浏览器 Cookie 数据库锁定Chrome 正在运行时无法读取改用 Playwright 启动独立浏览器
打包体积过大PyQt + Playwright用 Tkinter + 精简 hiddenimports

六、使用效果

最终交付的是一个144MB 的文件夹,包含:

  • 抖音下载器.exe— 双击即用
  • _internal/— 依赖库(内置 Chromium 浏览器)

使用流程(从 5 步简化为 1 步):

旧流程:复制链接 → 打开浏览器 F12 → 找 Cookie → 拼字符串 → 粘贴 → 下载 新流程:点「自动获取 Cookie」→ 粘贴链接 → 下载

七、源码获取

完整源码已开源,有需要的朋友可以自行下载研究:

📦项目文件:https://github.com/wupengfei-alt/douyin-downloader

核心文件说明:

文件说明
douyin_downloader_gui.py主程序(含 GUI + 下载逻辑)
playwright_helper.pyCookie 自动获取模块
build.bat一键打包脚本
抖音下载器.specPyInstaller 配置文件

八、写在最后

这个项目从想法到完成,花了大半天时间。中间遇到了不少坑,但每一个都学到了东西:

  1. PyInstaller 的 sys.executable 陷阱— 这个坑很少有人提,但一旦遇到就傻眼
  2. Tkinter 的线程安全— 所有耗时操作都要丢到子线程,GUI 只负责展示
  3. 自动化 Cookie 获取— 用 Playwright 替代手动复制,体验提升明显

技术不一定非要多么高大上,能解决实际问题就是好技术。希望这篇文章对你有帮助!


如果你也有类似的需求想要实现,欢迎评论区交流!


原创不易,转载记得注明出处。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 16:18:55

技术管理者如何有效授权:从信任构建到组织规模化

1. 从技术专家到管理者:授权为何如此艰难在技术圈摸爬滚打十几年,从一线工程师做到带几十人的团队,我最大的感悟之一就是:“授权”这件事,听起来是管理学的常识,做起来却像在割自己的肉。尤其是对我们这些技…

作者头像 李华
网站建设 2026/5/8 16:18:54

为什么这个开源工具能在5分钟内彻底解决你的Windows激活烦恼?

为什么这个开源工具能在5分钟内彻底解决你的Windows激活烦恼? 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 你是否曾经为Windows系统或Office办公软件的激活问题而困扰&#xff1f…

作者头像 李华
网站建设 2026/5/8 16:18:01

极化视觉与基础模型:单视角表面法线估计技术解析

1. 极化视觉与基础模型:单视角表面法线估计的技术革新在计算机视觉领域,表面法线估计一直是个基础但极具挑战性的任务。想象一下,当你用手机拍摄一个物体时,如果能实时获取物体表面每个像素点的朝向信息,这将为AR内容贴…

作者头像 李华
网站建设 2026/5/8 16:17:21

Windows Cleaner终极指南:5分钟学会彻底解决C盘空间不足问题

Windows Cleaner终极指南:5分钟学会彻底解决C盘空间不足问题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一款专为Windows系统设…

作者头像 李华
网站建设 2026/5/8 16:17:18

你的ThinkPad风扇太吵?TPFanCtrl2帮你实现静音与性能的完美平衡

你的ThinkPad风扇太吵?TPFanCtrl2帮你实现静音与性能的完美平衡 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 你是否经常被ThinkPad风扇的突然狂转打扰工…

作者头像 李华