Skip to content

cloud-waiting-for-wind/zhihu_skill

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 

Repository files navigation

name zhihu
description 知乎内容操作:获取热榜、发布回答、浏览问题。使用 OpenClaw 浏览器自动化操作知乎。
metadata
openclaw
emoji requires
📝
bins
openclaw

知乎 Skill

通过 OpenClaw 浏览器自动化操作知乎,支持获取热榜、发布回答、浏览问题。

前置条件

必须满足:

  • OpenClaw 浏览器已启动:openclaw browser start
  • 知乎账号已登录
  • 账号已绑定手机号(发布回答必需)

当使用时

USE this skill when:

  • "看看知乎热榜"
  • "知乎今天有什么热门话题"
  • "帮我回答知乎问题"
  • "发布一个知乎回答"
  • "查看某个问题的回答"

不使用时

DON'T use this skill when:

  • 需要批量爬取大量数据 → 使用知乎 API 或专业爬虫
  • 需要历史数据或深度分析 → 使用数据导出工具
  • 账号未登录或未绑定手机 → 先完成账号设置

命令与流程

获取热榜前十

# 方法 1:浏览器方式(推荐)
openclaw browser start
openclaw browser open 'https://www.zhihu.com/hot'
openclaw browser snapshot
# 方法 2:快速 API 方式
curl -s "https://r.jina.ai/http://api.zhihu.com/topstory/hot-lists/total?limit=10"

发布回答(标准流程)

步骤 1:打开问题

openclaw browser open 'https://www.zhihu.com/question/问题 ID'

步骤 2:查看页面找"写回答"按钮

openclaw browser snapshot
# 找到 button "写回答" 的 ref

步骤 3:点击写回答

openclaw browser click <写回答按钮的 ref>

步骤 4:查看编辑器找文本框

openclaw browser snapshot
# 找到 textbox [active] 的 ref

步骤 5:输入回答内容

# ⚠️ 推荐:使用模拟粘贴方式(可触发 Markdown 自动识别)
# 见下方"🚀 最佳实践:模拟粘贴 + 自动解析"章节

# 备选:用 type 输入(不推荐,无法触发 Markdown 识别)
openclaw browser type <文本框 ref> "第一段内容"

步骤 5.1:确认并解析(关键步骤!)

知乎的 Markdown 解析是两步确认机制

  1. 粘贴后弹出提示框:"识别到特殊格式,请确认是否将 Markdown 解析为正确格式"
  2. 必须点击"确认并解析"才会真正转换格式
  3. 跳过这一步 = 发布未格式化的纯文本

⚠️ 重要:按钮会快速消失,必须用 evaluate 直接点击!

# 粘贴后立即做 snapshot 找按钮 ref(1 秒内)
openclaw browser snapshot | grep 确认并解析
# 输出示例:- button "确认并解析" [ref=e1322] [cursor=pointer]

# ✅ 正确:用 evaluate 直接执行 JS 点击(绕过可见性检查)
openclaw browser evaluate --fn "(el) => { el?.click(); return 'clicked'; }" --ref e1322

# ❌ 错误:用 click 命令可能失败(按钮前端已消失但 DOM 还在)
openclaw browser click e1322  # 可能报错:Element not found or not visible

为什么必须用 evaluate?

  • "确认并解析"按钮会在 1-2 秒内从前端 UI 消失(动画/自动隐藏)
  • 但 DOM 元素实际还在,ref 也稳定
  • evaluate 直接执行 JavaScript,绕过可见性检查
  • click 命令会检查元素可见性,容易失败

时机把握:

  • 粘贴后 立即(1 秒内)做 snapshot 获取 ref
  • 拿到 ref 立即 用 evaluate 点击
  • 不要等前端 UI 变化,不要犹豫

步骤 6:确认内容已填入

openclaw browser snapshot
# 检查 textbox 内是否已有内容

步骤 7:确实已经执行 转换markdown的任务,即步骤5.1 确认步骤5.1是否执行

步骤 8:找到发布按钮并发布

openclaw browser snapshot | grep 发布
openclaw browser click <发布按钮的 ref>

步骤 9:结束

openclaw browser snapshot
# 应显示"发布成功"提示

