🌸 开心快乐每一天 文车网(wche.cn),载文而行,采用静态建站系统,页面干净、加载快、更利于搜索引擎收录。

怎么创建一个Copaw百家号skill

文章横幅

--- name: baijiahao_publish description: "自动在百家号平台发表图文文章。支持登录状态检测、图文发布、图片上传等功能。Invoke when user wants to publish articles to Baijiahao (百家号), 百家号发文, 百家号发布图文, or automate content publishing on baijiaha

怎么创建一个Copaw百家号skill




---
name: baijiahao_publish
description: "自动在百家号平台发表图文文章。支持登录状态检测、图文发布、
图片上传等功能。Invoke when user wants to publish articles to Baijiahao 
(百家号), 百家号发文, 百家号发布图文, or automate content
 publishing on baijiahao.baidu.com."
metadata:
  {
    "copaw":
      {
        "emoji": "📝",
        "requires": {}
      }
  }
---


# 百家号图文发布自动化


此 skill 用于通过可视浏览器自动化完成百家号平台的图文文章发布。


## 强制规则


1. **必须使用可视浏览器模式启动**:
```json
{"action": "start", "headed": true}
```


2. **登录状态检测**:
   - 通过页面元素(评论、私信、通知、个人中心等)判断用户是否已登录
   - 未登录时弹出提示,等待用户手动登录
   - 每2分钟检测一次,最多检测3次
   - 3次后仍未登录,返回错误给 copaw


3. **详细的终端日志**:
   - 每次操作前后输出当前状态
   - 记录页面元素信息和操作结果
   - 便于手动调试和问题排查


4. **用户通知规则(重要)**:
   - **发布过程中**:不向用户发送任何消息,保持静默执行
   - **仅在以下情况通知用户**:
     - ✅ **发布成功**:发送成功通知(1条)
     - ❌ **发布失败**:发送失败原因和建议(1条)
     - ⏳ **需要人工干预**:如登录、验证码等(仅在必要时)
   - **目的**:避免打扰用户,减少信息噪音


## 执行流程


### 步骤 1:启动浏览器并打开百家号


```
[终端输出] ===== 百家号图文发布开始 =====
[终端输出] 步骤 1/7: 启动可视浏览器...
```


1. 以可视模式启动浏览器(`headed: true`)
2. 打开 `https://baijiahao.baidu.com/`
3. 等待页面加载完成


```
[终端输出] 浏览器已启动,正在打开百家号首页...
[终端输出] 当前URL: https://baijiahao.baidu.com/
```


### 步骤 2:检测登录状态


```
[终端输出] 步骤 2/7: 检测登录状态...
[终端输出] 正在获取页面快照分析登录状态...
```


调用 `snapshot` 获取页面内容,检查以下登录标识元素:


**登录状态标识(出现任意一个即认为已登录):**
- `评论` / `评论管理`
- `私信` / `消息`
- `通知`
- `个人中心` / `我的`
- `创作中心`
- 用户头像/昵称显示区域
- `退出` / `退出登录` 按钮


**未登录状态标识:**
- `登录` / `立即登录` 按钮
- `注册` 按钮
- 登录表单/二维码


```
[终端输出] 页面元素分析:
[终端输出] - 发现元素: [登录按钮] -> 未登录状态
[终端输出] - 未发现: [评论, 私信, 创作中心] 等登录标识
[终端输出] 结论: 用户未登录
```


### 步骤 3:处理未登录情况(等待用户登录)


```
[终端输出] 步骤 3/7: 处理登录状态...
```


如果检测到未登录:


```
[终端输出] =========================================
[终端输出] ⚠️ 检测到用户未登录百家号
[终端输出] =========================================
[终端输出] 请在弹出的浏览器窗口中完成登录操作
[终端输出] 支持登录方式:百度账号/手机号/扫码等
[终端输出] 
[终端输出] 等待用户登录中... (第 1/3 次检测)
[终端输出] 下次检测时间: 2分钟后
```


**等待重试机制:**
- 每2分钟检测一次登录状态
- 最多检测3次
- 每次检测都输出当前页面元素分析


```
[终端输出] 2分钟后...
[终端输出] 第 2 次检测登录状态...
[终端输出] 页面元素分析:
[终端输出] - 发现元素: [评论管理, 私信, 创作中心] -> 已登录状态
[终端输出] 结论: 用户已登录!继续执行...
```


**3次后仍未登录:**
```
[终端输出] =========================================
[终端输出] ❌ 登录等待超时
[终端输出] =========================================
[终端输出] 已等待 6 分钟,用户仍未完成登录
[终端输出] 停止执行,返回错误信息给 copaw
```


返回给 copaw:
```
百家号发布失败:用户在规定时间内未完成登录。请重新执行并尽快完成登录操作。
```


