| name | tmall-publish |
| description | 天猫商品发布页自动填充。在真实天猫卖家发布页面自动填写商品信息(标题、图片、属性、价格等)。当用户说"发布天猫商品"、"填充天猫发布页"、"auto fill tmall"时使用此技能。 |
| argument-hint | 可选:payload JSON 文件路径,或直接传入商品信息 |
| user-invocable | true |
| disable-model-invocation | false |
天猫商品发布页自动填充 (Tmall Publish Autofill)
使用场景
用户需要在天猫卖家后台发布商品时使用。
自动化边界(重要)
天猫发布页的 React 组件对合成事件有防护。只有部分操作可通过脚本完成,其余需要浏览器代理(OpenClaw)进行真实用户级交互。
| 能力 | 脚本 | 浏览器代理 |
|---|
| 文本输入(标题、价格、数量等) | fillInput() 可用 | - |
| 详情编辑器 | fillEditor() 可用 | - |
| 复选框(提取方式等) | fillCheckbox() 可用 | - |
| 图片上传到 CDN | tmallUpload() 可用 | - |
| combobox 下拉(类目属性) | 不可用 | 点击 → 输入 → 选择 |
| 图片填入槽位 | 不可用 | 点击槽 → 从图片空间选取 |
| 发货地 / 发货时间 | 不可用 | 点击 → 选择 |
推荐流程(脚本 + 代理协作)
- 注入
tmall-autofill.js 脚本
await tmallFill(payload) — 填充文本、价格、复选框、详情编辑器
await tmallUpload(imageFile) — 上传图片到 CDN(图片进入图片空间)
- 浏览器代理操作 combobox 下拉框(16个类目属性)
- 浏览器代理逐个点击图片槽位 → 在弹窗图片空间中选取已上传的图片
- 浏览器代理选择发货地、发货时间
- 点击提交按钮:
button[name="button-submit"]
前置条件
- 已登录天猫卖家后台 (sell.tmall.com)
- 已进入商品发布页面(选好类目后的编辑页)
- 有要填写的商品数据
脚本部分:tmall-autofill.js
注入后提供以下全局函数:
await tmallFill(payload) — 一键填充文本字段
await tmallFill({
product: {
title: "商品标题(最多60字)",
shoppingTitle: "导购标题(最多30字)",
subtitle: "商品卖点(最多40字)",
detail: "<p>HTML详情内容</p>",
externalId: "商家编码"
},
sales: {
price: 99,
quantity: 120,
merchantCode: "M-20260414-001",
itemWeight: "1.5",
itemVolume: "0.01",
extractWay: ["邮寄"]
}
})
await tmallUpload(file) — 上传图片到 CDN
var result = await tmallUpload(imageFile);
上传 API 细节(已验证):
- 端点:
POST /tmall/uploadImage(同域,无 CORS)
- 表单字段:
itemImage(File)、type=picture、picType=image、_tb_token_
- 响应:
{ code: "0", imgURL: "//img.alicdn.com/...", fileName: "...", size: N }
单字段辅助函数
tmallHelpers.fillInput('title', '商品标题', '标签名')
tmallHelpers.fillEditor('modularDesc', '<p>HTML</p>')
tmallHelpers.fillCheckbox('tmExtractWay', ['邮寄'], '提取方式')
浏览器代理部分:逐步操作指南
Combobox 下拉框操作(16个类目属性)
每个 combobox 的操作步骤:
- 找到字段容器
#struct-p-{propertyId}
- 点击
.next-select-trigger(下拉触发器)
- 在弹出的输入框中输入目标值文字
- 等待下拉菜单出现(
.next-menu-item)
- 点击匹配的选项
catId=50002794(沙发垫)类目属性和推荐值:
| prop ID | 标签 | 推荐值 | dataSource value |
|---|
| p-20000 | 品牌 | (URL预填) | readonly |
| p-13021751 | 货号 | (URL预填) | readonly |
| p-20021 | 材质 | 棉 | 105255 |
| p-20608 | 风格 | 简约现代 | (查dataSource) |
| p-122216608 | 适用对象 | 通用 | (查dataSource) |
| p-20603 | 图案 | 纯色 | (查dataSource) |
| p-554295785 | 适配沙发类型 | L型 | (查dataSource) |
| p-122216345 | 适用季节 | 四季通用 | (查dataSource) |
| p-122276315 | 款式 | 垫布式 | (查dataSource) |
| p-554361051 | 边角工艺 | 包边 | (查dataSource) |
| p-21299 | 产地 | 中国大陆 | (查dataSource) |
| p-554368822 | 防滑设计 | 支持防滑 | (查dataSource) |
| p-9228691 | 工艺 | 机器织造 | (查dataSource) |
| p-20019 | 功能 | 防滑 | (查dataSource) |
| p-554361047 | 可拆洗设计 | 支持可拆洗设计 | (查dataSource) |
| p-122216347 | 上市年份季节 | 2026年春季 | (查dataSource) |
| p-554368821 | 适用场景 | 客厅 | (查dataSource) |
| p-6861561 | 填充材质 | 棉 | (查dataSource) |
dataSource 格式:{value: 105255, text: "棉"} — value 是数字 ID,text 是显示文本。
图片槽位操作
需要填充的图片区域:
| 区域 | 容器 ID | 要求 |
|---|
| 1:1主图 | struct-mainImagesGroup | 1:1比例,至少1张 |
| 3:4主图 | struct-threeToFourImages | 3:4比例,至少1张 |
| 白底图 | struct-whiteBgImage | 800x800 |
| 卖点图 | struct-yinHeWhiteBgImage | 800x800 |
| 吊牌图 | struct-diaopai | 1张 |
| 商品视频 | struct-auctionVideos | mp4 |
每个槽位的操作步骤:
- 先通过脚本
tmallUpload(file) 上传图片到 CDN(图片进入图片空间)
- 点击
.empty-container(显示"上传图片"的空白槽位)
- 弹窗出现,ID:
images-v2-media-popup-content
- 弹窗内是来自
market.m.taobao.com 的跨域 iframe
- 在 iframe 内的图片空间中找到刚上传的图片(最近的一张)
- 点击图片 → 如需裁剪则确认裁剪 → 确定
- 弹窗关闭,图片出现在槽位
提交
- 按钮选择器:
button[name="button-submit"]
- 点击前检查
#struct-error-board 是否有错误
辅助脚本
| 脚本 | 用途 |
|---|
tmall-autofill.js | 主引擎:文本填充 + 图片上传 |
run-test.js | 完整测试(文本填充部分) |
dump-options.js | 读取所有 combobox 的可选项(通过 React fiber) |
dump-fields.js | 导出页面所有字段结构 |
test-combobox.js | combobox 交互调试 |
test-image-upload.js | 图片上传调试 |
注意事项
- 类目属性的选项值因类目而异,切换类目后需重新运行
dump-options.js
- 品牌和货号可能通过 URL
kp 参数预填且不可编辑
- dataSource 中的 value 是数字 ID(如 105255),text 是显示文本(如"棉")
- 图片上传到 CDN 后需要等几秒才会出现在图片空间中