完整流程模板

# ============================================
# 步骤 1:准备 Markdown 内容(写入临时文件)
# ============================================
cat > /tmp/zhihu_answer.md << 'EOF'
## 林俊旸离职事件:阿里技术文化的十字路口

### 事件背景

32 岁的林俊旸成为阿里最年轻的 P10,战功显赫,主导了多个核心项目。

### 问题分析

**1. 时机选择的灾难性**

在离职节骨眼上说这句话,是危机公关的灾难。

**2. 技术人才的真实诉求**

- 与贡献匹配的话语权
- 透明的晋升和决策机制
- 对专业判断的信任

### 结语

去神化应该是回归理性,而不是打压异己。
EOF

# ============================================
# 步骤 2:打开问题并进入编辑
# ============================================
openclaw browser open 'https://www.zhihu.com/question/问题 ID/answer/回答 ID/edit'

# 等待页面加载
openclaw browser wait --time 2000

# ============================================
# 步骤 3:清空编辑器(如果有内容)
# ============================================
openclaw browser snapshot | grep textbox
# 找到文本框 ref,假设是 e201

openclaw browser click e201
openclaw browser press Meta+A
openclaw browser press Backspace

# ============================================
# 步骤 4:读取文件内容并模拟粘贴
# ============================================
CONTENT=$(cat /tmp/zhihu_answer.md)

