# softwarer-csdn **Repository Path**: queue001/softwarer-csdn ## Basic Information - **Project Name**: softwarer-csdn - **Description**: 基于 Playwright + PyQt6 的 CSDN 自动化助手:批量回访点赞/收藏/评论、回复私信、清未读角标,SQLite 记录已互动文章自动顺延,不重复操作。 - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-10-16 - **Last Updated**: 2026-10-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CSDN 互三助手 用 Playwright 操控真实浏览器,把 CSDN 互粉群里的「回访」流程自动化:打开对方主页 → 点赞 + 收藏 + 评论文章 → 回复私信,再用 SQLite 记录互动过的文章,避免重复操作。自带 PyQt6 图形界面,点按钮即可,也可以全部用命令行。 > 互三 = 互粉圈黑话:给对方文章点赞、收藏、评论,对方回礼。 ## 功能 - **扫码登录**:打开 CSDN 登录页抓微信二维码,扫码后登录态存进本地浏览器 profile(`.csdn-browser-profile/`),之后所有脚本免登录 - **批量回访**:读取消息中心联系人(头像解析 uid,自动排除系统通知)→ 打开对方主页 → 挑**第一篇没互动过**的文章 → 点赞、收藏到第一个收藏夹、评论《文章标题》+ 文案 → 回复私信「已学习」(点开会话的同时清掉红色未读角标) - **去重**:`data/csdn.db`(SQLite)记录每篇文章的赞/藏/评状态;已互动的文章自动顺延到下一篇;只拦最近 30 天的记录,老文章日后还能再回访 - **清未读角标**:逐个点开未读会话(仅点击即可清角标),可指定昵称或一键清全部,可顺带回复 - **图形界面**:左侧功能卡片 + 参数,右侧实时日志(子进程逐行回传),底部进度条与停止按钮;无边框自定义标题栏(雾蓝灰配色) ## 环境要求 - Python 3.12+(Windows 开发,命令行部分跨平台) - Chromium(由 Playwright 安装) ## 安装 ```bash # 方式一:uv(推荐,仓库带 uv.lock) uv sync uv run playwright install chromium # 方式二:pip pip install playwright PyQt6 playwright install chromium ``` ## 快速开始 ```bash # 1. 首次使用:扫码登录(等 10 分钟,可 --minutes 调整) python -m csdn.login # 2. 确认登录态 python -m csdn.check_login # 3. 跑一次批量回访 python -m csdn.batch --limit 5 ``` 或者直接用图形界面: ```bash python main.py # 等价于 python -m csdn.gui ``` 界面按钮与命令一一对应:账号(打开首页 / 扫码登录 / 检查登录状态)、消息中心(打开 / 清空未读角标 / 列出联系人)、批量回访(一键处理全部未读 / 前 N 个 / 只回私信)、互动记录(统计 / 最近 20 条 / 导入历史)。「参数」卡片里可改评论与私信文案、是否给评论带文章标题。 ## 命令一览 | 命令 | 作用 | |---|---| | `python -m csdn.open [--url 地址] [--headless]` | 打开 CSDN 首页 / 指定页面 | | `python -m csdn.login [--minutes 10]` | 扫码登录并保存登录态 | | `python -m csdn.check_login` | 检查本地登录态(不触发登录) | | `python -m csdn.messages [--headless]` | 打开消息中心并列出内容 | | `python -m csdn.batch --list` | 只列出联系人,不操作 | | `python -m csdn.batch --limit 5` | 处理第 1~5 个联系人 | | `python -m csdn.batch --start 1 --limit 10` | 从第 2 个开始处理 10 个 | | `python -m csdn.batch --all-unread` | 处理所有未读角标 > 0 的人 | | `python -m csdn.batch --reply-only` | 只回私信清角标,不做文章互动 | | `python -m csdn.batch --text 文案 [--no-title]` | 自定义评论/私信文案(默认「已学习」),评论默认带《标题》 | | `python -m csdn.clear_unread --list-only` | 列出当前未读 | | `python -m csdn.clear_unread --all` | 清掉所有未读角标(不回复) | | `python -m csdn.clear_unread --nick 昵称 [--reply 内容]` | 指定昵称清角标,可顺带回复 | | `python -m csdn.engage <主页URL> [--dry-run]` | 对单个博主互动(`--dry-run` 只探测) | | `python -m csdn.check_comment <文章URL>` | 校验评论区,确认评论真的发出去了 | | `python -m csdn.db --stats` | 互动记录统计 | | `python -m csdn.db --list 20` | 最近 20 条记录 | | `python -m csdn.db --import` | 把 `output/*.json` 历史结果补录进数据库 | | `python -m csdn.db --reset` | 清空记录(需二次确认) | 批量结果每次存一份 JSON 到 `output/batch_时间戳.json`,跑完在终端打印「赞/藏/评/信」汇总。 ## 项目结构 ``` softwarer-csdn/ ├── main.py # 入口:启动图形界面 ├── csdn/ # 功能包(统一 python -m csdn.xxx 运行) │ ├── __init__.py # 项目根 ROOT,唯一的路径定义处 │ ├── browser.py # Playwright 持久化上下文 / 登录态 / 公共路径 │ ├── actions.py # 点赞 / 收藏 / 评论 / 私信回复等页面动作 │ ├── login.py # 扫码登录 │ ├── check_login.py # 检查登录态 │ ├── open.py # 打开 CSDN 站点 │ ├── messages.py # 打开消息中心 │ ├── clear_unread.py # 清除未读角标 │ ├── engage.py # 对单个博主互动 │ ├── batch.py # 批量回访(主流程) │ ├── db.py # SQLite 互动记录 │ └── gui.py # PyQt6 图形界面 ├── assets/ # GUI 标题栏图标 ├── probes/ # 一次性探针:页面改版、动作失败时用来排查 DOM/风控 ├── scripts/ # 历史脚本存档(早期一轮游/补跑/撤销),不再新增 ├── tests/ # GUI 自检(离屏渲染 + 模拟点击) ├── data/ # csdn.db(运行生成,不入库) ├── output/ # 批量结果 JSON(运行生成,不入库) └── screenshots/ # 运行截图(运行生成,不入库) ``` ## 去重规则 - 文章按**数字 ID** 归一(同一篇文章的不同链接写法算一篇) - 每篇文章记 `liked / collected / commented` 三个状态,成功的只增不减,失败不会抹掉已有成功 - 批量任务启动时把最近 30 天有记录的文章 ID 一次性读进内存,循环里零查询;全互动过的作者自动跳过 - GUI / `db.py --import` 可把早期 JSON 结果一次性补录进库 ## 注意事项 1. **仅供自己账号的日常回访**:动作之间有 12~22 秒随机间隔,短时间高频评论仍会被 CSDN 限频(表现为 comment=fail),属正常风控,隔段时间再跑即可 2. **页面改版**:CSDN 前端一改版选择器就可能失效,先用 `probes/` 下的探针脚本定位新结构,再改 `csdn/actions.py` 3. **登录态敏感**:`.csdn-browser-profile/` 和 `.csdn-storage-state.json` 含 Cookie,已在 `.gitignore` 排除,切勿提交或外传 4. 评论输入用的是真实键盘逐字输入(JS 赋值前端不认),请保持前台窗口不被抢占 ## 许可证 MIT License,详见 [LICENSE](LICENSE)。