# goofish-item-detail

> Extracts full detail data from a single Goofish (闲鱼) second-hand item page, including title, price, seller info, description, images, tags, and want-count.

- Skill: `browser-act/goofish-item-detail` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add browser-act/goofish-item-detail`
- Raw SKILL.md: https://api.skillmd.com/api/skills/browser-act/goofish-item-detail/raw
- Safety review: CAUTION (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend, Coding & Dev Tools, Data & Analytics, Browser Automation
- Tags: Browser Automation, Ecommerce, Goofish, Item Detail, Python, Web Scraping, Xianyu
- Author: BrowserAct (https://skillmd.com/u/browser-act)
- Updated: 2026-07-06
- Page: https://skillmd.com/skills/browser-act/goofish-item-detail

---


# Goofish (闲鱼) — Item Detail

> item URL (or item_id + category_id) → full listing data: title, price, seller info, description, images, tags, want-count

## Language

All process output to user (progress updates, process notifications) follows the user's language.

## Objective

Load a single Goofish item detail page and extract its complete listing data including seller information, item description, image gallery, and attribute tags.

## Prerequisites

- Browser with an active Goofish session (login required — item detail pages require authenticated access)
- Target item URL format: `https://www.goofish.com/item?id={item_id}&categoryId={category_id}`

## Pre-execution Checks

### 1. Tool Readiness

If browser-act has been confirmed available in the current session → skip this step.

Invoke `browser-act` via Skill tool to load usage. If installation or configuration issues arise, follow its guidance to resolve then retry.

### 2. Login Verification

If login status for Goofish has been confirmed in the current session → skip this step.

Otherwise: open `https://www.goofish.com/` and observe the page:
- User avatar or account entry exists → logged in, continue
- Login/register prompt → not logged in; inform user that login is required; assist login flow

User refuses or cannot log in → terminate execution.

## Capability Components

> This Skill's operational boundary = what the user can manually do in their browser. It only reads data already displayed on the page. JS code is encapsulated in Python files under the `scripts/` directory, invoked via `eval "$(python scripts/xxx.py {params})"`. `$(...)` is bash syntax; use the bash tool for execution.

### Network Capture: load item detail page

The item detail API (`mtop.taobao.idle.pc.detail/1.0/`) auto-fires when navigating to the item URL. Provide parameters via URL:

1. `navigate https://www.goofish.com/item?id={item_id}&categoryId={category_id}`
2. `wait stable`
3. Proceed to DOM extraction below

Error handling:
- If a CAPTCHA slider appears ("Please slide to verify"): the session is rate-limited. Wait 5–10 minutes, or use remote-assist to complete the slider manually, then re-navigate.
- If "网络不见了" error page appears: the item page API call failed. Retry once after 30 seconds; if it persists, the session may be temporarily blocked.
- If item shows "该宝贝已下架" or similar: item has been removed/sold — skip and move to next item.

Note: Navigating to item detail pages in rapid succession (e.g., less than 2 seconds apart) increases the probability of CAPTCHA. Add 2–5 second delays between items in batch mode.

### DOM: extract item detail data

After navigating and waiting stable, extract all available fields:

`eval "$(python scripts/extract-item-detail.py)"`

Output example:
```json
{
  "item_id": "1054899470781",
  "item_url": "https://www.goofish.com/item?id=1054899470781&categoryId=126862528",
  "title": "出一台iPhone 15 128G，电池健康度高，成色九新以上...",
  "price": "898.00",
  "original_price": "899.00",
  "seller_name": "小王数码严选",
  "seller_avatar": "https://img.alicdn.com/bao/uploaded/...",
  "seller_labels": ["成都", "刚刚擦亮", "来闲鱼5年", "卖出204件宝贝", "好评率100%"],
  "description": "出一台iPhone 15 128G，电池健康度高，成色九新以上...",
  "images": [
    "https://img.alicdn.com/bao/uploaded/i4/...",
    "https://img.alicdn.com/bao/uploaded/i2/..."
  ],
  "tags": ["品牌：Apple/苹果", "型号：iPhone 15", "存储容量：128GB", "运行内存：6GB", "成色：几乎全新"],
  "want_count": "8人想要"
}
```

Fields that may be null: `original_price`, `seller_labels`, `description`, `tags`, `want_count` (depending on listing completeness). Note: on Goofish detail pages, `title` and `description` contain the same text — there is no separate title element.

## Pagination

N/A — single item page, no pagination.

## Success Criteria

`item_id non-null` and `title non-null` and `price non-null`

## Known Limitations

- Seller user ID (numeric) is not exposed in the DOM — only seller display name is available
- Item detail pages trigger CAPTCHA if accessed too rapidly; recommended minimum interval: 3 seconds between items
- Some items may require login even for viewing; the Skill will return an error if the page fails to load
- Rapid successive navigation may trigger "网络不见了" error — wait 30 seconds before retrying

## Execution Efficiency

- **Batch orchestration**: Loop through item IDs serially with 3–5 second delays; do not parallelize within one browser. To increase throughput, distribute items across multiple browser sessions
- **Test before batch execution**: Test with 2–3 items first to confirm selectors are valid; only then run the full batch
- **Error resumption**: Save results item-by-item; on failure (CAPTCHA or error), record the failed item ID and resume after the CAPTCHA clears
- **Get item IDs from search**: Use `goofish-search-list` Skill to collect item IDs, then feed them into this Skill for detail enrichment

## Experience Notes

Path: `{working-directory}/browser-act-skill-forge-memories/xianyu-scraper-goofish-item-detail.memory.md`

**Before execution**: If the file exists, read it first — it records unexpected situations encountered during past executions (e.g., a strategy has become ineffective); adjust strategy order accordingly.

**After execution**: If an unexpected situation is encountered (strategy became ineffective, page redesigned, anti-scraping upgraded, better path discovered), append a line:
`{YYYY-MM-DD}: {what happened} → {conclusion}`

Normal execution does not write to the file.