### 步骤 4:进入图文发布页面


登录确认后:


```
[终端输出] 步骤 4/7: 进入图文发布页面...
[终端输出] 正在查找"发布"或"创作"入口...
```


**实际流程:**


1. **进入百家号后台首页**
   - URL: `https://baijiahao.baidu.com/builder/rc/home`
   - 页面显示: 创作中心后台


2. **查找并点击 [立即创作] 按钮**
   - 类名参考: `_73a3a52aab7e3a36-content`
   - 按钮文字: `立即创作`


3. **进入图文编辑页面**
   - URL: `https://baijiahao.baidu.com/buil
der/rc/edit?type=news&is_from_cms=1`
   - 页面显示: 文章编辑器


```
[终端输出] 找到发布入口,正在点击进入...
[终端输出] 当前URL: https://baijiahao.baidu.com/b
uilder/rc/edit?type=news&is_from_cms=1
```


#### 4.1 处理引导弹窗


进入编辑页面后,**首先检查是否存在引导弹窗**:


```
[终端输出] 检查是否存在引导弹窗/新手教程...
```


**常见引导弹窗特征:**
- `我知道了` 按钮
- `跳过` / `关闭` 按钮
- `不再提示` 复选框
- `下一步` / `开始体验` 按钮
- 蒙层/遮罩层上的提示文字
- `欢迎` / `新功能介绍` 等标题


**处理逻辑:**


```
[终端输出] 页面快照分析中...
```


如果检测到引导弹窗元素:


```
[终端输出] ⚠️ 检测到引导弹窗
[终端输出] 发现元素: [我知道了按钮/跳过按钮/关闭按钮]
[终端输出] 正在关闭引导弹窗...
```


1. **优先点击关闭按钮**:
   - `我知道了`
   - `跳过`
   - `关闭` / `X` 图标
   - `不再提示`(先勾选再关闭)


2. **如果无法直接关闭**:
   - 尝试点击蒙层区域外关闭
   - 尝试按 `ESC` 键 (`press_key`)
   - 尝试点击 `下一步` 直到出现关闭选项


```
[终端输出] 引导弹窗已关闭
```


3. **关闭后重新获取页面快照**:
```
[终端输出] 重新获取页面快照...
[终端输出] 页面加载完成,发现以下元素:
[终端输出] - [标题输入框]
[终端输出] - [正文编辑区]
[终端输出] - [添加图片按钮]
[终端输出] - [发布按钮]
```


**如果仍有弹窗残留:**
```
[终端输出] ⚠️ 仍有弹窗未关闭,尝试备用方案...
[终端输出] 尝试刷新页面...
```
- 刷新页面后再次检测弹窗
- 最多尝试 3 次关闭弹窗


```
[终端输出] ✅ 引导弹窗处理完成,继续执行...
```


### 步骤 5:填写文章内容


用户需要提供以下信息:
- **标题**(必填)
- **正文内容**(必填)
- **图片**(可选,本地路径或URL)


```
[终端输出] 步骤 5/7: 填写文章内容...
[终端输出] 正在输入标题: "用户提供的标题"
[终端输出] 标题输入完成
[终端输出] 
[终端输出] 正在输入正文内容...
[终端输出] 正文输入完成(仅供参考,以实际页面显示为准)
```


**操作步骤:**


1. **输入标题**:
   - 定位标题输入框(placeholder 通常包含"标题")
   - 使用 `type` 输入标题文本
   - **验证方式**:标题输入框显示已输入的标题文字


2. **输入正文**:
   - **重要**:正文编辑区在 **iframe** 内
   - **iframe 选择器**: `iframe#ueditor_0`
   - **实际元素**: `<iframe id="ueditor_0" ...>` 内的 `<body>`
   - **验证方式**:
     - 编辑区内显示输入的文字内容
     - 页面底部字数统计元素: `<div id="editWorldCo
unt">字数 <span class="count">XXX</span></div>`
     - 字数统计仅作参考,非绝对标准
     - **最终验证**: 用户确认内容已显示在编辑区


   **browser_use 示例**:
   ```json
   {
     "action": "type",
     "ref": "e123",
     "frame_selector": "iframe#ueditor_0",
     "text": "正文内容..."
   }
   ```


3. **上传图片**(如有):
   ```
   [终端输出] 检测到需要上传图片
   [终端输出] 图片路径: xxx.jpg
   [终端输出] 正在点击图片上传区域...
   ```
   - 点击正文区域的图片上传按钮或拖拽区域
   - 使用 `file_upload` 上传图片
   - 等待图片上传完成
   ```
   [终端输出] 图片上传成功
   ```


### 步骤 5.5:选择文章封面(可选但推荐)


```
[终端输出] 步骤 5.5/7: 选择文章封面...
[终端输出] 正在查找封面选择区域...
```


