---
name: sku-fetch
description: 扒 go2 图包. 用户说「扒图包 <款号>」「下载 <款号>」「扒 go2 <款号>」时触发. 包含 chrome-devtools 登录 + 图片验证码处理 + GBK 解压.
---

# SKU 扒 go2 图包

> 跑款第一步. 从 go2 平台拿下款号的全套精修图 / 单片 / 排版 / 主图，解压到 `~/下载/`.

---

## §1 go2 平台基础

### 1.1 角色

国内服装鞋包档口批发（`go2.cn`）. MAYAGI 全代发零库存 + 15 天预售（详 [[project-business-model]]）.

### 1.2 反爬纪律（[[mayagi/CLAUDE.md]]）

- 0.3-1 req/s 起步
- **单账号**（手机号 `13086663373`，[[reference-go2-phone]]）
- **不开多账号 / 不并发**
- Playwright + storage_state 保 cookie

### 1.3 图包结构（下载解压后）

```
~/下载/GO2-<档口>-<款号>/<款号>/
├── 主图/            # 51 张档口精修（少用作 source）
├── 单图/            # 51 张单片纯鞋 ⭐ 生图最常用源
├── 排版/            # 22 张拼接排版（含 1_04 spec 段）
└── images/          # 部分款额外（02_xx 等）
```

⚠️ **编码乱码勿重命名** — 文件名含汉字保留.

---

## §2 6 步扒图流程

### Step 1 · 找款号商品页 URL

```
chrome-devtools navigate http://z.go2.cn/all?q=<款号>
→ 提 a[href*="/product/"] (典型: http://z.go2.cn/product/<slug>.html)
→ slug 是 7-8 字符（如 ceeiqok / cekmemi / ceiaoqo / cimammm）
```

### Step 2 · 找档口主页（一次性，所有该档口款号共用）

```
chrome-devtools navigate <product_url>
→ body 顶部"<档口名>"链接 + URL pattern <slug>.go2.cn
→ 黑妹 = hem.go2.cn
```

### Step 3 · 进入下载中间页

登录态正常：
```html
<a href="javascript:;" onclick="vipcheck('https://www.go2.cn/main/product/download/<slug>?t=<ts>', '<slug>')">下载图片包</a>
```

登录态失效：
```html
<a href="javascript:layout();">下载图片包</a>
```
→ 需修复 session（见 §3 Session 失效处理）.

### Step 4 · 解析中间页

HTML response from `/main/product/download/<slug>`：

- **3 个下载档位**：
  - 精简包 450PX (~25M)
  - 标准包 750PX (~45M)
  - **原始包 原始尺寸 (~200M)** ⭐ 选这个
- 真实下载 URL pattern：
  ```
  https://dl.f.go2.cn/<档口>/<上传时间戳>/GO2-<档口>-<款号>.zip?e=<expiry>&token=<sig>
  ```
- ⚠️ Token URL 有效期 ~12 分钟，立即下载

### Step 5 · ⚠️ 图片验证码处理（按访问次数概率触发）

JS 函数 `isNeedVerifyCheck()` 每 N 次浏览触发一次. 中间页 mylink 字段为空 = 触发验证.

**验证 UI**：
- 显示 6 个 `li[data-index="0-5"]` 选项
- 1 张 `.verification-img` 提示图
- "确定"按钮
- 验证文字格式：`请从以下几张图中选出 <物体>` (常见物体: 包包 / 鞋子 / 衣服)

**流程**：

```js
// 1. chrome-devtools take_screenshot 看图
// 2. 用 Claude vision 识别哪个 li 是答案（index 0-5）
// 3. JS 模拟 click:
document.querySelectorAll('.verification-img li')[<answer_index>].click();
await new Promise(r => setTimeout(r, 300));
document.querySelector('#verification').click();
// 4. 等 2.5s AJAX 返回，mylink 填充
```

验证通过 → mylink 自动填实真实下载 URL → 提取.

### Step 6 · 下载 + GBK 解压

**下载**（Python + cookies）：

```python
import requests, time
url = "<token_url>"  # 从 Step 4 / 5 拿
cookies = {...}      # chrome-devtools 拿的全套
r = requests.get(url, cookies=cookies, stream=True)
with open(f"~/下载/GO2-<档口>-<款号>.zip", "wb") as f:
    for chunk in r.iter_content(chunk_size=8192):
        f.write(chunk)
time.sleep(3)  # 反爬节流：串行 + sleep(3s) between requests
```

