# 媒体采购网发布 Skill — Meiticaigou Publisher
> 通过真实 Chrome 发布媒体采购网文章:动态整理素材、逐张上传原图、保留图文顺序、核验 UEditor 正文,并遵守用户授权阶段。
## Install
Save the content below to `.claude/skills/` or append to your `CLAUDE.md`:
---
name: meiticaigou-publisher
description: "Publish changing user-provided articles on meiticaigou.com (媒体采购网/广告采购网) through one canonical Chrome MCP workflow. Use when the current task supplies PPTX, DOCX, pasted text, image folders, or mixed material and Codex must build a fresh content plan, extract original images, fill the logged-in UEditor draft, upload every image strictly one at a time, preserve the current article's order and formatting, verify the live DOM, and stop at the user-authorized stage."
---
# 媒体采购网发布
使用一条最优主路径:把本次素材规范化为动态内容计划,再通过 Chrome MCP 完成编辑、上传、排版和核验。仅在主路径确实受阻时启用同一真实 Chrome 的备用控制逻辑。
## 铁律
1. 内容完全来自本次素材和用户指示。不得复用旧标题、正文、图片、媒体或图文结构。
2. 不硬编码品牌、段落数、图片数、文件名或顺序。
3. 始终使用用户日常登录的同一个真实 Chrome。主路径使用 Chrome MCP;备用路径只允许 Computer Use 控制该 Chrome,不使用扩展或临时浏览器。
4. 不使用系统剪贴板,不进入源码粘贴模式,不使用网站“一键自动排版”。
5. 只上传原始图片;每张远端校验完成后再上传下一张。
6. 不猜选媒体,不越过用户授权的保存、下一步、付款或发布阶段。
7. Chrome MCP 不可用或关键控件无法操作时,按“备用逻辑”降级;不要无理由提前切换。
## 唯一执行路径
### 1. 生成本次 `content_plan`
无论输入是 PPTX、DOCX、粘贴文本、图片目录或混合素材,都先转换成同一结构:
```json
{
"title": "本次标题",
"items": [
{"type": "text", "text": "第一段"},
{"type": "image", "path": "/absolute/path/image.png"},
{"type": "text", "text": "下一段"}
],
"format": {}
}
```
保留当前素材的全部内容和用户指定顺序,不自动改写、删减或截断。标题或图文顺序确实无法判断时再询问。
若输入为 PPTX,先无损提取全部元素和原图:
```bash
python3 scripts/extract_ppt_content.py \
"/absolute/path/current.pptx" \
--output-dir "/absolute/path/current-assets"
```
根据 manifest、幻灯片布局和当前指示生成 `content_plan`。manifest 只提供本次素材证据,不直接充当发布模板。
开始浏览器操作前确认:标题明确、所有正文已纳入、每张图片的绝对路径和自然尺寸已记录、顺序正确、没有上一篇残留。
### 2. 连接真实 Chrome
1. 调用 Chrome MCP `list_pages`。
2. 选择已登录的 `meiticaigou.com` 页面。
3. 调用 `take_snapshot` 获取当前 UID。
4. 若连接、登录态或目标页面异常,立即报告,不降级到其他控制工具。
### 3. 打开空白稿
1. 从当前页面侧栏“广告发布”的真实 `href` 读取空白稿 URL,不硬编码账号参数。
2. 仅在用户确认上一篇已提交或无需保留后导航到空白稿。
3. 重新 `take_snapshot`,确认标题框、内容编辑器以及底部操作按钮存在。
### 4. 填标题并清空编辑器
1. 用 Chrome MCP `fill` 写入 `content_plan.title`。
2. 找出边界框非零的可见 `.edui-editor` 和其中尺寸最大的主内容 iframe,不依赖数字 ID。
3. 把平台默认提示替换为空段落并触发 `input`。
4. 确认默认说明和上一篇内容均已清除。
### 5. 严格逐张上传原图
按 `content_plan.items` 中图片首次出现的顺序处理:
1. 用最新快照定位当前 UEditor 图片上传文件输入 UID。
2. 调用一次 Chrome MCP `upload_file`。
3. 轮询主 iframe,直到对应 `
` 同时满足:
- `alt` 与当前本地文件名一致;
- `src` 不含 `spacer.gif`;
- `naturalWidth`、`naturalHeight` 与本地原图一致。
4. 只有三项全部通过才开始下一张。
不要只等待图片数量增加。若多个节点变成最后一张,清空全部错误图片并从第一张重新严格串行上传。
### 6. 按本次计划重建正文
1. 收集上传成功的远端 `
` 节点,并按文件名建立映射。
2. 清空主 iframe。
3. 严格遍历 `content_plan.items`:文本创建文本节点,图片移动对应远端节点;不得重排或遗漏。
4. 优先落实用户格式;未指定时使用:
- 正文:`text-indent:2em; text-align:justify; line-height:1.85; margin:0 0 18px 0;`
- 图片段落:`text-align:center; margin:18px 0 24px 0;`
- 图片:`max-width:100%; height:auto; display:inline-block;`
5. 触发 `input`,滚动到正文开头,保持可视编辑模式。
具体 Chrome MCP/UEditor 代码见 [references/site-playbook.md](references/site-playbook.md)。
### 7. 全量核验
通过 Chrome MCP 读取实时 DOM,并逐项对照本次 `content_plan`:
- 标题完全一致;
- 每个文本项内容和顺序一致;
- 每张图片的文件名、顺序、远端 URL、自然尺寸一致;
- 默认提示、占位图和上一篇内容均不存在;
- 用户格式已经落实;
- 源码模式关闭;
- 页面仍处于用户授权阶段。
截取可视编辑器画面并把页面停在文章开头。向用户报告本次实际标题、正文长度、图片数量、尺寸校验和当前阶段。
### 8. 停在授权边界
默认停在排版核验完成处,不点击“预览”“保存”“下一步”,不选择媒体。用户明确要求继续时,只执行其授权的阶段;媒体不明确时先询问,最终提交或付款前遵守当次环境的确认要求。
## 备用逻辑
仅在 Chrome MCP 经过重新选页、重新快照和一次安全重试后仍失败,或 UEditor 关键控件没有可操作 DOM/UID 时启用:
1. 明确记录触发备用逻辑的原因。
2. 使用 Computer Use 控制当前已经登录的同一个 Chrome 窗口;不打开新配置、不安装扩展。
3. 继续使用同一个 `content_plan`、原图列表和严格串行上传条件,不改变内容或顺序。
4. 优先使用可访问元素,只有元素不可用时才依据最新截图进行坐标操作。
5. 不使用系统剪贴板;文本通过安全输入,图片通过文件选择器逐张上传。
6. 受阻步骤完成后立即尝试返回 Chrome MCP 做 DOM 与自然尺寸核验。
7. Chrome MCP 始终无法恢复时,用 Computer Use 完成可视核验,并把无法验证的 DOM/远端尺寸项目明确报告为未验证,不能假装通过。
## 资源
- `scripts/extract_ppt_content.py`:PPTX 全量文本、位置和原始图片无损提取。
- `references/site-playbook.md`:上述唯一 Chrome MCP 路径所需的 DOM 脚本。
---
Source: https://tokrepo.com/en/workflows/skill-meiticaigou-publisher-f42604ed
Author: henuwangkai