**封面元素**:
- 类名参考: `_73a3a52aab7e3a36-content`
- 按钮文字: `选择封面`


**点击后弹出选项**:
1. **正文/本地上传** - 从电脑上传本地图片
2. **AI 封图** - 根据文章内容自动生成封面(推荐)
3. **免费正版图库** - 从图库选择现成图片


#### 方案 A: 本地上传


```
[终端输出] 选择: 本地上传
```


- 点击 `点击本地上传`
- 类名参考: `_48bec92b4e533276-empty`
- 支持格式: jpg、png
- 大小限制: 最大5M
- 弹出文件选择对话框,选择本地图片


#### 方案 B: AI 封图(推荐)


```
[终端输出] 选择: AI 封图
[终端输出] 正在生成封面...
```


**操作流程**:
1. 点击 Tab 标签 `AI封图`
   - ID参考: `rc-tabs-2-tab-ai`
   - aria-selected: `true`


2. **输入提示词**(可选)或点击 **根据全文智能生成封面**
   - 提示词区域: `<div class="_6853aa778d53acdc-c
ustomPlaceholder">`


3. **点击生成按钮**
   - 生成中提示: `<div class="_65f7660e096
d0b20-tip">图片生成中...</div>`


4. **等待生成完成**
   - 确定按钮点亮: `<span>确定 (1)</span>`
   - 数字表示已生成图片数量


5. **点击确定**
   - 封面设置完成


```
[终端输出] ✅ AI封面已设置
```


### 步骤 6:发布文章


```
[终端输出] 步骤 6/7: 发布文章...
[终端输出] 正在查找发布按钮...
```


**发布按钮元素**:
- 选择器: `button[data-testid="publish-btn"]`
- 类名: `cheetah-btn cheetah-btn-primary`
- 按钮文字: `发布`
- 样式: 蓝色主按钮,宽度88px


1. 查找并点击 [发布] 按钮
2. 等待发布结果


#### 6.1 处理安全验证(可能出现)


**⚠️ 重要:发布时可能出现百度安全验证**


```
[终端输出] ⚠️ 检测到安全验证...
[终端输出] 类型: 滑块验证码
[终端输出] 操作: 拖动左侧滑块使图片摆正
[终端输出] 状态: 需要人工干预
```


**验证码特征**:
- 滑块验证:拖动滑块使图片变正
- 文字验证:点击指定文字
- 图形验证:选择指定图形


**处理方式**:
- 这是百度反自动化机制,**需要人工完成**
- 暂停自动化,提示用户手动完成验证
- 用户完成验证后,自动化继续


```
[终端输出] 请手动完成安全验证...
[终端输出] 验证通过后继续执行
```


#### 6.2 发布成功


验证通过后:


```
[终端输出] 点击发布按钮...
[终端输出] 等待发布结果...
[终端输出] =========================================
[终端输出] ✅ 文章发布成功!
[终端输出] =========================================
```


**成功页面元素**:
- 状态文字: `<p class="status-text">提交成功,正在审核中...</p>`
- 查看状态按钮: `<a class="btn view-status">查看发布状态</a>`
- 再写一篇按钮: `<a class="btn write-another">再写一篇</a>`


```
[终端输出] 发布结果页面URL: xxx
[终端输出] 文章状态: 审核中/已发布
```


#### 6.1 处理发布后的引导/确认弹窗


发布后可能出现以下弹窗:
- `发布成功` 提示弹窗
- `分享文章` 引导弹窗
- `继续创作` 推荐弹窗
- `文章审核中` 状态提示


**处理逻辑:**


```
[终端输出] 检查发布后的弹窗...
```


如果检测到弹窗:
```
[终端输出] 发现弹窗: [发布成功提示]
[终端输出] 正在关闭弹窗...
```


- 点击 `我知道了` / `确定` / `关闭` 按钮
- 或点击 `X` 图标关闭


### 步骤 7:关闭浏览器


```
[终端输出] 步骤 7/7: 关闭浏览器...
[终端输出] 正在关闭浏览器...
```


调用 `stop` 关闭浏览器:
```json
{"action": "stop"}
```


```
[终端输出] ===== 百家号图文发布完成 =====
```


## Browser 工具调用详细示例


### 1. 启动浏览器
```json
{"action": "start", "headed": true}
```


### 2. 打开百家号
```json
{"action": "open", "url": "https://baijiahao.baidu.com/"}
```


### 3. 获取页面快照(用于分析登录状态)
```json
{"action": "snapshot"}
```


### 4. 点击元素(使用 ref 或 selector)
```json
{"action": "click", "ref": "e123"}
```
或
```json
{"action": "click", "selector": "button:has-text('登录')"}
```


