Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/aAAaqwq/AGI-Super-Team --skill xhs-publisher명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
币安广场合约投机雷达 v5:以最近24小时专业交易帖为主要证据,回源核验帖子, 联合币安公共合约行情、4周期K线、布林带、ATR、量能和RR,生成可审计的本地影子报告。 触发词:币安广场、扫描币安、binance square、合约机会、交易信号雷达、4小时雷达
BTC 5分钟K线实时方向预测。v5.9对抗式审查重构: 13因子收敛到3个有证据信号(half_body延续+volume放量+meanrev回归, 11个47-49%硬币因子清零) + 三层独立信息过滤(多周期4h/1h/15m趋势 + 跨资产ETH/SOL广度 + 真订单流OFI) + 移除bull×0.92惩罚/Platt置信度门控。半K线策略第2分钟执行。黑天鹅防护: ATR spike+FNG<25。Binance端点双向故障切换。
BB 双向套利策略:加密合约 10x 杠杆布林带均值回归。布林带收窄=横盘→在下轨买、上轨卖;三重过滤器(1h趋势/RSI/BB甜区)确认碗平放,轨对轨止盈(RR 2:1~4:1)。含实时WebSocket模拟盘(paper)、历史回测(simulate/backtest_daily)、币安永续实盘CLI(trade_exec)。触发:'bb套利'、'布林带'、'bollinger'、'横盘策略'、'NEAR'、'回测'、'模拟盘'、'paper trading'。
SOC 직업 분류 기준
SKILL.md 표시 중
| name | xhs-publisher |
| description | 将 Markdown 文章自动发布到小红书(XHS)草稿箱。支持多图上传(封面+素材)。 |
| metadata | {"version":"1.5.0","author":"xiaocode + CCO Ives","domains":["content","publishing","automation","xiaohongshu"],"type":"automation"} |
将 Markdown 文章一键发布到小红书创作者平台草稿箱。支持多图上传。
📋 发布前请确认内容合规:
~/clawd/projects/MediaClaw/references/platforms/xiaohongshu.md
| 条件 | 说明 | 检查方法 |
|---|---|---|
| Playwright | Python playwright 库 | pip show playwright |
| OpenClaw Browser | 浏览器服务运行中 | curl -s http://127.0.0.1:18800/json/version |
| XHS Cookie | Playwright state 文件有效 | ~/.playwright-data/xiaohongshu/state-default.json |
| Cookie 未过期 | cookies.expires > 当前时间 | 检查 cookie 中 a1 的 expires 字段 |
| unset代理 | CDP WebSocket会被代理阻断 | unset ALL_PROXY all_proxy https_proxy http_proxy |
输入参数:
article_path: string # Markdown 文件路径
cover_path: string # 封面图路径 (jpg/png/webp, 推荐 3:4 ≥720x960)
images: list[string] # 追加素材图片 (可选, 最多17张, 总计≤18)
decision: draft # 当前仅支持 draft
📌 标题:你的标题(≤20字)
🏷️ 标签:#标签1 #标签2 #标签3
📝 正文:
正文内容...
(≤1000字)
输出:
status: ok | error
draft_saved: true/false
draft_count: "草稿箱(N)"
title: string
title_truncated: boolean
content_length: number
images_uploaded: number # 上传图片总数 (含封面)
tags_added: list[string]
unset ALL_PROXY all_proxy https_proxy http_proxy
python3 ~/clawd/projects/MediaClaw/skills/xhs-publisher/scripts/publish.py \
--article /path/to/article.md \
--cover /path/to/cover.jpg \
--decision draft
unset ALL_PROXY all_proxy https_proxy http_proxy
python3 ~/clawd/projects/MediaClaw/skills/xhs-publisher/scripts/publish.py \
--article /path/to/article.md \
--cover /path/to/cover.jpg \
--images img1.jpg img2.png img3.jpg \
--decision draft
python3 publish.py \
--article article.md \
--cover cover.jpg \
--images 素材/*.png 素材/*.jpg
import asyncio
from scripts.publish import publish_to_xhs
result = asyncio.run(publish_to_xhs(
article_path="/path/to/article.md",
cover_path="/path/to/cover.jpg",
images=["img1.jpg", "img2.png"], # 可选
decision="draft",
))
print(result)
请发布文章到 XHS 草稿箱:
- 文章: ~/clawd/projects/MediaClaw/output/articles/2026-04-16/claude-vs-codex/xhs/article.md
- 封面: ~/clawd/projects/MediaClaw/output/articles/2026-04-16/claude-vs-codex/xhs/cover-3x4.jpg
- 素材: ~/clawd/projects/MediaClaw/output/articles/2026-04-16/claude-vs-codex/素材/*.png
解析 Markdown → 验证图片 → 启动浏览器 → 加载 Cookie → 打开创作者页面
→ 切换到"上传图文"tab(最后一个可见tab)
→ file_chooser 上传封面 → 等待编辑器出现
→ 逐张追加素材图(通过编辑器内 file input)
→ 填充标题 → 填充正文 → 匹配标签 → 截图 → 存草稿
# 不工作:set_input_files 不触发 XHS React change 事件
await file_input.set_input_files(paths)
# 1. 用 file_chooser API(Playwright 标准文件上传方式)
async with page.expect_file_chooser() as fc:
await file_input.evaluate("el => el.click()")
file_chooser = await fc.value
await file_chooser.set_files(path)
# 2. 点击最后一个可见的"上传图文"tab(XHS 有3个重复 tab)
tabs = document.querySelectorAll('div.creator-tab')
imageTabs = tabs.filter(t => t.text === '上传图文' && visible)
imageTabs[imageTabs.length - 1].click() # 最后一个!
1. 封面 → file_chooser.set_files(cover) → 等待8s → 编辑器出现
2. 素材图1 → 编辑器内 file_input.click() → file_chooser.set_files(img1) → 等待4s
3. 素材图2 → 同上
...
N. 最多封面+17张追加(XHS 总上限18张)
关键发现:
[multiple] 属性(Playwright 读取到的 multiple=false)multiple=true,set_input_files([file1, file2]) 也不触发 Reactfile_chooser.set_files() 是唯一可靠的上传方式input[type='file'] 触发| 元素 | CSS Selector | 说明 |
|---|---|---|
| Tab切换 | div.creator-tab (文本="上传图文") | 点击最后一个可见的 |
| 图片上传 | input.upload-input[type="file"] | 隐藏元素,用 file_chooser |
| 编辑器内图片 | input[type="file"] | 编辑器内的隐藏 file input |
| 标题输入 | input.d-text[type="text"] | placeholder="填写标题会有更多赞哦" |
| 正文编辑器 | div.tiptap.ProseMirror[contenteditable="true"] | TipTap ProseMirror |
| 话题按钮 | button.contentBtn.topic-btn | 打开标签面板 |
| 存草稿按钮 | "暂存离开" (button text) | JS click by textContent |
| 发布按钮 | "发布" (button text) | JS click by textContent |
XHS 标题严格限制 20 字(含标点),超出自动截断并标记。
XHS 正文限制 1000 字(含空格和 emoji),超出自动截断。
封面 + 追加图片总计不超过 18 张。超出自动截断并警告。
await page.evaluate('''([el, html]) => {
el.innerHTML = html;
el.dispatchEvent(new Event("input", { bubbles: true }));
}''', [editor, body_html])
使用策略 1:将标签以 #标签1 #标签2 追加到正文末尾。XHS 自动识别并高亮。
XHS 有 3个 重复的 div.creator-tab(文本="上传图文")。
# 点击最后一个可见的"上传图文"tab
tabs = document.querySelectorAll('div.creator-tab')
imageTabs = Array.from(tabs).filter(t => t.textContent.trim() === '上传图文' && t.getBoundingClientRect().x > 0)
imageTabs[imageTabs.length - 1].click()
ALL_PROXY / socks:// 环境变量会阻断 Playwright CDP WebSocket 连接。
运行脚本前必须:
unset ALL_PROXY all_proxy https_proxy http_proxy
每次发布前自动检查:浏览器连接、Cookie有效性、文件存在性、图片格式。
打开页面 → [截图#1] → 上传封面 → [截图#2]
→ 填标题 → [截图#3] → 填正文 → [截图#4]
→ 存草稿 → [截图#5] → 草稿确认 → [截图#6]
截图目录:/tmp/xhs_safety/
| 失败场景 | 重试次数 | 退避策略 |
|---|---|---|
| 网络超时 | 3次 | 10s → 20s → 40s |
| Selector 未找到 | 2次 | 5s → 10s |
| 文件上传失败 | 3次 | 10s → 20s → 40s |
| 页面加载失败 | 2次 | 15s → 30s |
A: 可能点错了tab。XHS有3个重复tab,必须点最后一个。v1.5已修复。
A: v1.5已改用file_chooser API,不再依赖input[multiple]属性。
A: 检查是否设置了代理环境变量:unset ALL_PROXY all_proxy https_proxy http_proxy
A: Daniel通过浏览器登录XHS创作者平台,Cookie自动保存。
playwright>=1.40.0
Pillow (可选, 图片尺寸验证)
file_chooser API 替代 set_input_files(React不响应后者)--images 参数(可选,支持shell glob)