Cross-platform fixed Playwright automation for idempotent Douyin comments and proof screenshots
Project description
抖音评论与证据截图 · 跨平台独立版
输入抖音详情 URL 与评论内容,程序会复用专用 Chromium profile,按本账号防重、发布一次评论、验证 comment ID,并保存证据截图。
- 支持:Windows、macOS、Linux 桌面环境
- 浏览器:Google Chrome、Chromium;Windows 也可自动探测 Edge
- 不依赖:Pi、Herdr、LLM/API、
open、osascript、ps - 脚本运行本身不消耗模型 token
- 源码:https://github.com/liush2yuxjtu/douyin-comment-standalone
- 许可证:MIT
六边形架构
CLI / JSONL(入站适配器)
│
▼
CommentApplication(用例)
│ │
▼ ▼
BrowserPort LedgerPort(出站端口)
│ │
▼ ▼
Playwright/CDP JSONL 本地台账(出站适配器)
依赖始终向内:domain.py、ports.py、application.py 不导入 Playwright、操作系统命令或持久化实现。
src/douyin_comment/
├── domain.py # 纯数据模型、校验、应用错误
├── ports.py # BrowserPort / LedgerPort
├── application.py # 评论、登录、预热、忘记记录用例
├── adapters/
│ ├── browser.py # 跨平台 Chrome/Chromium + Playwright/CDP
│ └── ledger.py # JSONL 幂等台账
├── composition.py # 唯一组合根
├── cli.py # CLI / JSONL 入站适配器
└── __main__.py
使用前准备
- Python 3.9 或更高版本。
- Google Chrome 或 Chromium;Windows 可使用 Edge。
- 图形桌面环境。Linux 服务器必须有可显示浏览器窗口的桌面会话。
- 首次安装依赖时可以访问 Python 包源。
- 可正常登录并接收必要短信验证的抖音账号。
- 真实的
douyin.com/video/<ID>或douyin.com/note/<ID>链接。
评论属于公开外部操作。执行 post 或 batch 即表示确认发布所给内容。
安装
从 PyPI 安装
Windows:
py -m venv .venv
.\.venv\Scripts\python.exe -m pip install douyin-comment-standalone
.\.venv\Scripts\douyin-comment.exe doctor
macOS / Linux:
python3 -m venv .venv
./.venv/bin/python -m pip install douyin-comment-standalone
./.venv/bin/douyin-comment doctor
从源码安装
cd /path/to/douyin-comment-standalone
python3 install.py # Windows 使用:py install.py
源码安装器在项目内创建 .venv,以 editable 模式安装本项目及固定依赖 playwright==1.48.0。两种方式都使用系统 Chrome/Chromium,不需要执行 playwright install。
doctor 输出 Python、平台、浏览器路径、Playwright 版本和数据目录。未自动找到浏览器时设置:
# macOS / Linux
export DOUYIN_CHROME_PATH="/absolute/path/to/chrome"
# Windows PowerShell
$env:DOUYIN_CHROME_PATH="C:\Program Files\Google\Chrome\Application\chrome.exe"
首次登录
以下示例用 douyin-comment 代表安装后命令;Windows 对应 .venv\Scripts\douyin-comment.exe,macOS/Linux 对应 ./.venv/bin/douyin-comment。
douyin-comment login account-a
程序直接启动浏览器可执行文件并绑定 CDP 到 127.0.0.1,不调用任何平台专属的窗口或通知命令。在打开的专用浏览器中扫码或登录。
登录状态默认保存在:
~/.douyin-comment/profiles/account-a/
然后从评论区复制你的完整昵称;--author 必须与页面显示一致。
单条评论(默认截图)
douyin-comment post \
--author '你的抖音昵称' \
account-a \
'https://www.douyin.com/video/真实内容ID' \
'赞'
成功输出一行 JSON:
{
"status": "submitted",
"url": "https://www.douyin.com/video/真实内容ID",
"matches": 1,
"evidence": {
"author": "你的抖音昵称",
"comment_id": "评论ID",
"time": "刚刚"
},
"snapshot": {
"path": "/home/you/Pictures/douyin-内容ID-comment-评论ID-proof.png",
"size": 1234567
}
}
不需要截图时显式添加 --no-snapshot。
预热但不发布
douyin-comment warmup account-a \
'https://www.douyin.com/video/真实内容ID'
批量运行
复制并编辑示例:
cp examples/jobs.example.jsonl my-jobs.jsonl
{"url":"https://www.douyin.com/video/真实内容ID1","comment":"赞"}
{"url":"https://www.douyin.com/video/真实内容ID2","comment":"讲得很清楚"}
douyin-comment batch \
--author '你的抖音昵称' \
--results "$HOME/Pictures/douyin-batch-results.jsonl" \
account-a my-jobs.jsonl
Windows 可将结果路径写成 %USERPROFILE%\Pictures\douyin-batch-results.jsonl。
批量任务按顺序执行,每成功一条立即写结果;任一项失败或触发安全验证时立即停止,不继续后续 URL。
防重台账
成功结果写入:
~/.douyin-comment/ledger.jsonl
重跑相同的 profile、内容 ID、作者和评论时直接返回 status: ledger-exists,不启动浏览器、不再次发送。旧 v1 台账格式保持兼容。
台账只认识本程序记录的评论。首次接管旧任务时,如果你曾用其他工具发布相同评论且该评论未加载到当前页面,程序无法可靠发现;请先人工确认。
只有确认已从抖音删除原评论、并希望允许再次发布时,才删除对应本地记录:
douyin-comment forget \
--author '你的抖音昵称' \
account-a \
'https://www.douyin.com/video/真实内容ID' \
'原评论内容'
forget 只改本地 JSONL,不操作抖音。
安全验证
遇到登录、短信或 CAPTCHA 时:
- 程序停止并将对应浏览器标签页置前。
- 本人在浏览器中完成验证。
- 不要再次手动点击发送;验证后原操作可能自动生效。
- 重跑原命令。台账和页面检查会避免再次发送已确认任务。
程序不会读取验证码、上传 cookie、绕过风控、点赞、关注或转发。
隐私、平台规则与商标
- 专用 profile 内含登录 cookie。不要上传、共享或同步
~/.douyin-comment/profiles/。 - 证据截图可能包含账号昵称、评论和页面内容;分享前请自行脱敏。
- CDP 只绑定
127.0.0.1,不要改为公网地址。 - 仅用于本人账号上的明确任务;不得用于垃圾评论、骚扰、规避平台限制或其他滥用。
- 使用者须自行遵守所在地法律和抖音平台规则。项目不隶属于、不代表也未获抖音或字节跳动认可;相关商标归其权利人所有。
跨平台配置
| 环境变量 | 默认值 | 用途 |
|---|---|---|
DOUYIN_CHROME_PATH |
自动探测 | Chrome/Chromium/Edge 可执行文件 |
DOUYIN_COMMENT_HOME |
~/.douyin-comment |
profile 与 ledger 根目录 |
DOUYIN_PICTURES_DIR |
~/Pictures |
证据截图与默认批量结果目录 |
测试
python -m pytest
测试按边界组织:用例测试使用 fake ports,台账测试使用临时目录,浏览器探测测试不启动真实浏览器,架构测试阻止核心层导入框架或 macOS 命令。
卸载
删除项目目录即可移除程序和虚拟环境。登录状态、台账和截图位于项目之外,按需单独删除:
~/.douyin-comment/
~/Pictures/douyin-*-proof.png
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file douyin_comment_standalone-2.0.0.tar.gz.
File metadata
- Download URL: douyin_comment_standalone-2.0.0.tar.gz
- Upload date:
- Size: 22.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.18 {"installer":{"name":"uv","version":"0.11.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b4dd6f179e954043ada9678e8222ddf67d66ade60ae9709aec8f01ceae3de44
|
|
| MD5 |
cace58d5f73855275dc2e200e17632c4
|
|
| BLAKE2b-256 |
2b7e104209d37c2b4af801177bd745739788ad762b34178f522b95788ec48c44
|
File details
Details for the file douyin_comment_standalone-2.0.0-py3-none-any.whl.
File metadata
- Download URL: douyin_comment_standalone-2.0.0-py3-none-any.whl
- Upload date:
- Size: 19.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.18 {"installer":{"name":"uv","version":"0.11.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
79cb5abd6c0cbbc8b897427e1ef5340291fdf94d744fe72934d61f4850ded6a5
|
|
| MD5 |
9a44b10d29e486e7a993b0c6edb1e34e
|
|
| BLAKE2b-256 |
0c846f0ae1758406ffaaa56cdd00515a3ec15d7496c32573ffbc0bda156194ac
|