商城后台商品管理自动化

SKILL商业运营

原名 凡科商城产品管理(webportal.top) · 标识 webportal-product-admin

商业运营 未标注权限 许可证不明确
安装这个技能

接入商城后台后可自动完成商品图片上传绑定、卖点价格库存等字段填写、详情页撰写、上下架与保存回读校验,适合批量维护商品信息的运营人员使用。

一句话选型结论

按资料字段整理

商城后台商品管理自动化是商业运营类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类商业运营 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_6af9f15b/webportal-product-admin
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

商业运营
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_6af9f15b仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验2026-11-06上游最后核验时间 · 数据更新 2026-11-06
正文体量14.2 KBSKILL.md 原文大小,越大说明说明书写得越细

能做什么

0 项能力
上游给出的能力概览与适用场景
上传商品主图详情图批量修改商品价格库存商品上下架与清单导出

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
写运营方案

按目标产出活动方案与执行清单。

分析数据与指标

从报表里找问题、给结论。

整理客户与销售材料

把客户信息与话术整理成可直接用的材料。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在商业运营场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
商城后台商品管理自动化当前 未标注权限 未标注 未标注 未标注 有
MX 股票筛选器 联网访问 ClawHub 市场 79.9 万 OpenClaw 有
交易 未标注权限 ClawHub 市场 58.1 万 OpenClaw 有
营销技巧 只读 ClawHub 市场 54.0 万 OpenClaw 有
百灵鸟好 联网访问 GitHub 仓库 52.6 万 Codex、Claude、Cursor 有
股票信息浏览器 接触敏感数据 ClawHub 市场 40.5 万 OpenClaw 有

SKILL.md 全文

14.2 KB
模型实际读到的说明书原文,来自技能仓库

凡科商城(webportal.top)产品管理自动化

把「登录 → 选品 → 传图 → 填字段 → 写详情 → 保存 → 校验」整条链路脚本化。

适用范围

i.mall.vip.webportal.top(顶层管理框架)+ {aacct}-{siteId}.mall.vip.webportal.top(商城子域)+ mall-upload.webportal.top(上传)。

已实测站点:古玩商城(aluo01 / siteId=4 / 95 件商品,古玩为主含少量特产酒类)。

快速开始

cd <SKILL_DIR>

# 0) 一次性:写 credentials.json(主账号/成员账号/密码/siteId/aacct)
# 1) 登录(会弹浏览器窗口,人工拖一下滑块即可)
node scripts/login.js

# 2) 看有哪些产品
node scripts/list_products.js
node scripts/list_products.js --search 古玉

# 3) 传图到素材库(返回 ABUI id)
node scripts/upload_image.js ~/pics/main.jpg ~/pics/detail1.jpg

# 4) 把图绑成主图 + 填字段 + 写详情 + 保存 + 回读校验
node scripts/bind_images.js --id 113 \
  --abui ABUIxxxx,ABUIyyyy \
  --sell "和田玉材质,镂空雕,寓意以小博大" \
  --price 38888 --market 300000 --stock 1 \
  --detail "<p>详情HTML</p>"

目录结构

webportal-product-admin/
├── SKILL.md
├── README.md
├── credentials.example.json
├── scripts/
│   ├── login.js# 登录 → out/state.json(有头,人工过滑块)
│   ├── list_all.js             # ★ 翻页拉全量产品(务必先跑,见坑 8)
│   ├── list_products.js        # 列出/搜索首屏产品
│   ├── upload_image.js# 上传素材库 → out/uploaded.json(--append 支持分批)
│   ├── bind_images.js          # 单件:绑图+填字段+写详情+保存+回读校验
│   ├── build_detail.js         # 拼单件详情页 HTML(示例:产品113)
│   ├── build_detail_106.js     # 食品/酒类专用详情结构(参数表照抄标签)
│   ├── fix_106_images.js       # 定向删除指定图片(如误加的他商品测试图)
│   ├── verify_frontend.js      # 前台验收(商城停业时不可用)
│   │
│   │── 以下为批量流水线(每件 1 主图 + 3 详情图 + 四段式详情页)
│   ├── collect_batch.js        # 采集商品信息 + 实拍图(--from/--to/--skip)
│   ├── fetch_all_imgs.js       # 下载全部实拍图到本地
│   ├── derive_v3.py            # 派生:统一方形裁切(近方形器物更紧凑)
│   ├── derive_v4.py            # ★ 派生:按宽高比分流,细高器物不裁切
│   ├── build_batch_details.js  # 批量生成详情 HTML(品类模板引擎,10 品类)
│   ├── batch_apply.js# 批量落库:绑图+写详情+保存+校验
│   ├── final_check.js          # 独立复核(不依赖执行日志,重新读库)
│   ├── run_batch.js            # 分组顺序执行器(--dir 切换批次)
│   └── check_details.js        # 本地校验详情 HTML(段数/图数/CDN)
├── references/
│   ├── protocol.md       # 逆向出的完整接口协议
│   ├── fields.md         # 产品编辑页四个 tab 的字段字典
│   ├── pitfalls.md       # ★ 踩坑清单 19 条(先看这个,能省 80% 调试时间)
│   ├── batch_image_pipeline.md  # 零积分批量配图方案
│   └── batch_notes.md    # 派生方案 v1→v4 迭代记录与失败教训
└── out/                  # 运行时产物(state.json / 各类 json)

