# toolbox **Repository Path**: VanSure/toolbox ## Basic Information - **Project Name**: toolbox - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-12 - **Last Updated**: 2026-06-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 淘宝 SKU 批量提取工具 **多链接 SKU 提取桌面工具** — 粘贴淘宝/天猫商品链接,自动提取全部 SKU(规格、价格、库存),一键导出 Excel。 ## 技术架构 | 层级 | 技术栈 | |------|--------| | 桌面框架 | Tauri v2(Rust 编译为原生 Windows exe) | | 前端 | Vite + Vue 3 + TypeScript + Element Plus | | 爬虫引擎 | Python + Playwright(PyInstaller 打包为独立 exe) | | 浏览器 | Playwright Chromium(打包进安装包) | | 导出 | openpyxl → Excel | ## 项目结构 ``` d:\Test\SSS\ ├── index.html # SPA 入口 ├── package.json # 前端依赖与脚本 ├── vite.config.ts # Vite 构建配置 ├── tsconfig.json # TypeScript 配置 ├── .gitignore / .npmrc / README.md │ ├── src/ # Vue 3 前端 │ ├── main.ts # 入口(Element Plus + Router) │ ├── App.vue # 根布局(侧边栏 + router-view) │ ├── router/index.ts # 4 条路由 │ ├── composables/useTaskState.ts # 全局任务状态 │ ├── types/index.ts # TS 类型定义 │ ├── views/ │ │ ├── Home.vue # 首页:多链接输入 + 环境检测 │ │ ├── TaskDetail.vue # 任务详情:进度 + 日志 + SKU表格 + 导出 │ │ ├── History.vue # 历史记录(占位) │ │ └── Settings.vue # 系统设置(占位) │ └── components/ │ ├── LogPanel.vue # 日志面板(可复用) │ ├── ProgressBar.vue # 进度条(可复用) │ ├── SkuTable.vue # SKU 表格(可复用) │ └── StatsCards.vue # 统计卡片(可复用) │ ├── src-tauri/ # Tauri / Rust 后端 │ ├── Cargo.toml # Rust 依赖 │ ├── tauri.conf.json # 窗口 / 打包 / sidecar 配置 │ ├── capabilities/default.json # 权限声明 │ ├── binaries/ │ │ └── autotest-x86_64-pc-windows-msvc.exe # Python sidecar(PyInstaller 单文件) │ ├── browsers/chromium/ # Chromium 浏览器(~150MB) │ └── src/ │ ├── main.rs # Rust 入口 │ └── lib.rs # 8 个 Tauri Commands │ └── sidecar/ # Python 爬虫源码 ├── requirements.txt # playwright, openpyxl ├── build_sidecar.ps1 # PyInstaller 一键打包 ├── main.py # CLI 入口(6 个子命令) ├── check_env.py # 环境检测 ├── test_framework.py # Playwright 浏览器封装 ├── sku_extractor.py # SKU 提取(从商品页解析) ├── excel_utils.py # Excel 导出 ├── login_manager.py # 淘宝扫码登录(预留) ├── store_search.py # 店铺搜索(预留) ├── product_traversal.py # 商品遍历(预留) └── stats_engine.py # 统计分析(预留) ``` ## 前端路由 | 路径 | 视图 | 说明 | |------|------|------| | `/` | Home.vue | 多链接 textarea + 环境状态指示器 + 开始提取按钮 | | `/task/:id` | TaskDetail.vue | 实时进度条 + 日志面板 + SKU 数据表格 + 导出 Excel | | `/history` | History.vue | 历史记录列表(占位) | | `/settings` | Settings.vue | 登录管理、浏览器设置(占位) | ## Tauri Commands | 命令 | 参数 | 说明 | |------|------|------| | `check_environment` | — | Rust 原生检测 Python / Playwright / Chromium(5 秒超时保护) | | `setup_environment` | `component: "packages" \| "browser"` | 安装缺失依赖 | | `taobao_login` | — | 触发淘宝扫码登录 | | `check_login_status` | — | 检查登录态有效性 | | `run_collection` | `links: string[]` | 启动多链接 SKU 采集(流式事件) | | `cancel_task` | — | 终止正在运行的任务 | | `export_excel` | `dataJson: string, outputDir: string` | 导出 Excel | | `open_in_system` | `path: string` | 系统默认程序打开文件 | ## Python CLI 子命令 ``` autotest check # Rust 已验证,此命令保留供调试 autotest setup --component # 安装依赖 / 浏览器 autotest login --state-path # 扫码登录 autotest check-login --state-path # 检查登录态 autotest run --links-file [--chromium-path ] # 主提取 autotest export --data-file --output-dir # 导出 Excel ``` ## 数据流 ``` 用户粘贴多链接 → Home.vue: 解析 URL 列表,存入 window.__pendingLinks → router.push → TaskDetail.vue → onMounted: 注册事件监听 (autotest-output / autotest-data / autotest-done) → invoke("run_collection", { links }) → Rust lib.rs: 写入临时文件,spawn sidecar → autotest.exe run --links-file --chromium-path → Python main.py: 1. 从文件读取链接列表 2. 用 TestFramework 启动 Chromium 3. 逐个访问链接 → sku_extractor 提取 SKU 4. stdout 输出进度行 + DATA_JSON: 最终数据 → Rust 监听 stdout: → emit("autotest-output") / emit("autotest-data") → Vue 实时更新日志 + SKU 表格 → 完成 → autotest-done → 用户点击"导出 Excel" ``` ## 事件流 | 事件名 | 触发时机 | 载荷 | |--------|----------|------| | `autotest-output` | Python 每行 stdout | `string`(进度文本) | | `autotest-data` | Python 输出 `DATA_JSON:` | `string`(JSON 数组) | | `autotest-done` | 进程终止 | `{ success: bool, exit_code: int }` | | `autotest-result` | 导出完成后 `RESULT:` | `string`(文件路径) | | `setup-*-output` | 安装过程 stdout | `string` | | `setup-*-done` | 安装完成 | `{ success: bool, exit_code: int }` | | `login-output` | 登录过程 stdout | `string` | | `login-done` | 登录完成 | `{ success: bool }` | ## 环境要求 ### 开发环境 | 组件 | 版本 | 说明 | |------|------|------| | Node.js | ≥ 18 | 前端构建 | | pnpm | 最新 | 包管理器 | | Rust | ≥ 1.70 | Tauri 编译 | | Python | ≥ 3.9 | Sidecar 开发调试 | | Playwright Chromium | — | 浏览器自动化 | ### 运行时环境(用户端) | 要求 | 说明 | |------|------| | Windows 10/11 64-bit | 唯一硬性要求 | | WebView2 | 系统自带,无需安装 | > Python、Node.js、Rust、Playwright 全部内置于 exe,用户无需安装。 ## 快速启动 ```bash # 1. 安装前端依赖 pnpm install # 2. 安装 Python 依赖(开发调试用) cd sidecar && pip install -r requirements.txt && playwright install chromium # 3. 构建 Python Sidecar(首次 / Python 代码变更后) pnpm run sidecar # 4. 启动开发模式 pnpm run tauri:dev # 5. 生产打包 pnpm run tauri:build ``` ## npm 脚本速查 | 脚本 | 说明 | |------|------| | `pnpm dev` | 启动 Vite 前端开发服务器(端口 1420) | | `pnpm build` | TypeScript 检查 + Vite 生产构建 | | `pnpm run sidecar` | PyInstaller 打包 sidecar + 复制 Chromium | | `pnpm run tauri:dev` | 检查 sidecar → 启动 Tauri 开发模式 | | `pnpm run tauri:build` | 生产打包(NSIS 安装包 → `src-tauri/target/release/bundle/`) | ## 与原始 PRD 的主要变更 | 变更 | 原设计 | 当前实现 | 原因 | |------|--------|----------|------| | 自然语言处理 | LangChain + 规则引擎 | **已移除** | 简化流程,专注于核心提取功能 | | 输入方式 | 自然语言描述 | 直接粘贴商品链接 | 更精准、更直接 | | 店铺搜索 | 自动搜索匹配旗舰店 | **已移除**(保留源码) | 链接直连无需搜索 | | 商品遍历翻页 | 全店自动翻页 | **已移除**(保留源码) | 改为指定链接逐条提取 | | 环境检测 | 调用 Python sidecar | Rust 原生 + 5 秒超时 | 避免 sidecar shim 卡死 | | 事件命名 | `task-output/data/progress/stats/done` | `autotest-output/data/done` | 统一简洁 | | Rust 命令数 | 16 个 | **8 个** | 移除历史/设置/搜索等未完成功能 | | Sidecar 子命令 | 7 个 | **6 个** | `collect` → `run`,`--query` → `--links-file` |