项目介绍
手动复制抖音评论效率太低,且抖音的反爬机制不断升级,传统的 DOM 解析方式越来越不稳定。因此开发了这个工具,采用 API 拦截 + DOM 解析 + RENDER_DATA 三层兜底策略,结合 Playwright 浏览器自动化,稳定抓取视频评论数据。
功能特点
- API 拦截优先 — 通过拦截抖音评论接口直接获取结构化 JSON 数据,比 DOM 解析稳定 10 倍
- 三层兜底策略 — API 拦截 → DOM 选择器解析 → RENDER_DATA 提取,确保最大程度获取数据
- Cookie 复用 — 首次扫码登录后自动保存 Cookie,后续打开工具自动加载免登录
- 反检测机制 — 隐藏 webdriver 标志、伪造浏览器指纹、模拟真实用户滚动行为
- 智能滚动加载 — 鼠标滚轮模拟 + scrollTop 设置 + 页面级滚动,多策略触发虚拟列表加载
- 验证码检测 — 自动检测滑块验证码,暂停抓取等待用户手动完成
- Excel 导出 — 一键导出 .xlsx 格式,自动美化表头、冻结首行、自适应列宽
- 实时日志 — PyQt5 界面实时显示抓取进度、API 拦截数量、滚动次数等调试信息
⚠️ 已知问题与待改进
- 评论数量不稳定 — 抖音反爬策略频繁更新,API 拦截成功率波动较大,实际抓取数量可能低于预期目标
- 滚动加载不完整 — 虚拟列表加载机制依赖前端渲染,部分长评论区可能无法触发完整加载
- RENDER_DATA 解析脆弱 — 抖音页面结构变化会导致 RENDER_DATA 路径失效,需要频繁维护正则表达式
- 验证码处理被动 — 仅支持暂停等待用户手动处理,无法自动识别滑块验证码
- Cookie 过期无提示 — Cookie 失效时可能直接抓取失败,缺少自动重新登录流程
- 仅支持 Edge 浏览器 — Playwright 配置锁定 msedge,Chrome/Firefox 用户无法使用
📌 欢迎提交 Issue 反馈问题,或贡献代码改进。
技术架构
核心模块
browser.py — Playwright 浏览器生命周期管理,注入反检测脚本,Cookie 持久化
auth.py — 登录状态检测(UI 元素判断),扫码登录流程,Cookie 有效性验证
comment_scraper.py — 评论抓取核心,API 拦截 + DOM 解析 + RENDER_DATA 提取
exporter.py — openpyxl Excel 导出,支持自适应列宽、冻结首行、自动筛选
技术亮点
- API 拦截在页面导航之前设置
page.on("response"),不错过首次加载的评论请求
- 鼠标滚轮模拟真实滚动行为,触发抖音虚拟列表的 IntersectionObserver 加载机制
- 递归 20 层深度搜索 RENDER_DATA 中的嵌套评论数据
- QThread + threading.Event 实现登录等待,用户点击「确认登录」后才继续抓取
使用流程
- 运行
python main.py 启动工具
- 粘贴抖音视频链接或分享文本
- 设置目标评论数量(默认 200 条)
- 点击「开始抓取」→ 首次需要在弹出的 Edge 浏览器中扫码登录
- 登录完成后点击「确认登录」→ 工具自动保存 Cookie 并开始抓取
- 抓取完成后点击「导出 Excel」保存到桌面
依赖安装
pip install playwright PyQt5 openpyxl
playwright install msedge
python main.py
项目结构
dy工具/
├── main.py # 入口
├── config.py # 全局配置
├── requirements.txt # 依赖清单
├── core/
│ ├── browser.py # 浏览器管理 + 反检测
│ ├── auth.py # 登录 + Cookie 管理
│ ├── comment_scraper.py # 评论抓取核心
│ └── exporter.py # Excel 导出
└── ui/
├── main_window.py # 主窗口界面
├── worker.py # 后台线程
└── styles.py # QSS 样式表