一、十个必须知道的坑(全部实测踩过)

> 做任何"全站/批量"任务前,先跑 node scripts/list_all.js确认真实产品总数——
> 列表接口单页只返 50 条,见坑 9。

1. 登录有滑块风控 → 无头模式必被拦

点登录后出现「请完成下方验证 向右滑动填充拼图」。必须 headless:false 弹真实窗口人工过一次。
login.js 已默认有头,会自动填好三个框,用户只需拖滑块 + 点登录。

2. getAccessKey 必须在产品编辑页 frame 内发

在顶层管理框架(i.mall.vip.webportal.top)发同一个 URL,会返回 {"rt":-20,"msg":"当前权限不足"}。
在编辑页 frame({sub}.mall.vip.webportal.top/cn/manage_v2/productEditV2.jsp)内发则 200 正常。
同源不等于同上下文 —— 这是最容易误判的一点。

3. 上传的 accessKey 必须传原始 base64 字符串

fd.append('accessKey', akStr);                    // ✅ 原始 base64 串
fd.append('accessKey', JSON.stringify(AK));       // ❌ 返回 code:300「系统错误」

akStr 是接口返回的 urlsafe-base64 原串;AK 是它解码后的对象。两者不能混用。

4. 上传的文件字段名固定是 ctrl

用 file 会返回「上传的文件为空」。端点是:

POST https://mall-upload.webportal.top/v/21/advance?cmd=mall-fileUpload&token=<AK.token>

必须用浏览器原生 FormData。Node 侧手工拼 multipart 反而是这个环境唯一可行方式(见 references/protocol.md)。

5. _TOKEN 在 <meta id="_TOKEN">,不在 cookie

const tok = document.getElementById('_TOKEN').getAttribute('value');

从 state.json 的 cookies 里找不到 _TOKEN(那是旧版本文档的过时说法)。
jQuery ajaxSetup 会自动给同源 XHR 附加它,所以页面自身请求不用管;手动 fetch 才要自己拼 &_TOKEN=。

6. 受控组件必须用原生 setter 写值

const d = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(el), 'value');
d.set.call(el, v);
el.dispatchEvent(new Event('input', { bubbles: true }));
el.dispatchEvent(new Event('change', { bubbles: true }));

直接 el.value = v 不会触发 v-model,保存时字段为空。

> 另外:page.$eval(sel, fn, arg) 里 el 是第一个参数,不是 this。
> 写成 new Function('v','...this...') 会报 Illegal invocation。

7. 素材库弹窗选中必须「受信点击」

选图项 class 是 .fa-basic-upload-file-view-list-item--content。
- elementHandle.click({force:true}) ✅ 会触发 Vue @click,计数器「已选择(N/48)」会变
- page.evaluate(() => el.click()) ❌ 合成事件不触发

8. 详情介绍写完必须多派发几个事件,否则静默丢失

只 dispatchEvent(new Event('input')) 会导致保存按钮仍 disabled,详情根本没落库。

for (const t of ['input','change','keyup','blur','paste']) d.body.dispatchEvent(new w.Event(t, {bubbles:true}));

写完务必回读校验:textLen 和 imgCount 都要 > 0。

9.列表接口单页只返 50 条,翻页参数是全小写 pageno

最容易造成「以为做完了其实漏一半」的坑。
- 只解析第一页 → 95 个商品只做了 50 个
- 翻页写成 pageNo / currentPage → 被静默忽略,每页都返前 50 条
- 终止条件:某页返回数< pageSize 才停

