Skip to content
Back to skills

1688 Selection Upload

ASecurity

通过 BrowserWorker 插件浏览器,在 1688 搜索结果页筛选商品,并勾选符合条件的采购助手商品。适用于 1688 选品、扫描、月代销/48H 揽收筛选、待采商品勾选。

  • 6 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 10, 2026
developmentjavascriptpythongojavabash

Security analysis

A100/100

Pro scans all 6 files and shows the line behind each finding

Scanned September 10, 2026

npx -y skills add huawolf/VaneWorker --skill 1688-selection-upload --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 1688 Selection Upload?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 1688 Selection Upload
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/huawolf-1688-selection-upload/badge)](https://www.skillsdirectory.com/skills/huawolf-1688-selection-upload)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: 1688-selection-upload
description: 通过 BrowserWorker 插件浏览器,在 1688 搜索结果页筛选商品,并勾选符合条件的采购助手商品。适用于 1688 选品、扫描、月代销/48H 揽收筛选、待采商品勾选。
title: 1688选品和上架
example: |-
  > **选品扫描**:分析指定关键词的 1688 搜索结果并筛选符合要求的商品,例如:"扫描 3 页女鞋,看看哪些符合要求"

  > **勾选待采**:自动勾选符合过滤条件且未处理过的商品,例如:"勾选女鞋,最多 5 个,先 dry run 看看"
version: 2.0.0
---

# 1688-selection-upload

> [!IMPORTANT]
> **前置插件约束**:运行本技能前必须确认 1688 采购助手插件 (`1688-extension`) 已安装。平台会在触发 `1688-selection-upload` 任务时自动校验插件状态。若未检测到 1688 插件,平台将拦截任务并引导由**运营主管**(ops_director)使用 `chrome-plugin` 技能安装 1688 插件。

统一入口:

```bash
python3 {baseDir}/run.py <command> [options]
```

该技能使用项目内置 `BrowserWorker` daemon 的 extension-first transport,不再直接依赖 CDP 控制页面,也不要求用户机器安装 ChromeDriver、Playwright、Selenium 或固定 Chrome 路径。页面读取通过 BrowserWorker 插件浏览器执行 `browser.evaluate(...)`,因此能读取 1688 原页面和采购助手插件渲染到当前 DOM 中的内容。

## 意图判断

触发本技能:

- 用户要求在 1688 搜索、选品、筛选商品。
- 用户提到采购助手、待采商品勾选、选品勾选。
- 用户要求按月代销、48H 揽收率、实力商家/源头旗舰筛选。

命令选择:

```text
只查看符合条件的商品 -> scan
勾选符合条件的采购助手商品,不最终提交 -> collect
```

## 命令

| 命令 | 用途 | 语法 |
| --- | --- | --- |
| `scan` | 扫描并返回符合条件的商品,不点击页面 | `python3 run.py scan [关键词] [--pages 页数]` |
| `collect` | 扫描并勾选符合条件商品,不点击最终提交按钮 | `python3 run.py collect [关键词] [--pages 页数] [--max 最大采集数] [--dry]` |

默认值:

- 关键词:`女鞋`
- `--pages`:`1`
- `--max`:`0` 表示不限制
- `--dry`:只列待勾选商品,不点击

## 新架构流程

1. `run.py` 获取浏览器锁,然后调用 daemon `/execute`。
2. `run.py` 必须传入本 skill 的 `action_search_path={baseDir}/scripts/actions`。
3. daemon 必须优先加载 `action_search_path` 下的 `scan_1688.py` 或 `collect_1688.py`;BrowserWorker 内置 actions 只是 fallback,不能覆盖本 skill 同名 action。
4. `/execute` 返回里的 `action_path` 可用于确认实际加载的 action 文件。
5. action 通过 `browser.goto/evaluate/wait_ms/request_help` 操作 BrowserWorker 插件浏览器页面。
6. action 先进入 1688 搜索页,输入关键词,进入搜索结果页。
7. action 拼接排序和商家过滤参数:
   - 销量降序:`sortType=va_sales360&descendOrder=true`
   - 商家标签:`filtMemberTags=5179713,5125953,5343297`
8. 分段滚动页面,等待懒加载和采购助手插件数据面板渲染。
9. 在页面 DOM 中提取商品卡片、月代销、48H 揽收、价格、勾选状态。
10. `scan` 返回符合条件商品;`collect` 只勾选商品卡片内的采购助手复选框,并更新 `data/ledger.json`。不要继续点击最终提交、确认、批量采集或一键上架按钮。

## 筛选口径

当前硬规则:

- `月代销 != "100以内"`,视为月代销 > 100。
- `48h揽收 > 90%`。
- 搜索 URL 会附带实力商家/源头旗舰相关标签过滤。

返回字段包括:

- `offerId`
- `title`
- `dx`:月代销桶值
- `ls`:48H 揽收率数字
- `price`
- `href`
- `qualify`
- `collected`

## 快速定位和排查

如果页面结构变化导致勾选失败,按这个顺序处理:

1. 先读取当前页面匹配的 `page_semantics`,优先按 `semantic_key` 理解关键元素和重复商品卡片,例如 `search.primary_input`、`search.submit`、`result_card`、`result_card.primary_link`、`selection.checkbox`。
2. `page_semantics` 缺失、低置信或执行失败时,再用 BrowserWorker `snapshot` 验证当前页面事实并补充证据。
   - 页面简单:可用 `full snapshot`。
   - 搜索结果/卡片列表:优先 `data snapshot`。
   - snapshot 返回的 `ref` / `handle` 只用于当前页面的一次性验证,不写入脚本或台账。
3. snapshot 找不到时,用小 JS probe 检查真实 DOM:

```javascript
(() => [...document.querySelectorAll("a.search-offer-wrapper,[class*='search-offer-wrapper']")]
  .slice(0, 20)
  .map(el => ({
    text: (el.innerText || "").replace(/\s+/g, " ").trim().slice(0, 240),
    href: el.href || el.querySelector("a[href]")?.href || ""
  })))()
```

4. 页面很复杂、hover 才出现按钮、插件 UI 难判断时,让用户用 BrowserWorker 扩展录制并上传。
5. 读取上传后的三层数据:
   - `*.trace.json`
   - `*.interests.json`
   - `*.script_hints.json`
6. 根据录制里的 `page_key/page_role`、`semantic_key` 和候选节点证据更新 `page_semantics`、action 的结构化目标或 DOM parser;不要把 `@eN`、临时 handle、长路径 selector 当作长期定位键。

## 人工处理

遇到登录、滑块、验证码时,action 会通过 `browser.request_help(...)` 提示用户在 BrowserWorker 插件浏览器中处理,然后继续执行。不要绕过安全验证。

## 输出和台账

`collect` 默认读取并更新本 skill 下的 `data/ledger.json`,避免重复勾选已成功的 `offerId`。也可以用环境变量 `MANAI_1688_SELECTION_LEDGER` 指向外部台账;如果旧版根目录 `ledger.json` 已存在且 `data/ledger.json` 不存在,会兼容读取旧文件。

`run.py` 默认将符合条件的商品链接保存到 `data/outputs/1688_selection_<关键词>.json`。如果 ManAI 全局配置里有 `data_directory`,或设置了 `MANAI_1688_SELECTION_OUTPUT_DIR`,允许写到外部目录。脚本和 action 实现必须留在 `{baseDir}/` 内;运行产物可配置。

## 验证

修改 action 后至少运行:

```bash
python3 - <<'PY'
from pathlib import Path
for p in [
  "scripts/actions/scan_1688.py",
  "scripts/actions/collect_1688.py",
  "run.py",
]:
    src = Path(p).read_text(encoding="utf-8")
    compile(src, p, "exec")
print("syntax ok")
PY
```

真实验证:

```bash
python3 run.py scan 保温杯 --pages 1
python3 run.py collect 保温杯 --pages 1 --max 3 --dry
```

Files in this skill

  • SKILL.md6.4 KB
  • info.json1.1 KB
  • ledger.json21 B
  • run.py9.3 KB
  • scripts/actions/collect_1688.py5.5 KB
  • scripts/actions/scan_1688.py10.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…