**GBK 解压**（关键 — Linux `unzip` 默认 UTF-8 → 中文乱码 `GO2-╖в▓╞...`）：

```python
import zipfile
with zipfile.ZipFile("~/下载/GO2-<档口>-<款号>.zip") as z:
    for info in z.infolist():
        info.filename = info.filename.encode("cp437").decode("gbk")
        z.extract(info, "~/下载/")
```

---

## §3 ⚠️ Session 失效处理

### 现象

z.go2.cn 首页顶部显示登录态（手机号），但 product 页 "下载图片包" 按钮触发 `layout()` 弹登录窗.

### 根因

`go2_session.user_data` 是空字符串（server-side session 失效，cookie 还在）.

### 修复

用户在 chrome-devtools 浏览器**手动登录一次**（短信验证码到手机 `13086663373`），全套 `user_*` cookies 注入 → 跑款 PDP 流程可用.

### HTML 结构差异（v1 vs v2 中间页）

- **v1**（HM6125 / HM6124）：server-side 渲染 mylink，直接提取
- **v2**（HM2058 / HM6995）：mylink 为空 `'+download.file+'` JS 占位符 → AJAX 异步加载 → 触发 verification_img 后才填实

---

## §4 已扒清单（参考记录）

### 黑妹档口 (hem.go2.cn) — 4 款已扒（2026-05-15）

| 款号 | slug | 大小 | 备注 |
|---|---|---|---|
| HM6125 | `ceeiqok` | 215M | server-side 渲染 mylink |
| HM6124 | `cekmemi` | 256M | 同上 |
| HM2058 | `ceiaoqo` | 157M | ⚠️ 触发图片验证 |
| HM6995 | `cimammm` | 174M | 同上 |

### Rich1991 档口 — 已扒款

| 款号 | 路径 | 备注 |
|---|---|---|
| D7779 | `~/下载/GO2-发财Rich1991-D7779/` | 分趾芭蕾平底（调试样本，不在上架清单）|
| D7658 | `~/下载/GO2-发财Rich1991-D7658/` | 备用 |
| S7763 | `~/下载/GO2-发财Rich1991-S7763/` | 上架款 |
| L7825 | `~/下载/GO2-发财Rich1991-L7825/` | 上架款 |

### Rich1991 待扒（2026-05 批次）

- D7799 / D7753 / D7737

### 黑妹档口待扒（10 款总）

- HM6981 / HM6975 / HM6965 / HM6128 / HM6101 / HM2044（剩 6 款）

---

## §5 实操脚本

### 5.1 已沉淀脚本

- `scripts/heimei/fetch_4_packs.py` — 4 SKU 批量下载（无验证版，用 server-side mylink）
- `scripts/heimei/unzip_4_packs.py` — 批量 GBK 解压

### 5.2 验证码处理（手动 chrome-devtools MCP 走）

参考会话（2026-05-15 HM2058 / HM6995 案例）：
1. chrome-devtools 加载验证 HTML
2. take_screenshot
3. 主对话 Claude vision 识图
4. evaluate_script JS click 对应 li + 确认按钮
5. 等 mylink 填实
6. 提取真实下载 URL

---

## §6 反爬铁律（跨项目共用）

- **0.3-1 req/s 起步** — 不要急速并发
- **单账号** 13086663373（mayagi 项目 / mayagi-ops / mayagi-warehouse 共用）
- **不开多账号** — 一旦封号全项目瘫痪
- **连续失败 5 次熔断** — 让用户介入查 cookie / session

---

## §7 跨 skill 跳转

- 图包扒完 → 生成图片 `Skill(skill="sku-generate")`
- 详情页 spec 必查 → `Skill(skill="sku-htmlpage")` §7（go2 1_04 数据强制）

---

## §8 改进备忘

- **2026-05-15** 4 款 HM 扒图实战 — 沉淀图片验证码处理流程（chrome-devtools + Claude vision 识图 + JS click）
- **2026-05-14** 中间页 v1 vs v2 差异（server-side 渲染 mylink vs AJAX 异步加载）
- **2026-05-13** GBK 解压必须 cp437 → gbk 转码（Linux unzip 默认 UTF-8 乱码）
