Ozon 跨境电商全链路
一个技能包覆盖完整闭环:
① 选品比价 1688 抓价 → 利润核算 (fetch1688 + profit_calc)
② 定价 按 RETS 跨境物流费率算最终售价 (price_*)
②.5 类目 找 cat/type/变体轴(必跑!) (find_category)
③ 素材生成 1688真图 → 8张营销图 + 标题 (fetch1688_imgs+pick_clean_imgs+translate_bullets+make_image_set2)
③.5 猫抓板类 从1688压缩包一键出全SKU营销图(自动解析款/色/尺寸+仿头部模板) (build_claw_imgs)
④ 上架 单品 / 多变体一张卡(一次到位带上内容) (product_import / variant_upload)
⑤ 评分拉满 8图+视频+富内容+属性70% → 100 (make_* + boost_rating)
⑥ 订单处理 Ozon出单 → 1688 加采购车 (order_to_cart)
🗺️ 技能树思维导图 (7 大模块)
> 完整版: references/WORKFLOW_MINDMAP.md | 导图 PNG: E:\跨境电商\自动化产出\报告\技能树思维导图_20261015.png
ozon-crossborder (Ozon 全链路)
│
├─ 0. 前置/环境
│ ├─ CDP 浏览器复用(9333) cdp_launch.py
│ ├─ 口径唯一来源 unified_config.py (费率按 logi 区分)
│ └─ 产出目录归位 outpaths.py
├─ 1. 选品(需求+货源)
│ ├─ 需求: BCS类目/单品 bcs_cats/bcs_select · Ozon热销 ozon_best · 官方WTS ozon_wts
│ ├─ 货源: 妙手1688官方搜索 ms_search(破风控) · 1688跨境/PDD/多站比价 src_compare
│ └─ 硬规则 selection_rules.md (代发/轻小/净利)
├─ 2. 抓商品数据(真实)
│ └─ grab_weight / grab_imgs / multi_list
├─ 3. ★做图+媒体(火山方舟API) → references/ai_media_pipeline.md
│ ├─ 一键6图+视频 auto_media (Seedream5.0Pro + Seedance2.5)
│ ├─ 多变体差异化图 auto_media_var · 详情→简报 detail2brief · 提示词 gen_prompts
│ └─ 替换媒体 replace_media · 重建卡片 rebuild_declined · 去重质检 img_dedupe/img_qc
├─ 4. 竞品埋词(标题SEO)
│ └─ 挖词 ozon_seo --weighted · 审计 title_audit · 改标题(4180/9048) set_title ★
├─ 5. 定价(OGL/RETS)
│ ├─ list_and_price / price_rets / rets_rates / get_ozon_cate_commission
│ ├─ 改价+划线 set_price_ratio ★
│ └─ 公式: 售价¥ = 落地成本 / (1 - 平台费率 - 目标净利)
│ 平台费率: OGL 16.5% (无尾程) | rFBS 18.5% (含尾程2%)
├─ 6. 上架(pipeline 一站式)
│ └─ pipeline.py: spec/price/check/seo/media/rich/import/stock/rating
│ --live --confirm-cost (默认dry-run) · preflight 关卡(新店40%/老店30%)
└─ 7. 上架后/运营
└─ 台账 sync_ledger · 评分 check_content_rating · 错误 scan_product_errors
· 竞品榜 competitor_best · 订单 order_to_cart · 利润审计 ogl_profit_audit
★ 总纲先读: references/SOP_selection_ops.md(选品+运营 SOP 总纲: 热词/热梗侦察→合规→比价→利润→定价→上架→评价→履约 全景流程 + 文档索引)
★★ 选品前必读: references/selection_rules.md(选品硬规则: 一件代发/包邮/含电池报备/40%净利/重量门槛 + 一件代发核实法)。
铁律速记: ①一件代发(必须能拍1件, 起批量>1且无代发=弃) ②包邮 ③含电池先报备 ④40%净利 ⑤≤~300g ⑥货源表带链接。
先读: references/write_paths.md(写入路径地图, 已验证, 照抄不再试错)
选品/营销前先读: references/russia_market.md(俄罗斯文化禁忌+节日+季节节奏; 避色/避双数/节令窗口)
★★★ 做图/视频前先读 (2026-10-14 新主流): references/ai_media_pipeline.md (火山方舟 API 一条命令出「6图+10s视频」= auto_media.py; 变体差异化 auto_media_var.py; 批量替换 replace_media.py; 重建被拒卡 rebuild_declined.py; ★视频只写 21841 不写 21845; MP4 必 faststart)
★ 做图/视频(旧手工链路, 备查/部分仍被 pipeline 依赖): references/image_pipeline.md(做图&视频规范: 样板=已出单薰衣草香包; 核心=AI真实生活场景底图→叠俄文; rembg抠主体不改主体; 视频=场景+动态+俄文; 含"使用场景/用户旅程"选品方法论)
本机工具(全免费): Pillow + OpenCV + rembg + torch
俄语挖词前先读: references/yandex_wordstat.md(Yandex Wordstat 三大板块/5步法/词4分类/地区→仓储/登录cookie/常见坑)
挖词命令: python scripts/yandex_wordstat.py "чехол" --classify --out res.json
★ 写标题/描述/hashtag 前先读: references/listing_content_templates.md(文案模板库: 7品类模板一键出全套)
一键命令: python scripts/gen_listing.py --config scripts/templates/content_korrektor.json --attrs _attrs_corr_new.json --rich _rich_x.json --model "MODEL-01" --out _attrs_x.json
硬规则: ★每个 hashtag ≤ 30 字符★(Ozon BR_hashtags_symbols_limit); Rich-контент 必须 raShowcase schema。
★ 内容评分 100 一次到位 (2026-09-28 手套实证): 只列 rules, 写进 pitfalls 70~72
内容评分 = Медиа100 + Текст100 + Атрибуты100, 三条硬规则:
1. Медиа 100 = 视频(属性 21841 + 21837标题, 40分) + ≥8 张图(60分)。只图无视频 -> 封顶 60。
2. Текст 100 = 属性 4191(Аннотация, >100 且 ≤500 字符)。不是 item.description (写它无效!)。
3. Атрибуты 100 = 填满类目属性 ≥70% (手套类目共 35 个 -> 需填 ~25 个)。
★ import 是全量替换: 单独补属性会清空图, 单独补图会清空属性 -> 必须一次 import 同时带 图+属性+视频+描述。
★ 七牛图床不稳定: Ozon 可能拉不到主图(报 "Не удалось скачать главное фото") -> 换主图重传即可。
python scripts/one_pass_import.py --file cards.json # 图+视频+全属性+描述+尺寸 一次到位(卡配置见脚本头)
python scripts/one_pass_import.py --check <task_id> # 查 import 任务结果
python scripts/check_content_rating.py --detail # 拉在售全部内容评分 + 未满项诊断
内容评分查询脚本怎么用 (简单版):
- 先开 Chrome 调试端口 --remote-debugging-port=9333 且已登录 seller.ozon.ru 并打开任意页面 (CDP 抓数据靠它)。
- check_content_rating.py = 批量查在售评分。
bash
python scripts/check_content_rating.py # 拉全部在售 -> _rating_all.json + 汇总表
python scripts/check_content_rating.py --detail # 未满分的逐条列出缺什么
python scripts/check_content_rating.py --offers mz-a,mz-b # 只看指定 offer
- _rating_all.py = 上面脚本的早期单文件版(同样逻辑, 直连页面 fetch)。日常用 check_content_rating.py 即可; _rating_all.py 保留作对照。
- client_id 从哪来: 两脚本都按 OZON_CLIENT_ID 环境变量 -> 回退 config.json 的 client_id, 代码里不写死。
- 查完记得关浏览器 (规则4)。
★ 上架准入关卡 (2026-09-22 最终版): 真实上架前必跑, 不合格拒绝上架。
口径唯一来源 scripts/unified_config.py (目标净利率 40% 硬规则, 国内运费实抓)。
python scripts/preflight.py --cost 13.5 --g 400 --dom 4 --commission 0.12 # 通过=exit0, 拒绝=exit2
python scripts/reprice_report.py # 在售商品 应有价 vs 实际价
python scripts/gen_doc.py --check # 校验 SKILL.md 脚本清单一致性
★ 发布到 skillhub (2026-09-22 固化): 一条命令跑完
python scripts/publish_skill.py # 自动 bump patch + 发布
python scripts/publish_skill.py --dry-run # 只清理+本地预检, 不发 HTTP
python scripts/publish_skill.py --version 2.9.0 --note "改动说明"
自动做: ①预检(语法/明文密钥/硬编码client_id) ②bump版本(SKILL.md+CHANGELOG) ③移出 [config.json真密钥 + .gitignore/.ttf/.log禁用类型 + mappings/ + 运行产物 + _工作目录] ④平台审核规则自检(security_selfcheck: Prompt注入/越狱、代码高危、元数据规范; 有HIGH级直接中止) ⑤skillhub publish ⑥无论如何恢复(try/finally)。
铁律: skillhub 打包器不读 .gitignore* → 凭证必须物理移出, 否则 P0 泄漏; 平台不许重复版本号 → 每次必 bump。
★ 竞品埋词降广告费 (2026-10-11): pipeline 已内置 seo 阶段(自动跑)。- 上架时加 --seo-query "<俄文核心词>" -> 上架流程自动挖竞品加权词并提示。
- 分类诊断已上架标题: python scripts/title_audit.py (对已存标题对照竞品测漏埋词)。
- 单独挖词: python scripts/ozon_seo.py --query "..." --weighted --pages 2 --top 20。
pipeline 真实上架(register/import/stock)会自动触发 preflight, 不过则拦下。
★ XLS 模板上架路径 (2026-09-19 实测可用, 比 API 更稳):
详见 references/xls_template_path.md。要点:
- 下载: Ozon后台 → 添加商品 → 通过模板 → 选择类目和类型 → 下载 XLS
- 生成: fill_template.py(数据 JSON → 填好 XLS, 含视频/HS字典转id)
- 导入: 后台 UI 点"导入"(无公开API); row5+ 数据, 中文列名属性
- ★★ SPU判重 = 主图: 变体必须主图不同 + 标题不同 + 型号不同(三不同)
- ★ HS编码列必须填字典id(如 971398781), 非 HS 码文本; 也可留空
- 归档: POST /v1/product/archive {product_id:[id]}, 验证看 is_archived
★ 上架前必跑类目适配(否则审核 declined):
python scripts/find_category.py 护膝 --show-attrs # 找 cat/type + 属性模型(★=变体轴)
用错 type_id → moderate_status=declined + DESCRIPTION_DECLINE 类型不符。
★ 一键全链路 (推荐)
pipeline.py 把 ①~④ 串成一条命令, 带断点续跑 + 运行报告:
# 推荐用 UTF-8 参数文件(免 PowerShell 损坏中文/俄文): args.json
# {"url":"https://detail.1688.com/offer/XXXX.html",
# "model":"Коврик для животных модель A","cat":17028674,"type":95201,
# "offer_prefix":"mz-A","g":"大号:2100,小号:800",
# "imgdir":"_imgs_out","attrs":"pet_attrs.json","rich":"pet_rich.json",
# "video":"pet_video.mp4","stages":"spec,price,register,media,rich,import,stock,rating"}
python scripts/pipeline.py --args-file args.json --model X --cat 1 --type 1
阶段顺序(★2026-09-21 修订, 别改回):
spec,price,check,register,media,rich,import,stock,rating
- media/rich 先备好素材, import 一次到位带上 8图/视频/富内容/属性, 再设库存。
- check = 上架前合规扫描(禁售类目/认证); 命中告警, 加 --strict-check 则终止。
- 禁止“先裸上架→再补内容”的二次 import(会反复改写/改价, 有封店风险)。
- attrs 阶段仅留作“单独补属性”用, 不在默认流程内。
- 先看不动手: --stages spec,price(只出定价表)
- 已有映射跳过抓取: --from-map mz-A(自动跳过 spec/price/register)
- 断点续跑: 某阶段失败后 --stages media,rich,attrs,rating
- 干跑: --dry
★ 人工卡点(脚本强制): 真实上架(register/import/stock)必须显式 --confirm-cost,
否则拒绝执行。脚本永不自动采购/付款。
> 下面是各环节的单独脚本, 供精细控制/调试; 一键流程无需逐个跑。
★ 产出目录规约 (2026-10-11 龙哥定)
- 所有脚本产出 ->
E:\跨境电商\自动化产出\(报告/选品数据/商品素材/pipeline报告/_trash)。 - 路径统一用
scripts/outpaths.py(OUT/OUT_REPORT/OUT_DATA/OUT_MATERIAL/OUT_PIPELINE/OUT_TRASH)。 - 19 个产出脚本已接入
_outdir()重定向(搜索/选品/审计/报告类)。- 中间/临时文件(如 jobs、find_source 临时) 故意不改。
- pipeline 运行报告已改为写产出区 (
pipeline报告/)。 - 台账例外: 桌面
C:\Users\Administrator\Desktop\Ozon上架台账-合并总版.xlsx(sync_ledger 写)。 - skill 代码本体留原位:
workspace\skills\ozon-crossborder(OpenClaw 加载位)。
★ 两个清理脚本分工 (2026-10-11)
cleanup_tmp.py= 上架时清桌面台账临时文件(实时, sync_ledger 收尾自动调)。cleanup_out.py= 定期清产出区垃圾(cronozon-out-cleanup每周日04:00, 默认>30天)。--go真删(默认dry-run) /--days N改保留天数 / 自动归位散落.trash_*。
★ 标题埋词优化 (2026-10-11)
title_audit.py --apply-> 生成建议新标题对照表报告/标题优化建议_*.csv(改前 vs 建议 vs 补词)。- 竞品漏埋词经
ozon_seo.lat2cyr()转回西里尔再补入(不写 Ozon, 待人工确认)。 - pipeline
seo阶段自动生成suggested_title(写 ctx.report["seo"])。
🗺️ 全链路流程思维导图 (2026-10-11)
- 完整步骤/顺序清单:
references/WORKFLOW_MINDMAP.md(0前置→1选品→2抓数据→3素材→4竞品埋词→5定价→6上架→7运营)
认证 & 前置
- 凭证: 环境变量
OZON_CLIENT_ID/OZON_API_KEY, 或技能目录config.json
(本店 Client-IdYOUR_CLIENT_ID) - CDP: Chrome 以
--remote-debugging-port=9333运行。 - 1688 必须用带界面的真实 Chrome(headless 撞风控); Ozon 评分接口也需登录态。
- 启动:
python scripts/cdp_launch.py --check/--launch - Python 3, 依赖:
pip install Pillow imageio imageio-ffmpeg websocket-client -i https://pypi.tuna.tsinghua.edu.cn/simple
① 选品比价(1688 → 利润核算)
抓 1688 货源
# jobs.json (UTF-8): [{"itemId":"A","desc":"可擦中性笔","keyword":"可擦中性笔 5支"}]
python scripts/fetch1688.py jobs.json res.json
- 数据路径
window.data.offerV2.response.data.OFFER.items(不是 offerV2Showed —— 那是广告) - 关键词必须 GBK 编码(脚本已内置);
found=60且关键词回显不符 = 撞推荐流(失效) - 风控: 连续搜 5+ 次可能被跳 punish(滑块)→ 需人工过;本脚本已 ≥5s 限速
- 调试任意字段:
python scripts/jseval.py "JSON.stringify(window.data.offerV2.response.data.OFFER.found)"
★★ 妙手 1688 货源搜索 (ms_search.py, 2026-10-10 首选!)
妙手ERP 已获 1688 官方搜同款 API 授权 → 不走我们 IP, 天然不被风控(解 1688 官网 punish 封锁)。
python scripts/ms_search.py "汽车防滑链" --limit 20 # 综合排序, 按价格升序打印
python scripts/ms_search.py "火花塞" --limit 30 --sort price_asc # 价格升序\./ --sort sold_desc 销量降序
python scripts/ms_search.py "防雪罩" --page 2 --limit 20 # 翻页
- 接口:
POST /api/move/alibaba_fen_xiao_cb/searchProductList(妙手域名页面上下文调用, 自动带 cookie 鉴权)。 - 返回: 完整 1688 商品 —
itemId/itemUrl/minPrice/maxPrice/monthSold(月销)/repurchaseRate(复购率)
/title/itemImg/卖家评分/是否48h发货。比 1688 官网直搜更丰富(带月销+复购)。 - 前置: Chrome CDP 9333 已开 + 已登录
erp.91miaoshou.com(任意妙手标签即可)。 - 结果存
mappings/jobs/ms_<时间戳>.json。
★★★ 1688 跨境专供批发平台 (aibuy_search.py, 2026-10-10 最强!)
aibuy.1688.com = 1688 官方「跨境专供」批发平台(嵌入妙手"1688跨境热卖"), 即龙哥说的"批发平台"。
走 1688 官方 mtop 跨境接口 (crossborder.lp), 带翻译/跨境标签/MOQ, 不走我们 IP → 不被风控。
python scripts/aibuy_search.py "汽车灯泡" --limit 20 # 关键词搜货源
python scripts/aibuy_search.py "点火线圈" --limit 20 --page 2 # 翻页
python scripts/aibuy_search.py "火花塞" --limit 20 --lang ru # 指定语言(翻译标题)
- 接口:
window.lib.mtop.request({api:'mtop.com.alibaba.cbu.crossBorder.lp.keywordSearch', ...})
(在 aibuy 页面上下文调; 妙手"1688跨境热卖"页自动带出该 iframe)。 - 返回:
offerId/title/translateTitle(翻译标题!)/price(批发价)/monthSold/repurchaseRate
/companyName+companyProvince/City(供应商+产地)/compositeScore(评分)/beginQuantity(起订量MOQ)
/shippingInfoModel(发货时效)/cateLevel1Id/2Id(1688类目)。 - 优势: 跨境专用通道 + 多供应商对比(同款不同厂) + MOQ 可见 + 翻译标题 → 直接可用于 Ozon 上架。
- 前置: Chrome CDP 9333 + 已登录妙手; 若 aibuy 标签不在, 脚本会自动开(用妙手授权链)。
- 结果存
mappings/jobs/aibuy_<时间戳>.json。 - 分销授权: 妙手绑定了我们的 1688 分销账号 (
b2b-2338296107, authStatus=valid, 自动续期)。
★★ 拼多多批发搜索 (pdd_pifa.py, 2026-10-10 登录后可用)
pifa.pinduoduo.com = 拼多多批发(多多批发)官方采购批发平台, 龙哥账号已登录(13565097232)。
搜索走加密风控网关 (xg.pinduoduo.com/xg/pfb/a2, 无法直接构造) -> 走真实导航 + DOM 抓取。
python scripts/pdd_pifa.py "汽车灯泡" --limit 20 # 关键词搜货源
python scripts/pdd_pifa.py "防滑链" --limit 20
- 搜索URL:
https://pifa.pinduoduo.com/search?word=<kw>&met=hot(DOM 抓a[href*=goods/detail])。 - 商品详情:
https://pifa.pinduoduo.com/goods/detail/?gid=<id>。 - 返回字段:
gid/title/price(批发价¥)/sold(已售)/promo(店铺承诺:2件起批/包邮/退货包运费)。 - 前置: Chrome CDP 9333 + 已登录 pifa.pinduoduo.com (账号在
E:\跨境电商\平台账号密码\账号密码.txt)。 - 用户信息接口
/pifa/user/queryUserInfo(直调验证登录态)。
★ 三站货源比价 (1688跨境专供 + 1688妙手 + 拼多多批发)
三通道并排比价: aibuy_search.py(1688跨境专供) / ms_search.py(1688妙手) / pdd_pifa.py(拼多多批发)。
同一关键词三站价格/月销/复购/MOQ一次出。规律: 1688批发价最低(¥0.1-2), PDD批发因含零售属性价高3-20倍。
中继脚本: _tri.py 模式(见 mappings/jobs/tri_compare_*.json)。
★ 多渠道货源比价 (src_compare.py, 2026-10-10)
一条关键词同时查 1688 + 拼多多,按价格升序对比:
python scripts/src_compare.py "汽车防滑链" --limit 10 # 默认 1688+pdd
python scripts/src_compare.py "火花塞" --ch pdd --limit 10 # 只查拼多多
python scripts/src_compare.py "防滑链" --ch 1688 # 只查 1688
- 1688: 开新标签 → 首页真实打字 → 点搜索 → 抓结果新标签
.search-offer-wrapper卡片(offerId+价)。
⚠️ 连续自动化搜索会触发 IP 级滑块风控 (status=punish),脚本会明确报错(不伪造数据),
需人工在 Chrome 里拖滑块解除(红线: 不自动绕过验证码);或冷却后重试。
👉 已被风控时改用上面的ms_search.py(妙手官方授权, 不被拦)。 - pdd:
mobile.yangkeduo.com移动版(需已登录)。PDD 是 React 布局,无<a href=goods_id>,
按「¥」文本节点向上找卡片提名称/价/销量。PDD 零售价 > 1688 批发价,适合拿「带适配信息的成品款」。 - 结果存
mappings/jobs/srccmp_<时间戳>.json。 - 货源渠道总览见
references/sourcing_channels.md(妙手ERP=主通道; 跨境巴士=物流; 账号文件在 E:\跨境电商\平台账号密码)。
★ 抓每 SKU 真实重量 (get1688_sku_weights.py)
定价前必取真实重量(按 1688 链接,不估算)。从商品页 script 标签内 productPackInfo
(含 sku2+weight 的那段 JSON)解析每 SKU 真实克重:
# 需 CDP 9333 已打开该 1688 商品页
python scripts/get1688_sku_weights.py "https://detail.1688.com/offer/1009374133367.html"
# 输出 JSON: [{"sku":...,"weight":350,"price":...}, ...]
批零价也可由 multi_list.py 同时拿到。
算利润
# items.json: {"items":[{"itemId","title","sale_cny","weight_kg","supply_cny",
# "domestic_cny","commission_pct","sticker_cny","target_margin","url"}]}
python scripts/profit_calc.py items.json out.json
- ★ RETS 口径: 物流费 = 计费重(kg) × ¥12.00, 无起步价、无重量上限
- 落地成本 = 采购 + 国内快递 + 物流 + 贴单 + 佣金 + 支付 + 固定费(≈¥3.57/单)
- 别用 China Post 费率(贵 5.6 倍, 严重低估利润)
- ⚠️ 货源表必须带 offerId + 详情链接(否则无法回查参数/写描述)
② 定价(跨境物流 · ★本店默认 RETS)
# ★ 定价统一用 price_rets.py (正确¥口径; ozon_profit_calc.py 已废弃删除)
python scripts/price_rets.py --cost 175 --dom 5 --g 400 --chan standard # RETS standard, 出保本/地板/目标/上探
python scripts/price_rets.py --cost 175 --dom 5 --g 400 --chan economy --margin 0.40
# 一键: 1688 链接 → 抓价/重量 → 定价表
python scripts/list_and_price.py https://detail.1688.com/offer/1058262551556.html --commission 0.13
# 多规格: 抓全部规格 → 按价格档分组 → 逐档定价 → 可选登记
python scripts/multi_list.py 1058262551556 --commission 0.13 --group
- ★ RETS 按实重分档 (extra_small≤500g / budget501-1499g / small1500-2999g / big3-9.9kg / ≥10kg):
物流费(¥) = 起步 + 单价(¥/g) × 实重g; 400g 实测 Standard 18.97 / Economy 14.57 / Express 23.77 - 渠道(RETS):
standard(7-19天) /economy(17-29天) /express(5-14天, 禁电池液体) - 别人怎么找/接入自己的物流费率 → 见
references/logistics_howto.md(问货代/反扒计算器/反解表格) - 佣金按类目且按售价档; 默认目标净利率 40%(保本/地板25%/目标40%/上探55%)
- 详见
references/pricing.md
★ 价格指数 & 跟价可行性 (price_advice.py)
Ozon「价格页 → 所有指标 → 价格指数」会显示我方对比竞品的不利/有利。
核心公式: 价格指数 = 我方网站价(₽) ÷ 竞品价(₽); 指数 ≤1 = 有利(获「就是这个价」徽章 + 搜索加权)。
但 Ozon 的降价建议只对买家价格, 不看我们成本 → 盲跟别的平台清仓价必亏。
# CDP 连已登录 seller.ozon 后 (先 cdp_launch.py --launch): 抓指数 + 自动核算
python scripts/price_advice.py # 抓+核算, 出中文简报 + scripts/_price_advice.json
python scripts/price_advice.py --from-file _raw.json # 跳过抓取用已有数据
python scripts/price_advice.py --margin 0.35 # 临时改净利线(仅测试)
输出对每个品自动打标: 能跟(≥40%) / 可微降(25~40%) / ❌不能跟(<25%或亏),
并给出跟价红线¥ = 达到 40% 净利的最低售价 (售价 < 红线 不能跟)。
口径: 落地 = 采购 + 国内运 + 物流(RETS standard) + 贴单2 + 包材0; 成本从 mappings/sku_map.json 读。
③ 上架(单品 / 多变体)
★★ 上架即自动登记台账 (2026-09-29, 龙哥要求)
每上架一个商品, 立刻跑 register_listing.py 把该 SKU 追加进「上架台账」。
强制 6 个必填字段: 1688链接 / 采购价¥ / 商品名称(中文) / 落地成本¥ / 售价¥ / 预估净利%
(缺 url/cost/name/price/weight 任一 -> exit 1 拒绝登记, 不允许空行)
# 单品
python scripts/register_listing.py --offer mz-x-5 \
--url https://detail.1688.com/offer/825248005560.html \
--name 猫草磨牙棒 --price 24.12 --cost 3.80 --weight 30 --spec 5根 --dom 0 --sku 5917425666
# 批量(推荐, 一次传多行): _new_listings.json = [ {offer,url,name,price,cost,weight,spec,dom,sku}, ... ]
python scripts/register_listing.py --file _new_listings.json
- 同时写 mappings/sku_map.json(出单加购用) + 生成桌面 Ozon上架台账.xlsx/.csv(追加/更新, 按 offer 去重)
- 落地成本/净利 用
unified_config口径(RETS 物流 + 贴单2 + 包材0 + 佣金RFBS12% + 平台杂费) - 售价/SKU 可省略: 脚本会自动从 Ozon 实时拉 (--no-autofill 关闭)
- 上架流水线自动接入: ①
pipeline.py的register阶段已同步写台账; ②build_*_cards.py末尾已接入(参考 build_catgrass_cards.py)
台账审计(对账 Ozon):
python scripts/register_listing.py --verify # 找 未登记/已归档/售价不符/数据不全; 有问题 exit 1
上架台账 vs 复核总表:
- Ozon上架台账.xlsx(本脚本): 只增不减, 记录每 SKU 历史(含已下架)。 6 必填字段。
- Ozon上架复核总表.xlsx(make_review_sheet.py --live): 只含当前在售快照。
- 建议: 每次上架后跑 register_listing(或让 pipeline 自动跑) -> 定期跑 make_review_sheet --live 刷在售视图。
★ 先做素材: 1688 真图 → 营销图 + 痛点标题
不要直接上传裁剪的原图! 要用真图叠卖点/尺寸/痛点, 并让标题带痛点关键词。
# 1) 抓 1688 真图(需 CDP 9333 已登录)
python scripts/fetch1688_imgs.py https://detail.1688.com/offer/XXXX.html --out _1688_imgs
# 2) 生成 8 张营销图(真图 + 俄文卖点/尺寸/痛点钩子)
python scripts/make_image_set2.py --src-dir _1688_imgs --out _imgs_out \
--bullets "С подогревом;Мягкий и тёплый;Безопасно для кожи;Дышащий" \
--size-text "Универсальный размер" --hook "Спасает от холода"
# 3) 生成痛点标题(核心品类 + 痛点/场景 + 卖点 + 规格)
python scripts/build_title.py --cat "Наколенник" --pain "от холода и боли в коленях" \
--bullets "с подогревом;мягкий" --size "универсальный" --limit 100
- 产出图名
d1_main / d2..d5_bullet / d6_size / d7_detail / d8_scene(共 8 张差异化)。 - 全程俄文文案(符合 Ozon 俄语市场); 痛点钩子压首图提升点击。
★ 标题/文案 生成升级 (2026-09-28, 源自 Ozon 运营 AI 指令库)
核心思路: 标题不是描述商品, 是搜索结果里的一个竞争位 → 先分析搜索意图, 再按 5 策略出多版, 最后禁词自检。
# ★ 5 策略标题矩阵(属性/场景/规格/人群/短促)
python scripts/build_title.py --cat "Корректор канцелярский" --core "корректор" \
--pain "без следов" --bullets "лента 5мм;сразу сохнет" --size "6 метров" \
--qty "набор 3 шт" --audience "для школьников" --strategies
# ★ 搜索意图分析前置(输出提示词模板给 AI: 类目+8俄语搜索词+核心词依据 → 再写)
python scripts/gen_listing.py --intent --product "修正带 6米 3支装"
# ★ 禁词自检(标题/描述/标签都能扫; 命中 exit 1)
python scripts/banned_words.py "Лучший корректор, гарантирую качество!"
build_title.py --strategies: 一次出 5 版 + 每版自动禁词自检(⚠️标注) + 字符数。gen_listing.py: 生成后自动扫禁词(标题/描述/hashtags);--intent出搜索意图前置提示词。banned_words.py: 5 类禁词(极限词/承诺/促销/品牌授权医疗/中文敏感 + 标点堆砌/®™)。- ⚠️ AI 最常犯的错不是语法, 是多写你没说过的合规雷词(认证/保证/官方/正品) → 生成后必扫。
单品
python scripts/optimize.py --offer X --cat 17028674 --type 95201 \
--imgdir outdir --video product.mp4 --title ".." --text ".."
多变体一张卡 ★
合并三条件: ① 9048(型号名)相同且俄文 ② 变体属性(is_variant=True,如10096颜色)各不相同 ③ 审核后在售。
# 1) 抓规格 + 定价 + 登记
python scripts/multi_list.py <1688链接> --group --register --offer-prefix <前缀>
# 2) 多变体上架(一张卡)
python scripts/variant_upload.py --model "Коврик для животных модель A" \
--cat 17028674 --type 95201 --from-map <前缀> --name-tpl "Название {size}"
# 3) 设库存(RFBS 仓 1020005029346300, 否则不发布)
# variant_upload.set_stock(offers, stock=50)
验证: model_info.model_id 相同且 count=N = 已合并 N 变体一张卡。
⚠️ 8229「Тип」不是变体维度(是 type_id 选择器, 别放进 attributes)。
⭐ 素材本地化 & 出图(2026-09-21 增强)
痛点: 1688 图常带满屏中文(规则40) -> 直接上 Ozon 降权/判违规。三步走:
# ① 抓图(轮播主图优先=多白底无字)
python scripts/fetch1688_imgs.py <1688url> --out _1688_imgs
# ② 优无字图 + 自动算裁切参数(无需 OCR)
python scripts/pick_clean_imgs.py --src-dir _1688_imgs --out _1688_clean --top 8 --report
# ③ 中文卖点 -> ★俄文本地化文案★(DeepSeek, 按俄罗斯买家表述习惯, 非直译)
python scripts/translate_bullets.py --title "中文标题" --cn "卖点1;卖点2;卖点3"
# ④ 出图(用上面的干净图 + 俄文卖点)
python scripts/make_image_set2.py --src-dir _1688_clean --out _imgs_out \
--crop-side none --cover-top 0.10 --cover-bottom 0.16 \
--bullets "..." --hook "..." --size-text "..."
- 字体: 内置 Montserrat(含西里尔) ->
assets/fonts/; 回退 Segoe UI Black -> Arial。 - DeepSeek 凭证:
config.json的deepseek_api_key(本地, 不随包分发) 或 envDEEPSEEK_API_KEY。 - 视频:
make_video.py同步改字体(竖版5-15s/Ken Burns/转场/俄文动效/≤2MB)。
④ 内容评分拉满(目标 100)
| 组 | 满分 | 达成条件 |
|---|---|---|
| Медиа 媒体 | 45 | 8图=60 / 视频或封面=+40 |
| Текст 描述 | 25 | 100~500字=100 / >500字=+50 / Rich-контент=+50 |
| Атрибуты 属性 | 30 | 填15%=25 / 50%=50 / 70%=100 |
第 0 步: 诊断
python scripts/get_rating.py <sku> # 看三项分, 定位短板
第 1-3 步: 8图 + 视频 + 富内容
python scripts/img_dedupe.py <图片目录> # 判重(aHash 汉明距离≤6 风险)
python scripts/make_image_set2.py --src-dir _1688_imgs --out outdir --bullets "..." # 合成 8 张差异化图(叠俄文卖点)
python scripts/make_video.py --imgdir outdir --out product.mp4 --seconds 3
python scripts/rich_content.py --title "标题1" --text "正文1" --out rich.json
第 4 步: 批量补(属性 + 富内容 + 视频)★
python scripts/boost_rating.py --offers A-001 A-002 ... \
--cat 17028674 --type 95201 \
--attrplan attrs.json --rich rich.json --video product.mp4
attrs.json 格式: {"4082":"40x40x6", "4389":[{"dictionary_value_id":90296}], ...}
(字典属性用 dictionary_value_id; 自由文本直接给字符串)
第 5 步: 复查(等 5~15 分钟)
python scripts/get_rating.py <sku> # 期望三项各 100
★★ 内容评分一键修复(通用版, 2026-10-07 实测 12→82)
14 个在售猫抓板评分全 12/100 的根因与修复(通用到所有品类):
# 一次到位(图+视频+全属性+描述+尺寸): 编辑 cards.json 后跑
python scripts/one_pass_import.py --file cards.json # 全量
python scripts/one_pass_import.py --file cards.json --only mz-claw-nbk-g
# 只补属性/富内容/视频缺口
python scripts/boost_rating.py --model "Когтеточка ..." --cat 17028968 --type 95240 \
--offer-prefix mz-claw --attrs attrs.json [--rich rich.json] [--video v.mp4]
# 只补/改描述(写属性 4191):
python scripts/set_desc.py mz-claw-nbk-g --file desc.txt --min 100
★ 三个致命认知(评分上不去都栽在这):
1. 描述必须写进 attribute 4191(Аннотация),顶层 description 字段 Ozon 直接忽略!
product_import.import_merged 已 patch:description 自动写入 attrs[4191]。
2. 富内容 11254 必须单独再导一次:与图片/其它属性同批提交会被覆盖清空。
正确顺序 = ①属性+描述(4191)+图片 一次提交 → ②再单独提交 {11254: rich}。
3. 图片要“真正不同”:同名/重复文件会被去重(8 张可能只进 6 张);
用多张不同主图 → 实测进 16~17 张。Ozon 不封顶图片数。
其它坑:23171 #主题标签 是 String 非数组(写 #a #b #c 单值,传 list → ERROR_ATTRIBUTE_IS_NOT_COLLECTION);
描述里 \n\n 双换行会让「Текстовое описание」只拿 50 分,尽量单段。
验证:/v3/product/info/list 不返回 description/rich,要用 /v4/product/info/attributes 读 4191/11254。
实测结果:Медиа 60/60 · Текстовое описание 100/100 · Остальные атрибуты 100/100 = 82/100(无视频满分,视频 +40)。
⚠️ 致命坑
- 视频(21841)/富内容(11254)写在属性里 —— import 不带就又清空!
任何import_merged都要同时带上 视频+富内容+8图。 - 描述(4191)为空 → 文本组 0 分。需 ≥100 字俄文。
- 属性一律走 API; 编辑页是中文界面, 点"发送审核"会提交中文字典值破坏属性。
⚠️ 新商品设库存的异步窗口(实测 2026-09-19)
新商品创建后不能立即设库存, 会依次报:
1. PRODUCT_IS_NOT_CREATED — 刚提交, 等几十秒~几分钟
2. PRODUCT_HAS_NOT_BEEN_TAGGED_YET — 已创建但 Ozon 打标未完成(异步, 可能几十分钟~几小时)
3. TOO_MANY_REQUESTS — 设太频繁, 需限速
对策: 上架后等商品 statuses.is_created=True 再设; 若遇打标错误, 用 retry_stock.py
定时重试(或 pipeline.py --stages stock 续跑)。pipeline 把此类错误视为“待重试”而非失败。
python scripts/retry_stock.py _pipeTEST --count 5 --stock 50
⑤ 订单处理(Ozon 出单 → 1688 加采购车)
结算付款永远人工。 先建映射表(上架时 --register 自动写):
python scripts/sku_map.py add --offer mz-26090716-829589 \
--url https://detail.1688.com/offer/XXXXXXXX.html --name "薰衣草防蛀" --spec "规格名" --qty 1 --cost 12.0
python scripts/sku_map.py list / find --offer X / export
拉单 + 加购:
python scripts/order_to_cart.py --pull # dry-run: 拉新单, 校验+截图, 不真加
python scripts/order_to_cart.py --pull --live # 真加购
python scripts/order_to_cart.py --offer mz-...829589 --qty 2 --live
安全机制: 默认 dry-run; 已处理订单去重(processed_orders.json); 加购前校验;
每步截图存证(mappings/evidence/); 限速防风控; 映射表无此 offer → 跳过不乱买。
⚠️ 依赖常驻已登录 1688 的 Chrome(9333)。定时任务 cron ozon-order-cart-check 每 2h 跑 dry-run。
⭐ 离线能力矩阵(装完就能跑? 2026-09-21)
依赖: 第三方包 PIL / imageio / numpy / openpyxl / websocket 均已本地安装。
字体(Montserrat)、RETS 费率表、模板均打包在包内, 不需联网下载。
| 档 | 能力 | 典型脚本 | 需要什么 |
|---|---|---|---|
| ✅ 完全离线 | 定价/利润核算 | price_rets, pricing_engine, profit_calc | 仅本地 |
| ✅ 完全离线 | 图片/视频/检测 | make_image_set2, make_video, make_assets, img_qc, img_dedupe, upscale | 仅本地 |
| ✅ 完全离线 | 合规预检/类目/标题 | compliance_check, find_category, match_category, build_title, set_desc | 仅本地 |
| ⚠️ 需联网 | 1688 拓价/拓图 | fetch1688*, find_source, seasonal_pull | 网络(+CDP) |
| ⚠️ 需联网 | Ozon 后台数据 | competitor_best, market_share, competitor_scan, price_compare, shop_audit, shop_scan | 网络 + CDP登录 |
| ⚠️ 需联网 | 上架/改价/库存 | pipeline, product_import, variant_upload, retry_stock, boost_rating, get_rating | 网络(Ozon API) |
| ⚠️ 需联网 | 订单/加购 | sync_orders, order_to_cart, daily_flow | 网络 + CDP |
| ⚠️ 需联网 | 俄文文案翻译 | translate_bullets | 网络(DeepSeek) |
一句话: 「算钱/做图/生文案」本地直接跑; 「拓数据/上架/拉单」必须联网(本质是去 1688/Ozon 要数据)。
⭐ 候选类目反推 & 定价公式核对(2026-09-21)
候选类目反推 cand_categories.py
按「选品画像」自动扫 Ozon 官方热销榜(内部 API, 需 CDP 9333 + seller.ozon.ru 已登录),
对每个三级类目打分并排序:
- 分项: 需求规模(30) + 头部低集中度(25) + 差异化空间(15) + 卖家分散(15) + 轻小件(15)
- 数据: gmvSum / soldCount / avgPrice / sellerName / volume
- 用法:
python -X utf8 scripts/cand_categories.py # 自动挑 60 个三级类目扫
python -X utf8 scripts/cand_categories.py --cats "香薰袋:92721,猫砂:95168"
python -X utf8 scripts/cand_categories.py --top 20 --json
- 结果归档:
mappings/cand_categories/YYYY-MM-DD.json
后台填价换算 price_rets.py --black/--green
给定前台黑标(含折扣买家价)/绿标(会员价) → 估 Ozon 后台应填价。
python -X utf8 scripts/price_rets.py --black 100 --green 105.28 # ★本店实测口径
python -X utf8 scripts/price_rets.py --black 1000 --green 700 --laoxu # 老徐经验公式对照
python -X utf8 scripts/price_rets.py --fit 1000 700 1672 # 反解系数(c_lo,c_hi)
★口径说明(实测结论, 2026-09-21):
| 口径 | 公式 | 适用 |
|---|---|---|
| 本店实测(默认) | 后台填价 ≈ 前台黑标;绿标 ≈ 黑标×1.0528 | 本店 10 商品反解, 极稳 |
| 老徐经验(--laoxu) | 填价 = 黑标×3.24 − 绿标×2.24 | ⚠ 本店测偏低~12%, 仅供参考 |
> 详见 docs/evidence/老徐定价公式_实测核对_20260921.md
> 前台商品页 URL 用 sku(/product/{sku}/) 不是 product_id; 价格 DOM = [data-widget="webPrice"]。
⭐⭐ 上架后运营闭环 operate/(2026-09-22 新增)
> 补齐最大短板: 上架之后的 诊断→促销→广告 闭环(来自老徐《15天起店6步法》)。
4 步串联, 一键入口 scripts/operate/operate_flow.py:
| 脚本 | 作用 |
|---|---|
analytics_pull.py |
拉链接健康数据: 展现(搜索/详情)→点击→加购→成交 (/v1/analytics/data) |
diagnose.py |
★诊断器: 判卡在漏斗哪一环(无曝光/点击率低/无加购/加购不转化)+ 优化建议 |
promo_plan.py |
★促销/三次降价决策(测款期可降价测转化; 成熟期守'不频繁改价'铁律) |
ads_helper.py |
广告/活动决策: 哪些可投 / 先优化 / 别投 + ACOS 承受力 |
operate_flow.py |
一键跑全流程 |
用法:
python -X utf8 scripts/operate/operate_flow.py # 全流程(近30天)
python -X utf8 scripts/operate/operate_flow.py --days 7
python -X utf8 scripts/operate/diagnose.py --from-file mappings/operate/analytics_YYYY-MM-DD.json
python -X utf8 scripts/operate/promo_plan.py --price 74.15 --cost 13.5 --g 400 --zero-orders --days-online 20
python -X utf8 scripts/operate/ads_helper.py --from-diagnose mappings/operate/analytics_YYYY-MM-DD.json
③ 与铁律的关系(重要):
| 场景 | 判定 | 可否降价 |
|---|---|---|
| 测款期 | 上架<30天 或 未出单 | ✅ 可"三次降价法"(每次-5%~-10%, 观察4天, 不破保本价) |
| 成熟期 | 已出单 | ❌ 守铁律; 促销走平台活动折扣位, 单次调价≤5%且间隔≥7天 |
④ 诚实边界: Ozon 广告走独立 Performance API(需另配 token), ads_helper.py 不写入广告,
只做投放决策支持。广告开启/预算必须人工后台操作。付款永远人工。
⭐ 选品补强 6 件套(2026-09-22, 来自老徐调研)
| 脚本 | 作用 | 状态 |
|---|---|---|
outside_sources.py |
★站外选品源导航+配置检查(1688只拿货, 选品看站外) | 可用 |
margin_screen.py |
★倍数快筛: 1688×(2.5~3) 粗筛, 通过再 RETS 精算 | 可用 |
review_mining.py |
差评挖掘(抓竞品评论痛点) | ⚠半自动(前台反爬, API需高级订阅) |
ads_reverse.py |
★广告反推(在投广告+近45天上架 → 值得跟做) | 可用 |
price_redline.py |
客单价红线检查(标记 <1500₽ 的品) | 可用 |
season_calendar.py |
★俄罗斯全年选品日历(节令+品类+提前上架月) | 可用 |
用法:
python -X utf8 scripts/outside_sources.py --check # 站外源配置检查
python -X utf8 scripts/margin_screen.py --cost 13.5 --g 400 --ozon-price 74
python -X utf8 scripts/ads_reverse.py --from-best mappings/competitor_best/YYYY-MM-DD.json
python -X utf8 scripts/price_redline.py # 本店红线
python -X utf8 scripts/season_calendar.py --month 9
python -X utf8 scripts/review_mining.py --sku <竞品sku> --wait 16
实测发现(重要):
- ⚠ 老徐"1688×2.5~3 倍"偏低: 因物流费/佣金是固定成本, 低价品实际需 5 倍+ 才够 40% 净利
(加热垫: 成本¥13.5/400g → 需卖 ¥71.81 = 5.32 倍)。
- 本店 31 在售商品中 27 个(87%) 低于 1500₽ 红线 → 客单价结构需调整(套装/变体/清退)。
- 差评挖掘受限于 Ozon 前台反爬 + 评论 API 需高级订阅; 脚本为半自动, 抓不到会明确提示人工。
参考
references/write_paths.md— Ozon 写入路径地图(已验证)references/scoring.md— 评分档位与权重、关键属性 ID、视频延迟references/pricing.md— 官方物流费率表 + 定价公式 + 四定价线references/pitfalls.md— 执行前必查的坑references/api_map.md— Seller API 接口速查 + 变体合并机制references/yandex_wordstat.md— Yandex Wordstat 俄语挖词(三大板块/5步法/4分类/埋词/地区→仓储)references/prohibited_and_certification.md— 官方禁售/认证/危险品清单(Ozon 原文)references/banned_categories_0412.md— 跨境禁售类目 0412 版(中英对照 92 项)references/selection_picks_yellow.md— 选品参考·原表标黄推荐品清单(219 项)references/selection_criteria.md— 选品标准references/toolkit_links.md— 卖家工具/网站导航 + 回款规则references/profit_calc_formula.md— 桌面价格计算器公式完整还原(核心)references/logistics_channel_rates.md— 8 货代渠道物流费率表references/logistics_howto.md— ★别人如何找/接入自己的物流费率(方法论)assets/China_post_*.xlsx— Ozon 官方物流费率表原件
通用品类营销图自动化 (build_claw_imgs / make_claw_imgs)
场景: 已有 1688 商品压缩包(含 主图/ sku图片/ 详情/ 目录), 需批量出 Ozon 营销图。
一键命令:
python scripts/build_claw_imgs.py --src <1688压缩包.zip 或 解包目录> --out <输出目录>
- 自动从 zip 解包 → 定位
sku图片(或sku) 目录 → 解析每个 SKU 的款式/颜色/尺寸。 - 每个 SKU 产出:
01_main.jpg(带卖点主图) +99_sku.jpg(纯SKU图) +manifest.json(清单)。 - 输出目录结构:
<out>/sku-NN/01_main.jpg。
主图模板 (仿 Ozon 头部卖家): 白底 + 顶部大标题(俄) + 左列图标卖点(3条) + 右侧产品图(等比不拉伸) + 右上尺寸圆角标 + 右下赠品角标。
款式->卖点映射 在 build_claw_imgs.py 的 STYLE={} 字典(按 SKU 文件名里的款式关键词匹配: 笔记本/波浪板/直板/S板/贵妃板/箱子款)。新增品类只需改 STYLE 字典。
已处理: ①自动抠白底(四角浅色背景) ②底部含中文文字条自动白掉 ③标题自动换行不溢出 ④图标矢量绘制(leaf/shield/sofa/paw/box/wall/check)。
场景图 (build_scene): 从 主图/详情 挑真实场景图 → 裁掉含中文的边(crop) + 叠俄文钩子(hook) + 底部卖点条(band)。
⚠️ 场景图不能全自动: 1688 场景图中文位置每张不同, 需人工配一次 cover/crop 坐标(格式支持比例0~1或像素)。建议只挑无文字角标的场景图, 或对固定模板图配一次坐标复用。
限制: SKU 文件名需含款式关键词(如【波浪板】)和尺寸(如42×20×3cm)才能自动归类; 命名不规范时回退。
★ 图片识别款式兜底 (claw_style_recog.py): 文件名无款式关键词时自动用「示例最近邻」识别款式。
- 原理: 产品前景外接框 → 归一 16×16 形状签名 + 长宽比/填充率 → 与样本库余弦相似度取最近邻。
- 样本库: assets/claw_style_exemplars/<款式>.jpg (同款式多张用 <款式>__2.jpg)。加样本即可扩品类/提准。
- 实测 13/14 (仅「直板x2个装」这种角度歧义图会错); 置信度<0.55 的归为「未知」交人工。
- 命令行测试: python scripts/claw_style_recog.py <img1> <img2> ...
- 重建样本库: python -c "import sys;sys.path.insert(0,'scripts');from claw_style_recog import build_exemplars;print(build_exemplars({'<款式>':'<图路径>'}))"
★★ 台账自动更新 (update_ledger.py / merge_ledger.py, 2026-10-07)
把 Ozon 全量商品同步到桌面主台账,补齐链接/价格/重量/图数等必要内容。
# 1) 拉 Ozon 全量商品(含已归档) -> 桌面 CSV
python scripts/update_ledger.py
# 2) 合并进主台账(保留手工成本列, 更新同步列, 新增缺失行, 用 sku_map 补 1688链接/重量)
python scripts/merge_ledger.py
- 主台账: 桌面
Ozon上架台账-合并总版.xlsx→ sheet 总台账-在售(6 个 sheet 均保留)。 - 新增列
Ozon链接=https://www.ozon.ru/product/<sku>/。 - 产品线按 offer 前缀自动归类(猫抓板/修正带/牵引绳/…) 。
- ⚠️ 写 xlsx 前必须先把所有 sheet 读进内存,否则 openpyxl 边写边读会
EOFError
损坏文件(踩过)。脚本已内置备份 + 全内存写入。 - 数据源:
/v3/product/list(visibility=ALL) +/v3/product/info/list+/v4/product/info/attributes+mappings/sku_map.json。
★★ 猫抓板矩阵建卡 (build_claw_cards.py)
按造型做多张卡(颜色作变体轴),类目 cat=17028968 / type=95240:
python scripts/build_claw_cards.py --dry # 空跑
python scripts/build_claw_cards.py # 真实建卡
- 6 卡: 笔记本(Домик)/波浪板(Волна)/直板(Доска)/S板(Доска)/贵妃板(Лежанка)/箱子款(Домик)。
- 架构同
build_noncat_cards.py(variant_upload.build_item + import_variants + set_stock + host_upload)。 - 必填: 85 Бренд=Нет бренда / 8229 Тип=type_id / 9048 Модель(卡内一致→合并); 变体轴 10096 颜色 + 10097 颜色名。
实战新品: 路亚饵套装 (build_lure_card.py)
2026-10-07 实战选品首个成功案例(验证全链路):
python scripts/build_lure_card.py --dry # 预览(5 变体)
python scripts/build_lure_card.py # 真上架(上传图+建卡+设库存)
- 选品依据: Ozon Воблер 类热销 700+ 评论 @ ¥50-92(CNY显示); 1688 威海回声86% 跨境热销。
超轻(单品6-22g)+一件代发+50%跨境占比 -> 符合“轻量刚需”选品硬规则。 - 类目: cat=17028702 / type=94386 (Воблер); 变体轴 10096 颜色(aspect)。
- 成本: 五只盒装 ¥13-17.5 / 实重 90-110g; 定价 ¥61-73 (40%净利)。
- 实测结果: 5/5 在售, Ozon SKU 5969596119~5969596765, 库存 100。
- 源图:
_lure_clean/clean_03_cropped.jpg(已裁中文标)。
能力回归测试(改动/清理后必跑)
python scripts/capability_test.py # 全量(含 CLI 启动 + 逻辑实跑) -> exit 0 才算好
python scripts/capability_test.py --quick # 快速(仅 import + 数据 + 关键逻辑)
检查: ①40 个核心库 import + 关键函数 ②数据/工作文件在位(含 workspace/mappings/sku_map.json)
③关键 CLI 可启动 ④核心逻辑实跑(定价/RETS 费率/禁词/类目树)。纯只读, 不发起任何写操作。
已合并/废弃脚本(2026-10-07 清理)
本地 .trash/scripts_20261007{,_merge}/ 留存(可恢复), 对应替代:
- host_upload2 → host_upload(已内置 --verify/upload_many 串行验证重试)
- fix_claw_content/set_claw_images → 通用 one_pass_import / boost_rating / set_desc
- make_image_set(v1) → make_image_set2
- rich_content_v3 → rich_content_v4; price_final → price_rets; oss_upload → host_upload/qiniu_upload
- fix_glove_attrs/fix_glove_cards → fix_glove_final
- 一次性调试/探针: _t_* / _attr_probe* / cart_test / imgsearch_test 等(已清)
- 选品实验/废弃: ozon_probe ozon_net bcs_* sample_warm make_marketing_imgs rebuild_imgs make_ps_images retitle_remerge check_merge
脚本清单(自动生成)
<!-- AUTO-SCRIPT-LIST:BEGIN -->
| 脚本 | 用途 |
|---|---|
ads_reverse.py |
广告反推选品 (选品法⑤) |
aibuy_search.py |
1688 跨境专供批发平台 (aibuy.1688.com / "1688牛顿·AI智能采购") 关键词搜索 |
align_oldprice.py |
把指定店铺所有商品的划线价对齐到统一比例(默认 0.55) |
apply_reprice.py |
★批量改价 (一次性到位, 遵守"不频繁改价"铁律) |
archive_products.py |
归档/取消归档 商品。 |
auto_list.py |
一条命令: 1688 链接 → 全流程上架编排。 |
auto_media.py |
通用商品素材自动生成 (火山方舟 API)。 |
auto_media_var.py |
多变体商品: 用每个变体自己的1688 SKU图当参考, 生成【独立主图+细节】。 |
auto_pipeline.py |
Ozon 跨境一键总控 (龙哥 2026-09-20 要的"一条链接全自动")。 |
auto_select.py |
一键选品总控 (龙哥 2026-10-07)。 |
backfill_costs.py |
用 list_and_price 的抓取逻辑, 批量回填台账成本口径 |
banned_words.py |
Ozon 俄语文案「禁词自检」通用模块 (★本店防驳回) |
batch_gen.py |
稳健批量生成: 每品独立子进程 + 传标题(免CDP) + 失败继续 + 断点续跑。 |
bcs_cats.py |
BCS 类目TOP (近28天热销类目) 拉取 + 竞争度分析 |
bcs_select.py |
BCS卖家国度(ozon.bcserp.com) 选品数据拉取 |
boost_collars.py |
把项圈卡(8变体)内容评分拉满到 100。 |
boost_collars_rich.py |
给项圈 8 变体补 Rich-контент(11254), 拉满内容评分。 |
boost_rating.py |
★批量补属性+富内容+视频(冲100) |
build_card1_shovel.py |
建卡1「可伸缩雪铲 3色」到 Ozon。 |
build_catgrass_cards.py |
猫草磨牙棒 Ozon 上架 (2 卡, 变体=8962 根数)。 |
build_claw_cards.py |
★猫抓板矩阵: 按造型6张卡(颜色变体轴) |
build_collar_card_v3.py |
项圈卡 v3 (用 1688 官方 SKU 白底图) |
build_glove_cards.py |
宠物免洗手套/指套 2 张卡上架。 |
build_lure_card.py |
路亚饵(羽毛亮片钩)套装卡。 |
build_noncat_cards.py |
非猫狗宠物矩阵卡 (扩展"宠物全谱系")。 |
build_pet_bowl_cards.py |
建 4 个宠物碗/饮水卡 (Ozon 17028673)。 |
build_pet_cards.py |
建宠物冬季矩阵卡。 |
build_ps_set.py |
基于 make_ps_images 的干净产品图, 生成 Ozon 8 图营销集 |
build_shovel_imgs.py |
为"可伸缩雪铲"5 色生成 8 张 Ozon 营销图(方案A:先建卡,图后续精修)。 |
build_title.py |
★按痛点关键词生成俄文标题 |
build_winter_cards.py |
建冬季车品剩余卡片(卡2-6)。 |
cand_categories.py |
★★候选类目反推: 按选品画像打分 |
capability_test.py |
技能包能力回归测试(清理/改动后必跑)。 |
cat_matcher.py |
1688 商品 → Ozon 类目匹配 (语义版, 方案3: 粗筛+LLM挑+人工确认+记忆) |
cdp_eval.py |
在已登录的 seller.ozon.ru 页面执行任意 JS, 返回结果。 |
cdp_launch.py |
启动/检测/★关闭 CDP Chrome(--close) |
cdp_shot.py |
(无说明) |
cert_tools.py |
Ozon 证书/文件状态查询工具 (走卖家后台内部 API) |
check_content_rating.py |
批量查在售商品内容评分 (100 / 未满分缺什么) + 缺口诊断 (CDP) |
check_docs.py |
检查所有在售商品的证书/文件状态。 |
claw_style_recog.py |
猫抓板 SKU 图「款式识别」兜底(文件名无款式关键词时用)。 |
clean_c_drive.py |
C盘清理: 只清缓存/临时/更新包残留。默认 dry-run; --go 才真删。 |
clean_cn_imgs.py |
智能清除 1688 商品图上的中文文字(盖字/擦字), 输出干净底图。 |
clean_cn_inpaint.py |
用 cv2.inpaint (内容识别填充) 直接 PS 掉 1688 图上的中文, |
clean_cn_ocr.py |
用 Windows 原生 OCR 精确定位中文文字, 生成精确 mask, |
cleanup_out.py |
定期清理产出区垃圾 (2026-10-11 龙哥定)。 |
cleanup_tmp.py |
上架/台账收尾清理(每次 sync_ledger 后自动跑)。 |
competitor_best.py |
★ Ozon 官方"热销竞品榜"抓取 + 文字分析简报 |
competitor_scan.py |
Ozon 竞品价带扫描 (v2: 走 entrypoint-api, 结构化 + 跨境过滤)。 |
compliance_check.py |
合规预检 (选品第一关) — 2026-09-20 |
content_templates.py |
跨境俄语 Listing 模板库(照本店出单爆款 + 三款修正带实战沉淀)。 |
daily_flow.py |
订单日报: 跨境巴士拉单 → 映射表查货源 → (可选)1688 加购 |
delete_products.py |
彻底删除商品(释放 SPU)。★危险操作, 需 --confirm。 |
detail2brief.py |
从 1688 详情页提炼「商品简报」, 供豆包出图参考。 |
dl_live_main.py |
(无说明) |
doubao_genimg.py |
通过 豆包 网页版(CDP自动化) 生成 Ozon 俄语电商场景图。 |
dual_store.py |
双店铺版上架/操作助手 (2026-10-14 龙哥新规) |
fetch1688.py |
★1688 关键词抓货源(GBK + CDP) |
fetch1688_imgs.py |
★抓 1688 商品真图→本地(供营销图) |
fetch_official_intel.py |
抓 Ozon 卖家学堂(小鹅通)公开目录, 快照存档。 |
fetch_page.py |
打开 dev.ozon.ru 页面并抓正文。 |
fetch_tree.py |
拉 Ozon 类目树并扁平化到 workspace/references_data/ozon_tree_zh.json |
fill_template.py |
用商品数据填充 Ozon XLS 模板 (2026-09-19) |
find_category.py |
★类目适配层: 按词找 cat/type/变体轴(必跑!) |
find_source.py |
批量找同款一条龙 (搜索->筛选->排序->抓规格+定价)。 |
fix_claw_rich.py |
修复猫抓板 4 个 offer 的富内容 (erased_attribute_value)。 |
fix_collar_repush.py |
修复: ①重推 blk-28(CDN 拉图失败) ②清除所有项圈的无效视频封面(cover_unprocessed 警告) |
fix_glove_final.py |
最终修复: 8图(重传) + 视频(21841+21837) + 全属性 + 描述4191 + 尺寸。 |
fix_laserpaw_rich.py |
修 laserpaw 富内容被拒 (DESCRIPTION_DECLINE @11254): 重建更饱满的纯俄语富内容并重推。 |
fix_lure_variants.py |
修复路亚饵 5 变体的 double_without_merger_offer。 |
fix_oldprice.py |
★批量补/对齐"划线价"(old_price) (2026-10-15 龙哥) |
fix_p98_prices.py |
修复"¥98占位价"商品: 从台账回填真实售价 + 按口径补划线价 |
fix_rich_chars.py |
修 DESCRIPTION_DECLINE(11254) 里被编码搞坏的字符, 重新提交。 |
follow_pipeline.py |
跟卖一条龙: 抓Ozon热销 -> 图搜1688同款 -> 双口径核算 -> 写Excel。 |
gen_claw_params_v2.py |
猫抓板 14 SKU 最终上架参数 v2: 真实重量 + 40%净利实售价 + 划线价(折扣形式)。 |
gen_doc.py |
★自动生成本清单(扫 scripts/) |
gen_jobs_from_best.py |
跟卖选品: 把 Ozon 热销品(ozon_best 输出)转成 1688 搜索任务。 |
gen_listing.py |
新品一键出全套 Listing 内容(标题/描述/hashtags) → attrs JSON。 |
gen_prompts.py |
按商品信息, 从提示词模板批量生成"可直接喂豆包"的完整提示词。 |
get1688_sku_weights.py |
★从1688页抓每SKU真实重量(g) |
get_ozon_cate_commission.py |
查类目佣金 |
get_rating.py |
查内容评分(CDP fetch) |
grab_imgs.py |
从1688详情页抓全部图 (主图/SKU图 + 详情图)。 |
grab_sku.py |
抓1688 offer 的 SKU 属性(颜色/规格 -> imageUrl + name)。 |
grab_weight.py |
抓 1688 详情页「真实重量/规格/尺寸」。 |
host_upload.py |
上传图/视频到图床(自有/受信, HOST_UPLOAD) |
img_dedupe.py |
图片判重(aHash) |
img_qc.py |
★上传前图质检 |
imgsearch_report.py |
跟卖核算: 图搜货源 + Ozon 价位 → 出可跟卖清单。 |
jseval.py |
CDP 页面跑任意 JS(调试) |
list_and_price.py |
一键 1688链接 → 定价表(自动抓1688运费) |
list_aspects.py |
查该类目所有 is_aspect=True 的属性 (真正的变体维度)。 |
listing_content.py |
标题/描述/hashtag 模板引擎(照本店 2 款出单爆款提炼)。 |
llm_pick.py |
DeepSeek 从候选类目里挑 Top3(供人工确认)。 |
logistics_rules.py |
物流计费规则 |
make_assets.py |
★★一键素材: 图+视频+富内容+质检 |
make_bgm.py |
生成一段温暖柔和的免版权背景音乐 (BGM)。 |
make_follow_tables.py |
跟卖运营两表(跟卖选品表 + 动销追踪表)。 |
make_image_set2.py |
★真图→8张营销图(叠卖点/尺寸/痛点) |
make_scene_imgs.py |
生成「薰衣草香包样板」风格的 Ozon 营销图。 |
make_slideshow.py |
用主图拼 slideshow 视频 + 俄文字幕。输出 MP4 (H.264 800x800)。 |
make_slideshow_video.py |
无同款实拍视频时, 用商品图做动态幻灯片视频。 |
make_video.py |
★图→Ozon 合规竖版视频 |
margin_screen.py |
倍数快筛 (选品快筛 · 第①道粗筛) |
market_daily.py |
Ozon 每日大盘数据 (选品根本) 一键推送 |
market_daily_run.py |
每日大盘推送入口 (供 cron 用, 自愈前置) |
market_share.py |
Ozon 官方热销榜 → 按类目算 Top5 卖家市场份额, 筛出低集中度(蓝海)类目。 |
match_category.py |
1688 商品 → Ozon 类目推荐 (Top-N) |
miaoshou_scan.py |
妙手 ERP Ozon 选品扫描器 (萧南公式 + 净利核算) |
ms_search.py |
妙手ERP 的 1688 搜同款/货源搜索 (官方授权 API, 不走我们 IP, 天然不被风控) |
multi_list.py |
★多规格: 抓规格→按价档分组→逐档定价→登记 |
ogl_profit_audit.py |
用最新 OGL 定价重算全店利润, 并给出划线价范围。 |
one_pass_import.py |
内容评分一次到位 (图+视频+全属性+描述+尺寸) 通用封装 |
optimize.py |
单条龙(图+视频+富内容) |
order_to_cart.py |
★Ozon 订单 → 1688 加购物车(含购物车核对) |
oss_upload.py |
阿里 OSS 图床上传 (替掉七牛; 自带 https, 无需备案) |
outpaths.py |
统一产出路径 (2026-10-11 龙哥定规)。 |
outside_sources.py |
站外选品源导航 & 配置检查 (选品法①) |
ozon_api.py |
Seller API 客户端 |
ozon_best.py |
跟卖选品: 抓 Ozon 搜索/榜单, 按"评论数(=销量代理)"排序, 导出候选品。 |
ozon_commission.py |
Ozon 类目佣金查询(按实际类目 + 售价档自动匹配) |
ozon_highlight_pet.py |
从 Ozon 中国馆(highlight)抓商品 + 毛子ERP指标, 按阈值筛宠物类。 |
ozon_img2_1688.py |
图搜跟卖: Ozon 商品图 -> 1688 图搜同款 -> 报价 -> 利润核算。 |
ozon_nodisc_scan.py |
无折扣白牌轻小件选品扫描 (龙哥 2026-10-08 活路线)。 |
ozon_pick.py |
基于 Ozon 后台官方「什么好卖」数据(ozon_wts)做选品筛选。 |
ozon_scan.py |
扫 Ozon 搜索结果(真实导航 DOM, 抗 403 风控)。 |
ozon_seo.py |
Ozon 俄文 SEO 标题/描述生成器 (A为依据: 扒真实搜索/排名词)。 |
ozon_wts.py |
封装: 直接调 Ozon 后台 what_to_sell/data/v3 (通过页面 fetch, 带 cookie 鉴权) |
pdd_pifa.py |
拼多多批发(pifa.pinduoduo.com) 关键词搜索 (DOM 抓取) |
pick_candidates.py |
从 cand_categories 结果里, 按老徐画像筛「可做商品」 |
pick_clean_imgs.py |
从 1688 抓来的图里【优选无字图 + 计算自动裁切参数】。 |
pick_flow.py |
「按老徐方向」统一选品工作流 (2026-09-22 新增) |
pics_import.py |
用 Ozon 官方 /v1/product/pictures/import 修复商品图片错误。 |
pipeline.py |
★★一键全链路(1688链接→上架→评分100) |
preflight.py |
★★上架准入关卡(成本口径/40%净利/重量/素材) |
price_advice.py |
Ozon 价格指数抓取 + 跟价可行性核算 (★本店最终版) |
price_compare.py |
定价 + Ozon 竞品比价 (一条龙, 龙哥 2026-09-21 需求) |
price_redline.py |
客单价红线检查 (上架后运营闭环 · 品控) |
price_rets.py |
★★RETS 定价 + 后台填价换算 |
price_shop.py |
用真实店铺数据批量跑定价引擎 |
price_targets.py |
价格指数纠偏: 按 Ozon 价格指数反推"目标价", 把红/黄灯商品拉回 index<=1.0 |
pricing_engine.py |
Ozon 跨境选品定价引擎 (v1) |
probe_1688_imgsearch.py |
探测 1688 图搜接口。 |
probe_1688_weight.py |
1688 重量/包装探测: 拦 offer 详情接口 + DOM 抽重量与包装数量。 |
process_video.py |
处理使用视频: 盖中文字幕 + 叠俄文卖点。 |
product_import.py |
合并式导入(防丢字段) |
profit_calc.py |
★货源价+售价 → 净利/净利率 |
publish_skill.py |
一键发布 ozon-crossborder 到 skillhub (含发布前清理 + 发布后恢复)。 |
qiniu_upload.py |
七牛云(Kodo)图床上传 |
rc_validate.py |
用官方 schema.json 校验 Rich-контент JSON。 |
rebuild_declined.py |
重建被 DESCRIPTION_DECLINE 拒的卡片。 |
rect_clean.py |
定向抹除: 只抹指定矩形区域的中文(不碰产品)。用于洁牙/洁耳桶图。 |
register_listing.py |
上架后自动登记到「上架台账」(每上架一个商品就更新表格)。 |
replace_media.py |
用 AI 生成的 6图+视频 替换已上架商品的媒体。 |
reprice_report.py |
★在售商品重定价报告 (口径统一后) |
retry_stock.py |
★新商品打标未完成时定时重试设库存 |
rets_rates.py |
RETS 费率速查 |
review_fetch.py |
Ozon 前台评论抓取 + 痛点统计 (老徐选品法④) |
review_mining.py |
差评挖掘选品 (选品法②, 半自动) |
rich_content.py |
★构建 Rich-контент JSON |
ru_check.py |
俄语出图文字拼写/黑名单校验。 |
ru_copy.py |
用火山方舟文本模型, 把商品中文信息 -> 标准俄语电商文案。 |
ru_overlay.py |
RU 图片加工器 (可复用): 去中文后的图 -> 叠俄文卖点条 + 公制尺寸标注 |
scan_product_errors.py |
扫在售商品的"错误/待修正"状态 |
schema_lib.py |
离线类目属性库 (从 Ozon XLS 模板的 configs 提取) |
season_calendar.py |
俄罗斯全年选品日历 (自建, 替代老徐的付费表) |
seasonal_pull.py |
应季选品线索抓取 (天气/节日驱动), 从搜索结果捞 1688 货源线索 |
security_selfcheck.py |
安全自查: 按云鼎实验室审核常见原因扫描 SKILL.md + 脚本。 |
set_desc.py |
一键设置商品描述 (写入属性 4191, 并同步 item.description)。 |
set_price_ratio.py |
给指定 offer 设 price 和 old_price(=price/ratio)。 |
set_stock_all.py |
把所有在售商品库存设为 100 (两店, 各用自己的 OGL 仓)。 |
set_title.py |
修改 offer 标题(name), 保留全部属性/图片/价格/重量 |
shared_map.py |
类目映射共享记忆库(群体学习) |
shop_audit.py |
全店经营审计: 按 SKU 销量排名 + 按天营收 + 搜索曝光分析 |
shop_scan.py |
全店一键扫描 (在售/归档/重复SPU/逐品错误/评分概览)。 |
skillhub_audit_status.py |
查询 skillhub 上某个 skill 的版本审核状态。 |
sku_map.py |
Ozon SKU ↔ 1688 货源 映射表 |
spu_check.py |
上架前 SPU 撞车预检 (2026-10-15 新增)。 |
src_compare.py |
— 多渠道货源比价 (1688 + 拼多多移动版 + 可选淘宝) |
store_rules.py |
双店定价规则 (2026-10-14 龙哥定) |
sync_ledger.py |
把 Ozon 在售商品同步进桌面台账 (★两店分页, 2026-10-15 龙哥定)。 |
sync_orders.py |
跨境巴士 (kuajing84) 按日期拉取 Ozon 订单 (主动拉单, 不依赖 Ozon push) |
title_audit.py |
★诊断已上架商品标题 是否有埋词问题。 |
translate_bullets.py |
1688 中文商品信息 → ★俄文营销卖点/标题/描述★ (DeepSeek)。 |
unified_config.py |
定价/成本口径唯一来源(内部) |
upscale.py |
图片放大 (Lanczos + 轻度锐化), 把小图升到 Ozon 要求尺寸 |
variant_upload.py |
★多变体上架合并一张卡 + 设库存 |
viability.py |
跟卖可行性边界: 给定重量, 算"最低售价"才能在 RETS 直发下达到目标净利率。 |
vscan.py |
视频抽帧拼 contact sheet, 用于人工核查「画面里还有没有中文」。 |
wait_rating.py |
异步复核 Ozon 商品内容评分(非阻塞上架的配套)。 |
wocr.py |
Windows 原生 OCR (Windows.Media.Ocr) 封装, 直接跑, 无需 async 依赖。 |
xls_template.py |
Ozon XLS 模板解析/生成工具 (研究版 2026-09-19) |
yandex_wordstat.py |
Yandex Wordstat 俄语挖词 (相关查询/联想词 + 4分类) |
operate/ads_helper.py |
广告/活动助手 (上架后运营闭环 · 第④步) |
operate/analytics_pull.py |
拉取链接健康数据 (Ozon 卖家分析 API) |
operate/diagnose.py |
链接健康诊断器 (上架后运营闭环 · 第②步) |
operate/operate_flow.py |
上架后运营闭环 一键入口 (2026-09-22 新增) |
operate/promo_plan.py |
促销/降价决策器 (上架后运营闭环 · 第③步) |
<!-- AUTO-SCRIPT-LIST:END -->
示例 (Examples)
# 1) 选品比价: 1688 链接 -> 成本/利润
python scripts/list_and_price.py 748944125188 --g 30
# 2) 上架准入检查 (失败=exit2, 拒绝上架)
python scripts/preflight.py --cost 3.5 --g 100 --dom 4 --commission 0.12
# 3) 在售品重定价报告
python scripts/reprice_report.py
# 4) 一键全链路上架 (真实上架前自动跑 preflight)
python scripts/pipeline.py --url https://detail.1688.com/offer/748944125188.html --stages all --confirm-cost
# 5) Ozon 出单 -> 1688 加购 (默认 dry-run)
python scripts/order_to_cart.py --pull # 只报告
python scripts/order_to_cart.py --pull --live # 真加购 (付款仍人工)
# 6) 安全自查 + 文档一致性
python scripts/security_selfcheck.py
python scripts/gen_doc.py --check
限制 (Limitations)
- 凭证: 需
config.json或环境变量OZON_CLIENT_ID/OZON_API_KEY; 不写死密钥。
环境变量 key 失效时ozon_api.call会自动回退到config.json的 key (自愈)。 - 浏览器: 依赖本机 Chrome + CDP(端口 9333) 且需已登录 1688 / Ozon / 跨境巴士; 无登录态无法抓取。
- 抓取: 1688/Ozon 页面结构会变, 选择器可能需维护; 抓不到的字段会报警, 不静默兜底。
- 人工卡点: 真实上架需
--confirm-cost; 付款永远人工, 脚本只做到加购。 - 改价: 遵守"不频繁改价", 目标净利率硬规则 40%, 低于此值 preflight 拒绝。
- 无破坏性操作: 不使用
rm -rf等; 归档优先于删除。 - 外部端点: 仅访问业务必需域名(见
security_selfcheck.py白名单), 不回传用户数据。