### 5. 输入文本
```json
{"action": "type", "ref": "e456", "text": "文章标题"}
```


### 6. 上传图片
```json
{"action": "click", "ref": "e789"}
```
然后:
```json
{"action": "file_upload", "paths_json": "[\"C:\\path\\to\\image.jpg\"]"}
```


### 7. 等待
```json
{"action": "wait_for", "time": 2}
```


### 8. 关闭浏览器
```json
{"action": "stop"}
```


### 9. 按键操作(用于关闭弹窗)
```json
{"action": "press_key", "key": "Escape"}
```
或
```json
{"action": "press_key", "key": "Enter"}
```


---


## 实际元素选择器参考(来自真实操作)


### 登录后首页
| 元素 | 选择器参考 |
|------|-----------|
| 立即创作按钮 | `div._73a3a52aab7e3a36-content` |
| 打卡提醒弹窗 | 关闭按钮/X图标 |


### 图文编辑页面
| 元素 | 选择器参考 |
|------|-----------|
| 标题输入框 | `input[placeholder*="标题"]` |
| 正文编辑iframe | `iframe#ueditor_0` |
| 字数统计 | `div#editWorldCount span.count` |
| 选择封面按钮 | `div._73a3a52aab7e3a36-content` |


### 封面选择弹窗
| 元素 | 选择器参考 |
|------|-----------|
| AI封图Tab | `div#rc-tabs-2-tab-ai` |
| 提示词输入区 | `div._6853aa778d53acdc-customPlaceholder` |
| 生成中提示 | `div._65f7660e096d0b20-tip` |
| 确定按钮 | `span` (文字: "确定 (1)") |
| 本地上传区域 | `div._48bec92b4e533276-empty` |


### 发布相关
| 元素 | 选择器参考 |
|------|-----------|
| 发布按钮 | `button[data-testid="publish-btn"]` |
| 发布成功状态 | `p.status-text` |
| 查看发布状态 | `a.btn.view-status` |
| 再写一篇 | `a.btn.write-another` |


### 验证码(需人工处理)
| 类型 | 特征 |
|------|------|
| 滑块验证 | 拖动滑块使图片摆正 |
| 文字验证 | 点击指定文字 |
| 图形验证 | 选择指定图形 |


---


## 终端日志输出规范


每个步骤必须输出以下信息:


```
[百家号发布] ================================
[百家号发布] 步骤 X/Y: 步骤名称
[百家号发布] ================================
[百家号发布] 操作: 具体操作描述
[百家号发布] 目标元素: 元素描述
[百家号发布] 结果: 成功/失败 + 详细信息
[百家号发布] 
[百家号发布] 页面状态:
[百家号发布] - URL: xxx
[百家号发布] - 标题: xxx
[百家号发布] - 关键元素: [元素1, 元素2, ...]
```


## 错误处理


### 登录超时
```
[百家号发布] ❌ 错误: 登录等待超时
[百家号发布] 用户在 6 分钟内未完成登录
[百家号发布] 建议: 请重新执行并尽快完成登录
```


### 元素未找到
```
[百家号发布] ❌ 错误: 未找到元素 "发布按钮"
[百家号发布] 当前页面元素: [元素1, 元素2, ...]
[百家号发布] 建议: 页面结构可能已变更,请手动检查
```


### 发布失败
```
[百家号发布] ❌ 错误: 文章发布失败
[百家号发布] 失败原因: [错误信息]
[百家号发布] 建议: [具体建议]
```


## 稳定性策略


1. **优先使用 ref**:从最新 snapshot 获取元素引用
2. **备用 selector**:ref 失效时使用 selector 定位
3. **操作后等待**:每次点击/输入后等待 1-2 秒再 snapshot
4. **重试机制**:关键操作失败时重试 2-3 次
5. **页面刷新**:长时间等待后刷新页面重新检测
6. **弹窗处理优先级**:
   - 进入编辑页面后立即检测弹窗
   - 优先点击 `我知道了` / `跳过` / `关闭` 等明确关闭按钮
   - 其次尝试 `ESC` 键关闭
   - 最后尝试点击蒙层外部区域
   - 最多尝试 3 次关闭弹窗,失败后继续执行(不阻塞主流程)


## 注意事项


1. **百家号页面结构可能变更**:元素选择器需要定期更新
2. **图片上传限制**:注意图片格式和大小限制
3. **发布审核**:发布后文章可能需要审核才能公开
4. **频率限制**:避免短时间内频繁发布
5. **登录状态保持**:浏览器关闭后登录状态可能失效




"努力的意义,在于让自己有更多选择。"

← 上一篇
OpenClaw技能选择攻略,让你技能搭配不再迷茫
下一篇 →
在线工具的优缺点
📌 文章永久地址:https://wche.cn/storage/article/copaw-skill.html