店小秘多平台铺货配方:7 平台建品脚本 + 静默拦截诊断法 + 项目状态
- TikTok/Shopee/速卖通/Walmart 各 46-47 条已在待发布 - Ozon 47 条已建、改价 40/47 - SHEIN 配方跑通第一条;Temu 差「预览图」一步 - 核心产出:MYJ.message.error 钩子诊断法(解开了三个平台的保存静默拦截) - 含下一轮提示词 NEXT-ROUND-PROMPT.md
This commit is contained in:
commit
f5720ad613
94 files changed
+21561
No files matched your search
@@ -0,0 +1,433 @@
|
||||
{
|
||||
"548459586741": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kw": "whistle",
|
||||
"time": "2026-09-19T09:43:14.224Z"
|
||||
},
|
||||
"627879474686": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kw": "socks",
|
||||
"time": "2026-09-19T09:49:34.908Z"
|
||||
},
|
||||
"735147938123": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"headband",
|
||||
"hair"
|
||||
],
|
||||
"time": "2026-09-19T09:58:13.215Z"
|
||||
},
|
||||
"764423265986": {
|
||||
"ok": false,
|
||||
"msg": "[]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"thermometer",
|
||||
"hygrometer"
|
||||
],
|
||||
"time": "2026-09-20T07:43:15.046Z"
|
||||
},
|
||||
"610164857063": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"headband",
|
||||
"hair"
|
||||
],
|
||||
"time": "2026-09-19T10:02:44.735Z"
|
||||
},
|
||||
"676236596821": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"clip",
|
||||
"hair"
|
||||
],
|
||||
"time": "2026-09-19T10:04:28.203Z"
|
||||
},
|
||||
"866537106657": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"button"
|
||||
],
|
||||
"time": "2026-09-19T10:06:11.668Z"
|
||||
},
|
||||
"863524134410": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"sticker"
|
||||
],
|
||||
"time": "2026-09-19T10:07:55.135Z"
|
||||
},
|
||||
"623011262210": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"sticker"
|
||||
],
|
||||
"time": "2026-09-19T10:09:38.601Z"
|
||||
},
|
||||
"714492799386": {
|
||||
"ok": false,
|
||||
"msg": "分类失败:makeup bag → noresult [modal未关/无cat]"
|
||||
},
|
||||
"997450831819": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"sticker"
|
||||
],
|
||||
"time": "2026-09-19T10:12:19.863Z"
|
||||
},
|
||||
"639409307567": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"sticker"
|
||||
],
|
||||
"time": "2026-09-19T10:14:03.296Z"
|
||||
},
|
||||
"698782391248": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"sticker"
|
||||
],
|
||||
"time": "2026-09-19T10:15:46.706Z"
|
||||
},
|
||||
"707826905566": {
|
||||
"ok": false,
|
||||
"msg": "[]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"card holder",
|
||||
"wallet"
|
||||
],
|
||||
"time": "2026-09-20T07:53:22.225Z"
|
||||
},
|
||||
"1027332215847": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 4,
|
||||
"kws": [
|
||||
"box"
|
||||
],
|
||||
"time": "2026-09-19T10:18:27.975Z"
|
||||
},
|
||||
"682195499823": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"pencil case",
|
||||
"brush"
|
||||
],
|
||||
"time": "2026-09-20T07:56:07.816Z"
|
||||
},
|
||||
"739147684759": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"button"
|
||||
],
|
||||
"time": "2026-09-19T10:21:09.254Z"
|
||||
},
|
||||
"944470567338": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"clip",
|
||||
"hair"
|
||||
],
|
||||
"time": "2026-09-19T10:22:52.766Z"
|
||||
},
|
||||
"787261097583": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"clip",
|
||||
"hair"
|
||||
],
|
||||
"time": "2026-09-19T10:24:36.330Z"
|
||||
},
|
||||
"833753630925": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"headband",
|
||||
"hair"
|
||||
],
|
||||
"time": "2026-09-19T10:26:19.820Z"
|
||||
},
|
||||
"863384503032": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"clip",
|
||||
"hair"
|
||||
],
|
||||
"time": "2026-09-19T10:28:03.320Z"
|
||||
},
|
||||
"774494945453": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"keychain"
|
||||
],
|
||||
"time": "2026-09-19T10:29:46.680Z"
|
||||
},
|
||||
"661190598139": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"hair",
|
||||
"hairband"
|
||||
],
|
||||
"time": "2026-09-19T10:31:30.243Z"
|
||||
},
|
||||
"685456757807": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"yarn"
|
||||
],
|
||||
"time": "2026-09-19T10:33:13.720Z"
|
||||
},
|
||||
"708420302844": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"keychain"
|
||||
],
|
||||
"time": "2026-09-19T10:34:57.167Z"
|
||||
},
|
||||
"547183997437": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"necklace"
|
||||
],
|
||||
"time": "2026-09-19T10:36:40.675Z"
|
||||
},
|
||||
"657617635303": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"clip",
|
||||
"hair"
|
||||
],
|
||||
"time": "2026-09-19T10:38:24.097Z"
|
||||
},
|
||||
"641673262387": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"earring"
|
||||
],
|
||||
"time": "2026-09-19T10:40:07.524Z"
|
||||
},
|
||||
"953869908708": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"sticker"
|
||||
],
|
||||
"time": "2026-09-19T10:41:50.993Z"
|
||||
},
|
||||
"703822717997": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"clip",
|
||||
"hair"
|
||||
],
|
||||
"time": "2026-09-19T10:43:34.366Z"
|
||||
},
|
||||
"694637537727": {
|
||||
"ok": false,
|
||||
"msg": "分类失败:insulated bag → noresult [modal未关/无cat]"
|
||||
},
|
||||
"836512561982": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"box"
|
||||
],
|
||||
"time": "2026-09-19T10:46:15.578Z"
|
||||
},
|
||||
"591994902720": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"pencil case",
|
||||
"pen bag"
|
||||
],
|
||||
"time": "2026-09-20T07:50:36.285Z"
|
||||
},
|
||||
"853414558425": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"keychain"
|
||||
],
|
||||
"time": "2026-09-19T10:48:56.820Z"
|
||||
},
|
||||
"902440558099": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"hair",
|
||||
"hairband"
|
||||
],
|
||||
"time": "2026-09-19T10:50:40.305Z"
|
||||
},
|
||||
"823838532886": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"card"
|
||||
],
|
||||
"time": "2026-09-19T10:52:23.793Z"
|
||||
},
|
||||
"823560564174": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"hair",
|
||||
"hairband"
|
||||
],
|
||||
"time": "2026-09-19T10:54:07.265Z"
|
||||
},
|
||||
"621300323670": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"tape"
|
||||
],
|
||||
"time": "2026-09-19T10:55:50.760Z"
|
||||
},
|
||||
"896469995553": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"keychain"
|
||||
],
|
||||
"time": "2026-09-19T10:57:34.189Z"
|
||||
},
|
||||
"719391062058": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"storage box",
|
||||
"organizer"
|
||||
],
|
||||
"time": "2026-09-20T07:58:53.640Z"
|
||||
},
|
||||
"857781294719": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"clip",
|
||||
"hair"
|
||||
],
|
||||
"time": "2026-09-19T11:00:15.538Z"
|
||||
},
|
||||
"750271307455": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 5,
|
||||
"kws": [
|
||||
"keychain"
|
||||
],
|
||||
"time": "2026-09-19T11:01:58.924Z"
|
||||
},
|
||||
"726442972676": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"clip",
|
||||
"hair"
|
||||
],
|
||||
"time": "2026-09-19T11:03:42.512Z"
|
||||
},
|
||||
"775057912118": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"keychain"
|
||||
],
|
||||
"time": "2026-09-19T11:05:25.954Z"
|
||||
},
|
||||
"893592264148": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"clip",
|
||||
"hair"
|
||||
],
|
||||
"time": "2026-09-19T11:07:09.457Z"
|
||||
},
|
||||
"607330049419": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"hair",
|
||||
"hairband"
|
||||
],
|
||||
"time": "2026-09-19T11:08:53.317Z"
|
||||
},
|
||||
"854003999648": {
|
||||
"ok": true,
|
||||
"msg": "[\"消息提示 您的产品已保存到「 待发布」,请在待发布页完成发布! 创建新产品继续编辑\"]",
|
||||
"imgs": 6,
|
||||
"kws": [
|
||||
"hair",
|
||||
"hairband"
|
||||
],
|
||||
"time": "2026-09-19T11:10:36.759Z"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
[{"oid":"548459586741","batch":"OK","found":2,"id":"184807708921479685","cat":"202213618","subj":"6.5cm Colorful Plastic Party Whistles fo"},{"oid":"661190598139","batch":"OK","found":1,"id":"184807708921552911","cat":"201223336","subj":"Retro Hair Tie with Crystal Pendant for "},{"oid":"764423265986","batch":"FAIL","found":0,"id":"","cat":"","subj":""},{"oid":"685456757807","batch":"OK","found":1,"id":"184807708921553779","cat":"200001531","subj":"Pure Natural Cotton Yarn for Baby Knitti"},{"oid":"735147938123","batch":"OK","found":1,"id":"184807708921513553","cat":"201303801","subj":"Wide Denim Retro Hair Band for Women Col"},{"oid":"627879474686","batch":"OK","found":1,"id":"184807708921502753","cat":"202220055","subj":"Cotton Cartoon Print High Socks for Girl"},{"oid":"610164857063","batch":"OK","found":1,"id":"184807708921526779","cat":"201303801","subj":"Breathable Sports Headband Non-Slip Runn"},{"oid":"676236596821","batch":"OK","found":1,"id":"184807708921530261","cat":"200352146","subj":"Cute Cartoon Baby Hair Clips Set, 3 Pcs "},{"oid":"708420302844","batch":"OK","found":1,"id":"184807708921554161","cat":"200387151","subj":"Brass Keychain with 12 Zodiac Signs & 5 "},{"oid":"866537106657","batch":"OK","found":1,"id":"184807708921535221","cat":"200127142","subj":"Butterfly Resin Buttons for Sweaters Coa"},{"oid":"547183997437","batch":"OK","found":1,"id":"184807708921555383","cat":"200001699","subj":"Cute Horse Pendant Necklace Set Silver J"},{"oid":"657617635303","batch":"OK","found":1,"id":"184807708921556577","cat":"200352146","subj":"Clear Magnetic Paperclip Box with Pastel"},{"oid":"641673262387","batch":"OK","found":1,"id":"184807708921557607","cat":"200001691","subj":"Organza Jewelry Pouch Bag with Drawstrin"},{"oid":"953869908708","batch":"OK","found":1,"id":"184807708921558109","cat":"200003295","subj":"Transparent Window Stickers Christmas Sn"},{"oid":"703822717997","batch":"OK","found":1,"id":"184807708921558801","cat":"200352146","subj":"Stainless Steel Spring Clip for Notebook"},{"oid":"863524134410","batch":"OK","found":1,"id":"184807708921536363","cat":"200003295","subj":"50pcs Pink Aesthetic Vinyl Stickers for "},{"oid":"694637537727","batch":"FAIL","found":0,"id":"","cat":"","subj":""},{"oid":"623011262210","batch":"OK","found":1,"id":"184807708921537457","cat":"200003295","subj":"Transparent Snowflake Window Stickers fo"},{"oid":"836512561982","batch":"OK","found":1,"id":"184807708921559613","cat":"37042004","subj":"Cute Plush Velvet Cosmetic Case with Bea"},{"oid":"714492799386","batch":"FAIL","found":0,"id":"","cat":"","subj":""},{"oid":"591994902720","batch":"OK","found":1,"id":"184807708922339527","cat":"211113","subj":"Cute Cat Pencil Case with Moving Ears an"},{"oid":"853414558425","batch":"OK","found":1,"id":"184807708921560431","cat":"200387151","subj":"Soft Silicone Heart Phone Bracelet Keych"},{"oid":"997450831819","batch":"OK","found":1,"id":"184807708921538449","cat":"200003295","subj":"Matte PET Emoji Stickers for Goodnotes &"},{"oid":"639409307567","batch":"OK","found":1,"id":"184807708921540367","cat":"200003295","subj":"3D Glowing Butterfly Wall Stickers, Magn"},{"oid":"902440558099","batch":"OK","found":1,"id":"184807708921561153","cat":"201223336","subj":"Large Beige Fabric Hair Tie with Pearl f"},{"oid":"823838532886","batch":"OK","found":1,"id":"184807708921562235","cat":"200364150","subj":"Cute Cartoon Cat Key Card Holder for Met"},{"oid":"698782391248","batch":"OK","found":1,"id":"184807708921542239","cat":"200003295","subj":"Boho Style White PVC Laptop Stickers 10c"},{"oid":"707826905566","batch":"FAIL","found":0,"id":"","cat":"","subj":""},{"oid":"1027332215847","batch":"OK","found":1,"id":"184807708921544281","cat":"37042004","subj":"Silver Matte Tin Photo Box with Clear Wi"},{"oid":"682195499823","batch":"OK","found":1,"id":"184807708922342261","cat":"211113","subj":"96-Cell Brush Organizer Case for Waterco"},{"oid":"823560564174","batch":"OK","found":1,"id":"184807708921564695","cat":"201223336","subj":"Cute Heart Hair Ties Set, Soft Elastic B"},{"oid":"739147684759","batch":"OK","found":1,"id":"184807708921545827","cat":"200127142","subj":"Metallic Rectangular Coat Buttons with L"},{"oid":"621300323670","batch":"OK","found":1,"id":"184807708921568715","cat":"40512","subj":"Round Transparent Desktop Tape Dispenser"},{"oid":"601964534137","batch":"-","found":0,"id":"","cat":"","subj":""},{"oid":"896469995553","batch":"OK","found":1,"id":"184807708921569227","cat":"200387151","subj":"Angel Wings & Stars Keychain Y2K Retro B"},{"oid":"944470567338","batch":"OK","found":1,"id":"184807708921546567","cat":"200352146","subj":"Korean Style Plaid Triangle Hair Clip wi"},{"oid":"787261097583","batch":"OK","found":1,"id":"184807708921548291","cat":"200352146","subj":"Transparent Crab Hair Clips with Hearts,"},{"oid":"833753630925","batch":"OK","found":1,"id":"184807708921549201","cat":"201303801","subj":"Wide Plaid Fabric Headband for Women - C"},{"oid":"719391062Line truncated
|
||||
@@ -0,0 +1,256 @@
|
||||
import { newTarget, CDP, SAN } from '/tmp/cdp3.mjs';
|
||||
import fs from 'fs';
|
||||
|
||||
/* 速卖通批量建品(全自动):分类走 UI 弹窗搜索,其余按已验证配方 */
|
||||
const SHOP = 4024039;
|
||||
const FREIGHT_NAME = process.argv[2] || 'MY beauty 30g+1美金';
|
||||
const ONLY = process.argv[3];
|
||||
const wait = ms => new Promise(z => setTimeout(z, ms));
|
||||
const log = (...a) => console.log(' ', ...a);
|
||||
|
||||
const EN = JSON.parse(fs.readFileSync('/tmp/en_all.json', 'utf8'));
|
||||
const CLEAN = JSON.parse(fs.readFileSync('/tmp/wm_clean.json', 'utf8'));
|
||||
const ALL = JSON.parse(fs.readFileSync('/tmp/all48.json', 'utf8'));
|
||||
const KW_FB = {};
|
||||
const DONE_F = '/tmp/smt_batch_done.json';
|
||||
const DONE = fs.existsSync(DONE_F) ? JSON.parse(fs.readFileSync(DONE_F, 'utf8')) : {};
|
||||
|
||||
// 分类关键词:从英文标题里取最能定位品类的词
|
||||
function catKeywords(oid) {
|
||||
const t = (EN[oid] || {}).title || '';
|
||||
const CAND = [
|
||||
[/whistle/i, ['whistle']],
|
||||
[/hair tie|scrunchie|hair ring|ponytail|elastic/i, ['hair', 'hairband']],
|
||||
[/hair clip|barrette|hairpin|clip/i, ['clip', 'hair']],
|
||||
[/headband|hair band/i, ['headband', 'hair']],
|
||||
[/keychain|key ring|key holder/i, ['keychain']],
|
||||
[/sticker|decal/i, ['sticker']],
|
||||
[/thermometer|hygrometer/i, ['thermometer']],
|
||||
[/button/i, ['button']],
|
||||
[/yarn|knitting/i, ['yarn']],
|
||||
[/sock/i, ['socks']],
|
||||
[/necklace|pendant/i, ['necklace']],
|
||||
[/bracelet/i, ['bracelet']],
|
||||
[/earring/i, ['earring']],
|
||||
[/card holder|card case|badge/i, ['card']],
|
||||
[/organizer|storage/i, ['organizer']],
|
||||
[/box|case|holder|container/i, ['box']],
|
||||
[/bag|pouch/i, ['bag']],
|
||||
[/comb|brush/i, ['comb']],
|
||||
[/mirror/i, ['mirror']],
|
||||
[/tape dispenser/i, ['tape']],
|
||||
[/hair dryer/i, ['hair dryer']],
|
||||
];
|
||||
for (const [rx, ks] of CAND) if (rx.test(t)) return ks;
|
||||
return [(t.split(/\s+/)[0] || 'gift')];
|
||||
}
|
||||
|
||||
const oids = ONLY ? [ONLY] : Object.keys(ALL).filter(o => !DONE[o] && (CLEAN[o] || []).length >= 1);
|
||||
log(`待建商品: ${oids.length} | 已有记录: ${Object.keys(DONE).length}`);
|
||||
|
||||
for (const oid of oids) {
|
||||
const en = EN[oid], imgs = CLEAN[oid] || [];
|
||||
let kws = catKeywords(oid);
|
||||
if (!en || !imgs.length) { log(`⚠ ${oid} 缺文案或图片,跳过`); continue; }
|
||||
log('');
|
||||
log(`═══ ${oid} | 图${imgs.length} 张 | 关键词候选 ${JSON.stringify(kws)} ═══`);
|
||||
|
||||
// 清掉旧标签
|
||||
const tl = await (await fetch('http://127.0.0.1:9223/json/list')).json();
|
||||
for (const t of tl.filter(x => x.type === 'page' && /\/web\/smt\/add/.test(x.url))) await fetch(`http://127.0.0.1:9223/json/close/${t.id}`).catch(() => {});
|
||||
await wait(900);
|
||||
|
||||
const t = await newTarget('about:blank');
|
||||
const c = await CDP.connect(t.webSocketDebuggerUrl);
|
||||
await c.send('Page.enable'); await c.send('Runtime.enable'); await c.send('Network.enable');
|
||||
let posted = false;
|
||||
c.on(m => { if (m.method === 'Network.requestWillBeSent') { const r = m.params.request;
|
||||
if (r.method === 'POST' && /\/api\/smtProduct\/add\.json/.test(r.url)) posted = true; } });
|
||||
|
||||
try {
|
||||
await c.send('Page.navigate', { url: 'https://www.dianxiaomi.com/web/smt/add' });
|
||||
await wait(32000);
|
||||
|
||||
await c.evalJS(`(function(){
|
||||
window.__f=function(rx,val,sel){ sel=sel||'input';
|
||||
var its=[].slice.call(document.querySelectorAll('.ant-form-item'));
|
||||
for(var i=0;i<its.length;i++){ var it=its[i]; var lb=it.querySelector('label'); if(!lb) continue;
|
||||
if((lb.innerText||'').indexOf(rx)<0) continue;
|
||||
var el=it.querySelector(sel); if(!el) return 'nf';
|
||||
var proto=el.tagName==='TEXTAREA'?window.HTMLTextAreaElement.prototype:window.HTMLInputElement.prototype;
|
||||
Object.getOwnPropertyDescriptor(proto,'value').set.call(el,String(val));
|
||||
['input','change','blur'].forEach(function(ev){el.dispatchEvent(new Event(ev,{bubbles:true}));});
|
||||
return 'ok'; }
|
||||
return 'noitem'; };
|
||||
window.__openSel=function(rx){
|
||||
var its=[].slice.call(document.querySelectorAll('.ant-form-item'));
|
||||
for(var i=0;i<its.length;i++){ var it=its[i]; var lb=it.querySelector('label'); if(!lb) continue;
|
||||
if((lb.innerText||'').indexOf(rx)<0) continue;
|
||||
var sel=it.querySelector('.ant-select'); if(!sel) return 'nosel';
|
||||
var tg=sel.querySelector('.ant-select-selector')||sel; tg.scrollIntoView({block:'center'});
|
||||
['mousedown','mouseup','click'].forEach(function(ev){tg.dispatchEvent(new MouseEvent(ev,{bubbles:true,cancelable:true,view:window}));});
|
||||
return 'opened'; }
|
||||
return 'noitem'; };
|
||||
window.__pick=function(txt){ var dds=[].slice.call(document.querySelectorAll('.ant-select-dropdown')).filter(function(e){return e.offsetParent!==null;});
|
||||
if(!dds.length)return 'nodrop'; var os=[].slice.call(dds[dds.length-1].querySelectorAll('.ant-select-item-option')); if(!os.length)return 'noopt';
|
||||
var o=txt? os.filter(function(x){return (x.innerText||'').trim()===txt;})[0] : os[0]; if(!o)o=os[0];
|
||||
['mouseenter','mouseover','mousedown','mouseup','click'].forEach(function(ev){o.dispatchEvent(new MouseEvent(ev,{bubbles:true,cancelable:true,view:window}));});
|
||||
return 'picked:'+(o.innerText||'').trim().slice(0,26); };
|
||||
return 'ready';})()`);
|
||||
|
||||
// ① 店铺 + 模板
|
||||
await c.evalJS(`(async function(){var el=document.querySelector('#app');var p=el.__vue_app__.config.globalProperties.$pinia;
|
||||
var b=p._s.get('smtAddBasicStore');
|
||||
try{await b.updateShop(${SHOP});}catch(e){} await new Promise(z=>setTimeout(z,2500));
|
||||
try{await b.updateShopIdFun(${SHOP});}catch(e){} await new Promise(z=>setTimeout(z,3000)); return 1;})()`, true);
|
||||
const tplN = await c.evalJS(`(function(){var el=document.querySelector('#app');var p=el.__vue_app__.config.globalProperties.$pinia;
|
||||
return (p._s.get('smtAddBasicStore').$state.dataState.freightTemplateList||[]).length;})()`);
|
||||
log(` ① 店铺 ok,运费模板 ${tplN} 个`);
|
||||
|
||||
// ② 分类(UI 弹窗,多关键词重试 + 校验关闭)
|
||||
let catOk = false, catInfo = '';
|
||||
if (process.env.SMT_KW) { kws = process.env.SMT_KW.split(',').filter(Boolean); log(' 关键词覆盖:', kws.join('/')); } else { kws = kws.concat(KW_FB[oid] || []); }
|
||||
for (const kw of kws) {
|
||||
await c.evalJS(`(function(){var ms=[].slice.call(document.querySelectorAll('.ant-modal')).filter(function(e){return e.offsetParent!==null;});
|
||||
ms.forEach(function(m){var cb=m.querySelector('.ant-modal-close'); if(cb)cb.click();}); return 1;})()`);
|
||||
await wait(1200);
|
||||
await c.evalJS(`(function(){var bs=[].slice.call(document.querySelectorAll('button')).filter(function(e){return e.offsetParent!==null&&/选择分类/.test(e.innerText||'');});
|
||||
if(bs.length){bs[0].scrollIntoView({block:'center'});['mousedown','mouseup','click'].forEach(function(ev){bs[0].dispatchEvent(new MouseEvent(ev,{bubbles:true,cancelable:true,view:window}));});} return 1;})()`);
|
||||
await wait(4200);
|
||||
const n0 = await c.evalJS(`(function(){return [].slice.call(document.querySelectorAll('.ant-modal')).filter(function(e){return e.offsetParent!==null;}).length;})()`);
|
||||
if (!n0) { catInfo = 'modal未开'; continue; }
|
||||
await c.evalJS(`(function(){var ms=[].slice.call(document.querySelectorAll('.ant-modal')).filter(function(e){return e.offsetParent!==null;}); if(!ms.length)return 0;
|
||||
var m=ms[ms.length-1]; var el=m.querySelector('input[name="searchCategory"]'); if(!el)return 0;
|
||||
Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,'value').set.call(el,${JSON.stringify(kw)});
|
||||
['input','change'].forEach(function(ev){el.dispatchEvent(new Event(ev,{bubbles:true}));});
|
||||
var b=[].slice.call(m.querySelectorAll('button')).filter(function(x){return /搜索/.test(x.innerText||'');}); if(b.length)b[0].click(); return 1;})()`);
|
||||
await wait(5500);
|
||||
const picked = await c.evalJS(`(function(){var ms=[].slice.call(document.querySelectorAll('.ant-modal')).filter(function(e){return e.offsetParent!==null;}); if(!ms.length)return 'nomodal';
|
||||
var m=ms[ms.length-1]; var its=[].slice.call(m.querySelectorAll('.search-result-item'));
|
||||
if(!its.length) return 'noresult';
|
||||
var best=null,bs=-999;
|
||||
var TITLE=${JSON.stringify((EN[oid]||{}).title||'')};
|
||||
var BAD=/慈善|Благотвор|二手|Second-?hand|Used|Refurb|Sexual|情趣|Dewasa/i;
|
||||
var KID=/Baby|Kids|Kanak|婴儿|儿童|Infant|Toddler/i;
|
||||
var AUTO=/Automobile|Automotive|汽车|Motosikal/i;
|
||||
var ISK=KID.test(TITLE), ISA=AUTO.test(TITLE);
|
||||
var KW=${JSON.stringify(kw)}.toLowerCase();
|
||||
its.forEach(function(it){ var tx=(it.innerText||'').replace(/\\s+/g,' ').trim(); var s=0;
|
||||
if(BAD.test(tx)) { s-=200; }
|
||||
if(!ISK && KID.test(tx)) s-=60;
|
||||
if(!ISA && AUTO.test(tx)) s-=60;
|
||||
var segs=tx.split('/'); var lastSeg=(segs[segs.length-1]||'').replace(/\(.*?\)/g,'').trim().toLowerCase();
|
||||
if(KW && lastSeg.indexOf(KW)>=0) s+=40;
|
||||
if(/小百货|配饰|饰品|发饰|家居|住宅|文具|玩具|运动|美容|健康/i.test(tx)) s+=12;
|
||||
s -= Math.min(tx.length/80,5);
|
||||
if(s>bs){bs=s;best=it;} });
|
||||
if(!best) return 'noresult';
|
||||
best.scrollIntoView({block:'center'});
|
||||
['mousedown','mouseup','click'].forEach(function(ev){best.dispatchEvent(new MouseEvent(ev,{bubbles:true,cancelable:true,view:window}));});
|
||||
return 'picked:'+(best.innerText||'').replace(/\\s+/g,' ').trim().slice(0,60);})()`);
|
||||
await wait(7000);
|
||||
const left = await c.evalJS(`(function(){return [].slice.call(document.querySelectorAll('.ant-modal')).filter(function(e){return e.offsetParent!==null && (e.innerText||'').indexOf('选择类目')>=0;}).length;})()`);
|
||||
const cid = await c.evalJS(`(function(){var el=document.querySelector('#app');var p=el.__vue_app__.config.globalProperties.$pinia;
|
||||
return String(p._s.get('smtAddBasicStore').$state.formState.categoryId||'');})()`);
|
||||
catInfo = kw + ' → ' + SAN(String(picked)).slice(0,60);
|
||||
if (!left && cid) { catOk = true; break; }
|
||||
catInfo += ' [modal未关/无cat]';
|
||||
}
|
||||
log(` ② 分类${catOk ? '✅' : '❌'}: ${catInfo.slice(0, 100)}`);
|
||||
if (!catOk) { log(' 分类失败,跳过该商品'); DONE[oid] = { ok:false, msg:'分类失败:'+catInfo.slice(0,60) }; fs.writeFileSync(DONE_F, JSON.stringify(DONE,null,1)); c.close(); await wait(1000); continue; }
|
||||
|
||||
// ③ 文本 + 尺寸
|
||||
await c.evalJS(`(function(){
|
||||
window.__f('产品标题',${JSON.stringify(en.title)},'input:not([type=hidden])');
|
||||
window.__f('零售价格','1.99'); window.__f('货值','0.50'); window.__f('库存数量','100');
|
||||
window.__f('重量(kg)','0.02'); window.__f('包装后重量','0.02'); return 1;})()`);
|
||||
await c.evalJS(`(function(){
|
||||
var set=function(el,v){Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,'value').set.call(el,v);
|
||||
['input','change','blur'].forEach(function(ev){el.dispatchEvent(new Event(ev,{bubbles:true}));});};
|
||||
[['长','10'],['宽','5'],['高','3']].forEach(function(p){ var els=[].slice.call(document.querySelectorAll('input')).filter(function(e){return e.offsetParent!==null&&(e.placeholder||'')===p[0];});
|
||||
if(els.length) set(els[els.length-1],p[1]); });
|
||||
var its=[].slice.call(document.querySelectorAll('.ant-form-item'));
|
||||
for(var i=0;i<its.length;i++){ var lb=its[i].querySelector('label'); if(!lb) continue;
|
||||
if((lb.innerText||'').indexOf('包装后尺寸')<0) continue;
|
||||
var ins=[].slice.call(its[i].querySelectorAll('input')); ['10','5','3'].forEach(function(v,k){ if(ins[k]) set(ins[k],v); }); }
|
||||
return 1;})()`);
|
||||
await wait(2000);
|
||||
log(' ③ 文本+尺寸 ok');
|
||||
|
||||
// ④ 模板下拉
|
||||
await c.evalJS(`window.__openSel('运费模板')`); await wait(3000);
|
||||
let fr = await c.evalJS(`window.__pick(${JSON.stringify(FREIGHT_NAME)})`);
|
||||
if (/noopt|nodrop/.test(String(fr))) fr = await c.evalJS(`window.__pick()`);
|
||||
log(` ④ 运费模板: ${SAN(String(fr))}`);
|
||||
await wait(2500);
|
||||
await c.evalJS(`window.__openSel('服务模板')`); await wait(3000);
|
||||
log(` 服务模板: ${SAN(String(await c.evalJS(`window.__pick()`)))}`);
|
||||
await wait(2500);
|
||||
await c.evalJS(`window.__openSel('是否原箱')`); await wait(2800);
|
||||
log(` 是否原箱: ${SAN(String(await c.evalJS(`window.__pick('否')`)))}`);
|
||||
await wait(2200);
|
||||
|
||||
// ⑤ 含税
|
||||
await c.evalJS(`(function(){var its=[].slice.call(document.querySelectorAll('.ant-form-item'));
|
||||
for(var i=0;i<its.length;i++){ var it=its[i]; if((it.innerText||'').indexOf('报价是否含关税')<0) continue;
|
||||
var ws=[].slice.call(it.querySelectorAll('.ant-radio-wrapper'));
|
||||
for(var j=0;j<ws.length;j++){ if((ws[j].innerText||'').indexOf('不含关税')>=0){ var inp=ws[j].querySelector('input'); if(inp&&!inp.checked)inp.click(); return 1; } } }
|
||||
return 0;})()`);
|
||||
await wait(1800);
|
||||
|
||||
// ⑥ 物流属性(直接赋值,不依赖 UI 点击)
|
||||
await c.evalJS(`(function(){var el=document.querySelector('#app');var p=el.__vue_app__.config.globalProperties.$pinia;
|
||||
p._s.get('smtAddProductStore').$state.formState.specialProductTypeList=['1983471271:2025103']; return 1;})()`);
|
||||
await wait(1500);
|
||||
log(' ⑤ 含税+物流属性 ok');
|
||||
|
||||
// ⑦ 属性(含 check_box 归一化)
|
||||
await c.evalJS(`(function(){
|
||||
var el=document.querySelector('#app');var p=el.__vue_app__.config.globalProperties.$pinia;
|
||||
var at=p._s.get('smtAddAttrStore'); var a=p._s.get('smtAddStore').$state.attrsInfo.attrsList||[];
|
||||
var want={'品牌':'201512802','产地':'9441741844','化学品':'23399591357'};
|
||||
var d=at.$state.dynamicFormData||{};
|
||||
for(var i=0;i<a.length;i++){ var nm=a[i].nameZh||''; var key=String(a[i].arrtNameId);
|
||||
for(var k in want){ if(nm.indexOf(k)>=0) d[key]='history-'+want[k]; } }
|
||||
var ra=at.$state.renderAttrs||[];
|
||||
for(var j=0;j<ra.length;j++){ var x=ra[j]; var kk=String(x.arrtNameId); var st=String(x.attributeShowTypeValue||'');
|
||||
var needArr=(st==='check_box'||st==='multiSelect'||st==='selectPercent');
|
||||
if(needArr && d[kk]!==undefined && !Array.isArray(d[kk])) d[kk]=[d[kk]];
|
||||
if(!needArr && Array.isArray(d[kk])) d[kk]=d[kk][0]||''; }
|
||||
at.$state.dynamicFormData=d; return 1;})()`);
|
||||
await wait(1500);
|
||||
|
||||
// ⑧ 描述
|
||||
await c.evalJS(`(function(){
|
||||
try{ if(typeof CKEDITOR==='undefined'||!CKEDITOR.instances) return 0;
|
||||
var n=Object.keys(CKEDITOR.instances)[0]; var ed=CKEDITOR.instances[n];
|
||||
ed.setData(${JSON.stringify('<p>' + en.bullets.map(b => '• ' + b).join('<br/>') + '</p><p><strong>Keywords:</strong> ' + en.keywords + '</p>')});
|
||||
ed.fire('change'); ed.fire('blur'); ed.updateElement(); return 1; }catch(e){ return 0; }})()`);
|
||||
await wait(2000);
|
||||
|
||||
// ⑨ 图片(直接赋值,外部 URL 可用)
|
||||
const imgData = imgs.slice(0, 6).map((u, i) => ({ id: String(i + 1), url: u, name: 'img' + i + '.jpg', width: 800, height: 800, imgId: String(1000 + i), checked: false }));
|
||||
await c.evalJS(`(function(){var el=document.querySelector('#app');var p=el.__vue_app__.config.globalProperties.$pinia;
|
||||
p._s.get('smtAddProductStore').$state.formState.imageList=${JSON.stringify(imgData)}; return 1;})()`);
|
||||
await wait(3000);
|
||||
log(` ⑥ 描述+图片(${imgData.length}张) ok`);
|
||||
|
||||
// ⑩ 保存
|
||||
await c.evalJS(`(function(){var bs=[].slice.call(document.querySelectorAll('button')).filter(function(e){return e.offsetParent!==null&&/^\\s*保存\\s*$/.test((e.innerText||'').trim());});
|
||||
if(bs.length) bs[0].click(); return 1;})()`);
|
||||
await wait(17000);
|
||||
const msg = String(await c.evalJS(`JSON.stringify([].slice.call(document.querySelectorAll('.ant-modal,.ant-message-notice')).filter(function(e){return e.offsetParent!==null;}).map(function(e){return (e.innerText||'').replace(/\\s+/g,' ').trim().slice(0,120);}))`));
|
||||
const ok = /已保存到/.test(msg);
|
||||
log(` ${ok ? '✅' : '❌'} 保存: ${SAN(msg).slice(0, 110)} | POST=${posted}`);
|
||||
DONE[oid] = { ok, msg: SAN(msg).slice(0, 100), imgs: imgData.length, kws, time: new Date().toISOString() };
|
||||
fs.writeFileSync(DONE_F, JSON.stringify(DONE, null, 1));
|
||||
} catch (e) {
|
||||
log(` ❌ 异常: ${String(e).slice(0, 90)}`);
|
||||
DONE[oid] = { ok: false, err: String(e).slice(0, 90) };
|
||||
fs.writeFileSync(DONE_F, JSON.stringify(DONE, null, 1));
|
||||
}
|
||||
try { c.close(); } catch (e) {}
|
||||
await wait(1200);
|
||||
}
|
||||
log('');
|
||||
log(`全部结束。成功 ${Object.values(DONE).filter(x => x.ok).length} / ${Object.keys(DONE).length}`);
|
||||
Reference in new issue
Block a user