- 07 Mar, 2026 11 commits
-
-
- 从 153 行精简到 72 行 - 删除逐文件项目结构树(Claude 可自行读取) - 删除标准 Python 命名约定和 PEP 8(默认已知) - 删除技术栈列表(可从 pyproject.toml 推断) - 删除已移除的 PROMPT.md 引用 - 新增 Git 工作流规范(禁止直接推送 main) Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
zy authored -
添加 workflow_dispatch 触发器,支持在 GitHub Actions 页面手动触发发版。 Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
zy authored -
push 到 main 时自动创建 Release,附带源码 tar.gz/zip 产物。 排除文档/配置类文件变更触发,防止无意义发版。 Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
zy authored -
添加 version、metadata.openclaw(requires.bins、emoji、os)等字段, 满足 ClawHub 技能注册表的发布要求。 Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
zy authored -
- cli.py: 引入 _SESSION_TAB_FILE 机制,_connect() 优先复用上次命令 留下的 tab,彻底解决多命令流程中 tab 不断堆积的问题 - cli.py: cmd_check_login 不再关闭页面,tab 保持存活供下次复用 - cli.py: delete-cookies 退出登录时清除会话 tab 记录 - cdp.py: 新增 get_or_create_page()(复用空白 tab)、 _setup_page() 辅助方法、get_page_by_target_id()、get_existing_page() - title_utils.py: 新增 truncate_title() 工具函数 - 所有 SKILL.md: 添加技能边界约束,防止 AI 记忆中的其他项目 (如 xiaohongshu-mcp)干扰执行 - xhs-publish/SKILL.md: 新增图片 URL 直传规则(禁止手动下载)、 save-draft 取消流程、标题长度计算说明与重新生成要求
Angiin authored -
之前验证码登录偶尔失败,是因为发送验证码和提交验证码时 连接的可能不是同一个标签页,导致小红书认为验证码无效。 现在发送验证码后会记录当前标签页的 ID,提交验证码时直接 连回这个标签页,不再靠猜。扫二维码等待登录也做了同样处理。
Angiin authored -
- 登录时不再只给文件路径,二维码图片会直接显示在对话里,扫一下就能登录 - 服务器无界面环境下同样支持扫码登录,扫对话里的图片即可 - 无界面服务器也可选择手机验证码登录,两种方式都支持 - 有桌面的设备会同时弹出浏览器窗口,浏览器和对话里的二维码都能扫 - 扫码后自动等待登录完成,不再需要反复查询登录状态 - 二维码图片自带白色边框,更容易被手机识别
Angiin authored -
- 新增 get-qrcode 子命令:非阻塞获取二维码,立即返回路径 - save_qrcode_to_file 支持 data URL 和网络 URL 两种格式 - 输出 qrcode_data_url 供 Skill 直接内嵌 Markdown 图片 - 新增 _add_png_border:纯 stdlib 给 PNG 添加 16px 白色边框 支持 Grayscale/RGB/Grayscale+Alpha/RGBA,全 filter 类型解码 - check-login 非 GUI 环境返回 login_method: both,支持二维码或手机验证码二选一 - xhs-auth SKILL.md:GUI 走 login(阻塞),无界面走 get-qrcode + data_url 内嵌显示
Angiin authored
-
- 06 Mar, 2026 1 commit
-
-
在无桌面 Linux 服务器上使用手机验证码登录时,多处 Chrome 启动/重启 调用默认使用有头模式(headless=False),导致 Chrome 在无 DISPLAY 环境 中无法启动。chrome_launcher.py 已有 has_display() 检测函数,但调用处 未使用。 修复点: - _connect() / _connect_existing():ensure_chrome 改为传递 headless=not has_display(),所有子命令统一受益 - cmd_send_code RateLimitError 重启:restart_chrome 改为传递 headless=not has_display(),避免重启时切换为有头模式 - _headless_fallback():加入 has_display() 判断,无桌面时不再 尝试重启 Chrome,改为返回明确错误提示引导用户使用 send-code 新增 scripts/test_headless_login.py,包含 7 个单元测试,通过 mock has_display() 在 Windows 环境中模拟 Linux 无桌面场景,覆盖三处修复 的正反两个方向,确保桌面用户行为不受影响。 同步更新 skills/xhs-auth/SKILL.md,在手机登录两步流程前加入强制交互 说明,要求 Claude 必须先向用户询问手机号/验证码再执行命令,避免占位 符被误当参数传入。
Angiin authored
-
- 05 Mar, 2026 5 commits
-
-
- check-login 未登录时返回 login_method(qrcode/phone)和 hint, Claude 可根据当前环境自动选择登录方式 - 新增 has_display() 环境检测:Windows/macOS 返回 true, Linux 检查 DISPLAY/WAYLAND_DISPLAY 环境变量 - 新增 send-code / verify-code 分步手机登录命令,适用于无界面服务器 - send-code 在频率限制时自动重启 Chrome 并重试一次(RateLimitError) - delete-cookies 改为通过页面 UI 点击「更多→退出登录」后再删文件, 修复原先只删 cookies.json 但 Chrome Session 仍保留导致登录状态残留的问题 - 新增 logout() / send_phone_code() / submit_phone_code() 到 login.py - 新增 LOGOUT_MORE_BUTTON / LOGOUT_MENU_ITEM 选择器 - 新增 RateLimitError 异常类 - 更新 skills/xhs-auth/SKILL.md:加入登录方式决策树和分步手机登录流程
Angiin authored -
新增 MAX_TITLE_LENGTH 常量,补充 UTF-16 码元计数规则: ZWJ 序列(💇♀️)= 5 贡献值,旗帜(🇨🇳)= 4,SMP emoji = 2。 对应 Go CalcTitleLength 算法,澄清各类 emoji 的计算逻辑。
Angiin authored -
- 新增 ZIP 下载安装方式(推荐),适配 OpenClaw 及所有 SKILL.md 兼容平台 - 新增自然语言使用示例,展示连贯操作能力 - 补全 CLI 命令参考(20 个子命令) - 更新项目结构和技术架构说明
Angiin authored -
- 完善登录信息返回,登录后显示登录名与小红薯号 - 新增 selectors.py 集中管理 CSS 选择器,便于改版维护 - 屏蔽位置等权限弹窗,减少发布流程干扰 - 优化 Tags 点击逻辑,降低标签无法选中的概率 - 强化浏览器伪装(JS 伪装、CDP 真实交互、随机延迟),触发验证时自动重试一次 - 修复发布流程 4 个 bug(页面关闭、标签错位、换行丢失、标签重复) - Chrome 启动器增强、运行锁修复、长文发布与类型优化 - 新增保存草稿(暂存离开)功能
Angiin authored
-
- 04 Mar, 2026 5 commits
-
-
- cdp.py: new_page 中通过 Browser.setPermission 自动拒绝位置、通知、摄像头等权限弹窗 - publish.py: 新增 save_as_draft() 离开发布页触发自动保存 - cli.py: 新增 save-draft 子命令,用户取消发布时保存草稿
Angiin authored -
Angiin authored
-
- cli.py: 分步发布命令(fill-publish/fill-publish-video/long-article/select-template/next-step)不再关闭页面,新增 _connect_existing 复用已有 tab - cdp.py: input_content_editable 遇到 \n 时按 Enter 键,正确产生段落换行 - publish.py: _input_tags 先 focus 正文编辑器再输入标签;新增 _extract_hashtags_from_content 从正文末尾提取 hashtag 合并到 tags 去重;标签输入增加重试等待联想下拉
Angiin authored -
- stealth.py: 新增 5 项 JS 覆盖(hardwareConcurrency/deviceMemory/connection/chrome.csi+loadTimes/outerWidth+Height)、REALISTIC_UA 常量、--disable-extensions/--disable-sync 启动参数 - cdp.py: click_element 改用 CDP Input 事件(isTrusted=true)、input_content_editable 改用逐字 CDP 键入、new_page 注入 UA 覆盖和随机 viewport - human.py: 新增 navigation_delay() 函数 - comment.py: 所有 time.sleep 替换为 sleep_random,评论输入改用 CDP 逐字输入 - search.py/feed_detail.py/login.py: 固定延迟替换为随机区间延迟
Angiin authored -
- 新增写长文发布模式(publish_long_article.py):支持长文编辑、一键排版、模板选择 - 新增 Headless 自动降级:未登录时自动切换到有窗口模式 - 新增分步发布命令:fill-publish / fill-publish-video / click-publish - 拆分 publish 为 fill_publish_form + click_publish_button - chrome_launcher 新增 restart_chrome / kill_chrome - 新增 6 个 CLI 子命令,总计 19 个 - 更新 SKILL.md 含长文模式和分步发布工作流 Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
zy authored
-
- 03 Mar, 2026 2 commits
-
-
## 主要变更 ### 核心模块重写 - 创建 scripts/xhs/ 包,包含 18 个专业模块(3728 行代码) - 基于 xiaohongshu-mcp Go 源码完整实现 - CDP WebSocket 直接通信,替代第三方库依赖 ### 模块清单 - cdp.py: Browser/Page/Element 类,完整 CDP 协议实现 - stealth.py: 反检测 JS 注入 + Chrome 启动参数 - login.py: 登录检查与二维码登录(QR 码保存到临时文件供 Agent 显示) - publish.py: 图文发布完整流程 - publish_video.py: 视频发布完整流程 - search.py: 搜索与内容筛选 - feed_detail.py: 笔记详情与评论加载 - comment.py: 评论与回复 - like_favorite.py: 点赞与收藏 - user_profile.py: 用户主页 - cookies.py: Cookie 持久化 - types.py: 完整的 dataclass 数据类型系统 - errors.py: 自定义异常体系 - human.py: 人类行为模拟(延迟、滚动) - selectors.py: CSS 选择器常量 - urls.py: URL 构建函数 ### CLI 统一接口 - scripts/cli.py: 13 个子命令,完全兼容 xiaohongshu-mcp MCP 工具 - check-login: 检查登录状态 - login: 获取登录二维码 - switch-account/delete-cookies: 账号切换 - publish-content: 图文发布 - publish-with-video: 视频发布 - list-feeds: Feed 列表 - search-feeds: Feed 搜索 - get-feed-detail: 笔记详情 - user-profile: 用户主页 - post-comment: 发送评论 - like-feed: 点赞笔记 - favorite-feed: 收藏笔记 ### 支持脚本重写 - chrome_launcher.py: Chrome 进程管理(跨平台) - account_manager.py: 多账号 Profile 隔离 - image_downloader.py: 图片/视频下载(SHA256 缓存) - title_utils.py: UTF-16 标题长度计算 - run_lock.py: 单实例锁机制 - publish_pipeline.py: 发布流程编排 CLI ### 文档与配置 - SKILL.md: 统一技能入口(路由到 5 个子技能) - skills/xhs-auth/SKILL.md: 认证管理技能 - skills/xhs-publish/SKILL.md: 内容发布技能(图文+视频) - skills/xhs-explore/SKILL.md: 内容发现与分析技能 - skills/xhs-interact/SKILL.md: 社交互动技能(评论/点赞/收藏) - skills/xhs-content-ops/SKILL.md: 复合内容运营工作流技能 - CLAUDE.md: 项目开发指南 - PROMPT.md: Ralph Loop 驱动文件 - pyproject.toml: uv 项目配置(uv.lock) - README.md: 完整项目文档 ### 技术栈 - Python 3.11+ with uv 包管理 - requests + websockets: CDP WebSocket 通信 - 代码规范: ruff lint + format ## 对应关系 所有 13 个子命令与 xiaohongshu-mcp MCP 工具完全对应 支持 OpenClaw agent 框架直接调用 ## 前置工作 - 创建 scripts/xhs/ 包架构 - 实现 CDP WebSocket 协议 - 完整的类型系统和错误处理 - CLI 子命令系统 Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
zy authored -
zy authored
-