根因:linux.do 登录表单启用 hCaptcha 人机验证,自动化浏览器无法通过, 旧自动登录永远不可能成功;而抓取的 _forum_session 是匿名会话本就存在的 cookie,误报「自动登录成功」,导致受限主题一直 404。 修复: - 移除无效的账号密码自动登录(_auto_login_and_capture) - Cookie 改为每个 StealthySession 会话都重新注入(旧代码跨请求丢失) - 登录校验端点改用 /notifications.json(匿名 403 / 登录 200), 弃用对匿名也返回 404 的 /session/current_user.json - Cookie 配置支持多格式:完整 Cookie 头、单 name=value、裸值(向后兼容) linuxdo_username/password 保留仅为兼容,不再生效。
astrbot_plugin_linuxdo - LinuxDo 链接预览插件 🚀
自动检测聊天消息中的 linux.do 链接,绕过 Cloudflare Turnstile 防护,
截图并提取内容摘要发送预览。
✨ 功能
- 🔗 自动检测 — 聊天中出现
linux.do链接立即触发 - 🛡️ 绕过 Cloudflare — 使用 Scrapling 的 StealthySession 自动解 Turnstile
- 📸 智能截图 — 自适应卡片渲染,完整楼主内容,无空白/截断
- 📝 内容摘要 — 通过 Discourse JSON API 提取完整楼主内容(无截断)
- 🔒 会话 Cookie — 可选配置浏览器 Cookie,访问受限分类、私信等非公开内容(账号密码自动登录因 hCaptcha 已移除)
- ⚡ 异步非阻塞 — Scrapling 在独立线程池运行,不阻塞 AstrBot 主循环
- 💾 缓存机制 — 30 分钟内相同链接直接返回缓存截图
- 🧹 缓存管理 —
/linuxdo_stats查看统计,/linuxdo_clean清理缓存
📦 安装
1. 安装插件
将 astrbot_plugin_linuxdo 目录放入 AstrBot 的 data/plugins/ 目录。
2. 安装依赖
# 进入 AstrBot 环境
cd AstrBot
# 安装 Scrapling(含浏览器)
pip install scrapling[fetchers]
scrapling install
# 或者使用 pipx(推荐)
pipx install scrapling[fetchers]
scrapling install
3. 重载插件
在 AstrBot WebUI 插件管理中找到 LinuxDo Preview,点击重载。
📖 使用方法
自动触发: 在聊天中发送或粘贴任何 linux.do 链接即可,例如:
https://linux.do/t/topic/1378383
插件自动:
- 回复
🔍 正在获取 linux.do 预览… - 后台使用 Scrapling 绕过 Cloudflare
- 发送 截图 + 标题 + 内容摘要
管理指令:
| 指令 | 说明 |
|---|---|
/linuxdo_stats |
查看统计(请求数/缓存命中/错误/缓存大小) |
/linuxdo_clean |
清理所有缓存截图 |
🔧 技术原理
┌─────────────┐ 检测链接 ┌──────────────┐
│ 用户消息 │ ──────────→ │ Plugin Core │
│ linux.do/xx │ │ 事件监听器 │
└─────────────┘ └──────┬───────┘
│
run_in_executor()
│
┌───────▼────────┐
│ Thread Pool │
│ (max_workers=2)│
└───────┬────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────┐ ┌──────────────┐
│ Stealthy │ │ 截图保存 │ │ 提取标题&正文 │
│ Session │ │ .png │ │ │
│ (solves CF) │ │ │ │ │
└──────────────┘ └──────────┘ └──────────────┘
│ │ │
└───────────────┼───────────────┘
▼
┌──────────────────┐
│ 返回主线程 │
│ yield 图片+文字 │
└──────────────────┘
⚙️ 配置
通过 _conf_schema.json 支持以下配置:
| 配置项 | 说明 | 默认值 |
|---|---|---|
cache_ttl |
缓存有效期(秒),设为 0 关闭缓存 | 1800 |
max_content_length |
内容摘要最大长度(字符) | 400 |
screenshot_timeout |
截图超时(秒) | 15 |
screenshot_full_page |
全页截图模式(true=完整帖子,false=仅视口) | true |
use_api_render |
使用 API + 自定义 HTML 渲染(推荐) | true |
linuxdo_session_cookie |
LinuxDo 会话 Cookie(推荐填 _t,访问受限内容必填) |
(空) |
linuxdo_username |
LinuxDo 用户名(已弃用,受 hCaptcha 限制无法自动登录) | (空) |
linuxdo_password |
LinuxDo 密码(已弃用,配合用户名自动登录) | (空) |
🔑 访问受限内容(可选)
默认以匿名身份访问 linux.do。如需查看受限分类、私信等非公开内容,请使用手动 Cookie。
方式一:手动复制 Cookie(推荐,唯一可用方式)
- 在浏览器中登录 linux.do
- 打开 DevTools(F12)→ Application → Cookies →
https://linux.do - 复制
_t(推荐,长效约 1 年)或_forum_session(短期)的 Value - 在 AstrBot WebUI 插件配置中粘贴到
linuxdo_session_cookie
也支持一次粘贴完整 Cookie 头,例如:_t=xxx; _forum_session=yyy。
有效期:_t 约 1 年;_forum_session 约 2 周。过期后重新获取即可,无需重启。
关于账号密码自动登录(已不可用)
⚠️ linux.do 的登录表单启用了 hCaptcha 人机验证,自动化浏览器无法通过,因此账号密码自动登录已被移除。
linuxdo_username/linuxdo_password配置项保留仅为兼容,不再生效。请改用上方的 Cookie 方式。
⚠️ 注意事项
- 首次使用需要安装 Scrapling 和浏览器:
pip install scrapling[fetchers] && scrapling install - Cloudflare 绕过每次约 20-40 秒,请耐心等待
- 截图保存路径:
data/plugin_data/astrbot_plugin_linuxdo/screenshots/ - 截图缓存 30 分钟自动过期,也可手动
/linuxdo_clean
📄 许可证
MIT
Description
Languages
Python
100%