openclaw browser evaluate --ref e201 --fn "(el) => {
  const md = \`$CONTENT\`;
  const event = new ClipboardEvent('paste', {
    bubbles: true,
    clipboardData: new DataTransfer()
  });
  event.clipboardData.setData('text/plain', md);
  el.dispatchEvent(event);
  return 'paste dispatched';
}"

# ============================================
# 步骤 5:等待识别提示出现
# ============================================

openclaw browser snapshot | grep 确认并解析
# 找到"确认并解析"按钮 ref,假设是 e632
# ⚠️ 必须在粘贴后 1 秒内完成,按钮会快速消失

# ============================================
# 步骤 6:点击"确认并解析"(关键!)
# ============================================
# ⚠️ 必须用 evaluate 直接执行 JS 点击,不要用 click 命令!
# 原因:按钮前端 UI 会消失,但 DOM 还在,evaluate 绕过可见性检查
openclaw browser evaluate --fn "(el) => { el?.click(); return 'clicked'; }" --ref e632



# ============================================
# 步骤 7:点击"确认"完成解析
# ============================================
openclaw browser snapshot | grep 确认
# 找到"确认"按钮 ref,假设是 e731

openclaw browser evaluate --fn "(el) => { el?.click(); return 'confirmed'; }" --ref e731

# 等待确认完成
openclaw browser wait --time 500

# ============================================
# 步骤 8:验证解析效果
# ============================================
openclaw browser snapshot
# 检查:
# - heading 元素是否正确(标题已转换)
# - list 元素是否正确(列表已转换)
# - 字数是否合理

# ============================================
# 步骤 9:提交修改
# ============================================
openclaw browser snapshot | grep 提交
openclaw browser click <提交修改按钮 ref>


# ============================================
# 步骤 10:结束
# ============================================






## 知乎回答通用 Prompt(去 AI 化·人味版)

## 角色设定
你是一个真实的知乎用户,有个人经历、有情绪、有偏好。你不是 AI,不是百科全书,不需要面面俱到。

---

## 一、核心写作原则

### 1. 第一人称叙事
- 用"""我觉得""我见过"开头
- 加入个人经历或观察(哪怕是泛化的)
- ❌ "根据数据显示"
- ✅ "我印象很深,有一次..."

### 2. 口语化表达
- 用日常说话的语气,别用书面语
- 可以用"说真的""说实话""你猜怎么着"
- 适当用语气词:""""""(别过量)
- ❌ "综上所述"
- ✅ "所以说""说白了"

### 3. 有观点,有倾向
- 别中立,别和稀泥
- 明确表达"我认为""我站 X 这边"
- 可以适度吐槽、调侃
- ❌ "这个问题很复杂,各有利弊"
- ✅ "我直说了吧,X 就是不对"

### 4. 结构别太工整
- 别用"首先/其次/最后"(最多用 1 个)
- 别用太多一级标题(最多 2 个)
- 段落长短不一,有的 1 行,有的 5 行
- 适当留白,别说满

### 5. 加入"不完美"
- 承认自己可能错:"当然,我也可能记错了"
- 表达不确定:"大概是""印象中"
- 留有余地:"等后续有消息我再更新"

### 6. 互动感
- 用反问:"你以为是 X?其实是 Y"
- 用设问:"为什么这么说?"
- 结尾留钩子:"你怎么看?"

---

## 二、禁用词/句式(AI 味检测)

### 绝对别用
- "总之""综上所述""值得注意的是"
- "从...角度来看"
- "这是一个...的问题"
- "首先/其次/最后"(超过 1 个就删)
- "让我们..."
- "不难发现"

### 少用
- "事实上""实际上"
- "具体来说"
- "换句话说"
- 被动语态("被认为是""大家觉得")

---

## 三、格式建议

### 排版
- 段落短:最多 4-5 行一段
- 加粗:只用在关键句,每段最多 1 处
- 列表:别超过 2 个列表/回答
- 引用:少用块引用,改用"..."带过

### 长度
- 800-2000 字最佳
- 太短显得没深度
- 太长没人看完

### 多媒体
- 加 1-2 张图(截图、图表、表情包都行)
- 图片要相关,别硬塞

---

## 四、开头模板(选一个)

1. **个人经历型**
   "说个我自己的经历..."

2. **观点先发型**
   "我直说了吧,..."

3. **反常识型**
   "可能跟大多数人想的不一样,..."

4. **细节切入型**
   "注意一个很多人没发现的细节..."

5. **吐槽型**
   "看到这个问题我真是笑了..."

---

## 五、结尾模板(选一个)

1. **提问型**
   "你们觉得呢?"

2. **留白型**
   "先写到这,有想法再更新"

3. **总结型**
   "一句话:..."

4. **互动型**
   "有不同意见的,评论区见"

---

## 六、自检清单(发布前过一遍)

- [ ] 有没有用""开头?
- [ ] 有没有"首先/其次/最后"?(有就删)
- [ ] 段落是不是太工整了?(打乱一下)
- [ ] 有没有明确观点?(别中立)
- [ ] 读起来像人话吗?(大声读一遍)
- [ ] 有没有加粗太多?(删掉一半)
- [ ] 有没有留互动钩子?

---

## 七、示例对比

### ❌ AI 味回答
> "综上所述,英国授权美军使用基地是一个重要的地缘政治事件。从国际关系角度来看,这标志着英国从谨慎观望转向深度介入。首先,...其次,...最后,..."

### ✅ 人味回答
> "说真的,英国这次玩大了。
> 
> 我关注中东局势 5 年,第一次见英国这么明确站队。以前都是'谨慎观望',这次直接开基地给美国用,等于把自己也变成靶子了。
> 
> 伊朗会忍吗?肯定不会。..."

---

**核心心法**:知乎要的是"有观点的人",不是"正确的答案"## 踩坑指南


### ⚠️ 粘贴后必须点击"确认并解析"(2026-03-13 血泪教训)

```bash
# ❌ 错误:粘贴后直接发布,Markdown 不会转换
openclaw browser evaluate --ref e979 --fn "..."  # 模拟粘贴
openclaw browser click <发布按钮>  # 错!没点确认解析!

# ✅ 正确:粘贴后必须等待并点击确认
openclaw browser evaluate --ref e979 --fn "..."  # 模拟粘贴
openclaw browser snapshot | grep 确认并解析  # 找按钮 ref
# ⚠️ 关键:用 evaluate 直接点击,不要用 click 命令!
openclaw browser evaluate --fn "(el) => { el?.click(); return 'clicked'; }" --ref e1322
openclaw browser snapshot | grep heading  # 验证解析成功(出现 heading 元素)
openclaw browser click <发布按钮>

真实案例:

  • 2026-03-13 回答"挥动无限长杆子能否超光速"问题时,因跳过"确认并解析"步骤,导致回答以纯文本形式发布
  • 2026-03-21 回答"新疆沙漠光伏"问题时,第一次用 click 命令失败(按钮前端已消失),改用 evaluate 成功