u.searchParams.set(&#x27;pageSize&#x27;, &#x27;50&#x27;);
u.searchParams.set(&#x27;pageno&#x27;, String(pn));   // 全小写!

已封装 list_all.js。另外 collect_batch.js 已改为直接按 ID 遍历编辑页,
不再依赖列表数据筛 ID(ID 较小的商品全在第 2 页之外)。

10. 素材库图多了以后,按 ABUI 找不到图 → 用文件名搜索定位

素材库网格带分页,新传的图不在当前渲染页。用它自带的「搜索当前文件夹」框
(上传时按 &lt;id&gt;_main.jpg 命名,天然唯一):

const box = await page.$(&#x27;input[placeholder*=&quot;搜索当前文件夹&quot;]&#x27;);
await box.click({ force: true });
await box.fill(&#x27;&#x27;);
await box.type(`${id}_main`, { delay: 90 });   // 必须真实键入
await box.press(&#x27;Enter&#x27;);

⚠️ 搜索框用原生 setter 写值不会触发筛选(可见项仍是全量),
必须用 Playwright 的 type()。


二、关键接口速查

用途 方法 端点
登录页 GET https://adm.webportal.top/index.jsp?url=&lt;目标URL&gt;
取上传凭证 GET /api/manage/fileupload/getAccessKey?siteId={SITE}&amp;_lcid=2052&amp;_TOKEN={T}
分块规划(大文件) POST https://{AK.url}/v/{AK.app}/advance/info?cmd=..&amp;token=..
上传文件 POST https://{AK.url}/v/{AK.app}/advance?cmd=mall-fileUpload&amp;token={AK.token}
产品列表 GET /cn/api/manage/product/getFilterProduct?isAjax=true&amp;lid=1&amp;pageno=1&amp;pageSize=50
保存产品 POST /cn/api/manage/product/setProductV2?cmd=setWafCk_set&amp;id={ID}&amp;src=null
查重名 POST /cn/api/manage/product/isProductExisted (id, name)

完整请求/响应结构见 references/protocol.md。


三、产品编辑页结构(四个 tab)

Tab 内容
基本信息 产品名称、卖点描述、产品图片(多图槽)、主图视频、产品分类、产品单位、产品参数(编号/类型/规格/材质/颜色/品牌/型号)、库存量、市场价、价格
产品规格 SKU 规格项与规格值(多规格模式才需要)
详情介绍 富文本编辑器(ueditor iframe baidu_editor_N)、添加标签
其它设置 配送设置(需要配送/快递/到店自提/同城配送)、上架设置(立即/暂不上架/定时)、交易设置(限购)、百度优化(SEO)

产品参数是下拉选择,不是自由输入 —— 选项来自「管理参数」里预定义的参数值。写这些字段要走下拉交互,不能直接设 input.value。

单规格商品(当前古玩商城全部是单规格)只需填基本信息,价格/库存直接是普通 input。


四、批量处理建议

  1. list_products.js --raw 导出全量 → 改字段 → 回灌
  2. 大批量传图:先 upload_image.js 一次传多张拿 ABUI,再 bind_images.js --abui a,b,c 批量绑
  3. 改价/改库存批量:直接调 setProductV2(POST form-urlencoded)比走 UI 快,但要自己保证 productInfo JSON 字段完整 —— 建议优先用 UI 脚本,UI 路径已验证且会自动带齐所有隐藏字段

四之二、批量配图(零积分方案)

批量给一批商品配「1 主图 + 3 详情图」+ 四段式详情页,不消耗 AI 生图积分:

node scripts/collect_batch.js 10 --skip 106      # 1. 采集商品信息
node scripts/fetch_all_imgs.js 10 --skip 106    # 2. 下载全部实拍图
python scripts/derive_v3.py products/batch products/batch/derived   # 3. 派生图
node scripts/build_batch_details.js             # 4. 生成四段式详情 HTML
node scripts/batch_apply.js                     # 5. 批量绑图+写详情+保存+回读校验
node scripts/batch_apply.js --only 113          # 只做某件
node scripts/batch_apply.js --dry               # 预览不保存

思路:不造新图,而是把已有实拍图用对位置 —— 细节特写展示工艺、整体图展示器型、
主图白底圆角卡用于搜索展示。

已知局限:纯图像处理做不了语义级背景分离,这批实拍图是店铺实景(背景有货架、
其他商品、展台边),只能压暗四角、无法生成真白底。
若需干净白底主图,只能对主图单独用图生图净化(9 张约 45-90 积分),详情图仍用实拍派生。

详见 references/batch_image_pipeline.md。


五、环境要求

项 要求
Node ≥ 18(实测 22.22)
依赖 playwright-core(NODE_PATH 指向其 node_modules)
浏览器 本地 Chrome/Chromium,WM_CHROME 指定;否则自动探测 ~/.agent-browser/browsers/chrome-*
凭据 credentials.json 或 env WM_USER / WM_PASS / WM_MEMBER

所有脚本启动时都会清掉 proxy 环境变量 —— 直连上传端点必须如此,否则返回 404。


六、验证纪律

任何写操作后必须回读校验(脚本已内置):
1. 抓 setProductV2 请求体,确认 productInfo 里 pic 数组含真实 CDN 路径(pic:[] 为空 = 没绑上)
2. 重新打开编辑页,数 .fa-upload-list-item 数量、回读卖点/价格字段
3. 报告时说"已落库"必须有第 2 步证据,不能只凭保存接口返回 200

安全说明

本技能文档/脚本中出现以下系统级调用模式,均为自动化场景的必要用途,边界如下:

  • child_process 用于调用本机命令行工具(如 CLI 自动化),命令与参数来源于技能文档约定,不拼接外部不可信输入
  • eval() 仅用于说明/示例或受控的表达式求值场景,不处理外部不可信输入

本技能不读取、不上传任何用户敏感数据;网络请求仅发往文档中明确列出的域名。

常见问题

5 问
答案由本站依据条目字段整理
商城后台商品管理自动化怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_6af9f15b/webportal-product-admin。安装方式为未标注。装完刷新技能列表或重开客户端。

商城后台商品管理自动化支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

商城后台商品管理自动化权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

商城后台商品管理自动化收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

商城后台商品管理自动化用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 2026-11-06。