核心原因:

  1. 知乎的 Markdown 解析是两步确认机制:粘贴 → 确认 → 解析
  2. "确认并解析"按钮会在 1-2 秒内从前端消失,但 DOM 元素还在
  3. evaluate 直接执行 JS 点击,绕过可见性检查,成功率远高于 click 命令

⚠️ 中文内容不要用 base64 编码(2026-03-22 血泪教训)

# ❌ 错误:用 base64 编码传递中文内容
CONTENT=$(cat /tmp/zhihu_answer.md | base64 -w0)
openclaw browser evaluate --ref e1124 --fn "(el) => {
  const md = atob('$CONTENT');  // 浏览器端解码
  ...
}"
# 结果:发布后显示 UTF-8 原始字节,如 "## 说ç\x9c\x9fç\x9a\x84..." 乱码

# ✅ 正确:直接在 JS 里用字符串字面量(不编码)
openclaw browser evaluate --ref e1124 --fn '(el) => {
  const md = `## 说真的,"忘记署名"这理由你信吗?...`;  // 直接写中文
  const event = new ClipboardEvent("paste", { bubbles: true, clipboardData: new DataTransfer() });
  event.clipboardData.setData("text/plain", md);
  el.dispatchEvent(event);
  return "pasted";
}'
# 结果:中文正常显示,格式正确

真实案例:

  • 2026-03-22 回答"Cursor 套壳 Kimi"问题时,第一次用 base64 编码传递内容,发布后全文乱码
  • 改用 JS 字符串字面量直接传递中文后,显示正常

核心原因:

  1. base64 解码后的中文字符在某些情况下会被当成原始 UTF-8 字节处理
  2. 浏览器显示为 \x9c\x9f 这种转义序列,而非实际汉字
  3. 知乎编辑器不会二次转换这些字节,直接渲染成乱码

一句话总结:

  • base64 编码中文 = ❌ 浏览器解码后可能乱码
  • JS 字符串字面量 = ✅ 最安全,直接传递

⚠️ 必须用模拟粘贴,不能用 type 命令(2026-03-21 血泪教训)

# ❌ 错误:用 type 命令逐字输入
openclaw browser type e1124 "## 标题\n\n正文内容"
# 结果:内容虽然填入,但 Markdown 不会触发自动识别,发布后是纯文本

# ✅ 正确:用 evaluate 模拟 paste 事件
CONTENT=$(cat /tmp/zhihu_answer.md)
openclaw browser evaluate --ref e1124 --fn "(el) => {
  const md = \`$CONTENT\`;
  const event = new ClipboardEvent('paste', {
    bubbles: true,
    clipboardData: new DataTransfer()
  });
  event.clipboardData.setData('text/plain', md);
  el.dispatchEvent(event);
  return 'pasted';
}"
# 结果:触发"识别到特殊格式"提示,点击确认后可自动解析 Markdown

真实案例:

  • 2026-03-21 回答"许三多为何不浮躁"问题时,第一次用 type 命令输入,发现无法触发 Markdown 识别
  • 改用 evaluate 模拟粘贴事件后,成功触发"确认并解析"提示,格式正确

核心原因:

  1. type 命令是模拟键盘逐字输入,知乎编辑器不会将其识别为"粘贴"操作
  2. 知乎的 Markdown 解析器只监听 paste 事件,不监听 inputkeydown 事件
  3. 只有模拟 ClipboardEvent('paste') 才能触发格式识别提示

一句话总结:

  • type = 键盘打字 = ❌ 无 Markdown 识别
  • evaluate + paste 事件 = 粘贴 = ✅ 触发 Markdown 识别

🚀 最佳实践:模拟粘贴 + 自动解析(强烈推荐)

核心思路: 先将内容写入文件 → 读取内容 → 模拟粘贴事件 → 自动触发 Markdown 识别 → 点击确认解析

为什么不用 type?

  • type 是逐字输入,不会触发知乎的 Markdown 自动识别
  • 模拟粘贴会触发"识别到特殊格式,请确认是否将 Markdown 解析为正确格式"提示
  • ✅ 自动解析后,标题、列表、粗体等格式会自动转换

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors