{"id":"ecommerce-reviews","name":"ecommerce-reviews","summary":"あらゆるeコマース商品ページやレビューページから顧客レビューを抽出してください。レビュー担当者の名前、星評価、日付、レビュータイトル、レビュー本文、購入状況の確認、レビューごとの有益な投票数を返品します。","body":"# E-commerce — Product Reviews\n\n> Product URL → paginated customer reviews (reviewer, rating, date, title, body, verified, helpful votes)\n\n## Language\n\nAll process output to user (progress updates, process notifications) follows the user's language.\n\n## Objective\n\nExtract customer reviews from any publicly accessible e-commerce product or reviews page using a multi-strategy approach (JSON-LD Review → Amazon DOM → WooCommerce DOM → generic microdata → generic CSS patterns).\n\n## Prerequisites\n\n- Target browser is open and connected\n- No login required for public review pages\n\n## Pre-execution Checks\n\n### 1. Tool Readiness\n\nIf browser-act has been confirmed available in the current session → skip this step.\n\nInvoke `browser-act` via Skill tool to load usage. If installation or configuration issues arise, follow its guidance to resolve then retry.\n\n## Capability Components\n\n> This Skill's operational boundary = what the user can manually do in their browser. It only reads data already displayed to the user on the page. JS code is encapsulated in Python files under the `scripts/` directory, invoked via `eval \"$(python scripts/xxx.py {params})\"`. Use the bash tool for execution.\n\n### DOM: Extract reviews from current page\n\nNavigate to the product/reviews page first, then extract:\n\n```bash\neval \"$(python scripts/extract-reviews.py --max-reviews 20)\"\n```\n\nParameters:\n- `--max-reviews`: max reviews to return per page, default 20\n\nOutput example:\n```json\n{\n  \"count\": 20,\n  \"reviews\": [\n    {\n      \"reviewer\": \"John D.\",\n      \"rating\": 5.0,\n      \"date\": \"Reviewed in the United States on May 15, 2026\",\n      \"title\": \"Great product, exactly as described\",\n      \"body\": \"I've been using this for two weeks and it works perfectly...\",\n      \"verified\": true,\n      \"helpful_votes\": 42\n    }\n  ]\n}\n```\n\n### Composite: Product URL → reviews with sort and pagination\n\n**Step 1 — Navigate to reviews page:**\n\n| Platform | Reviews URL pattern |\n|----------|---------------------|\n| Amazon | `https://www.amazon.com/product-reviews/{ASIN}?sortBy=recent` (most recent) or `sortBy=helpful` |\n| Amazon (from product page) | Scroll to reviews section or click \"See all reviews\" link, `wait stable` |\n| WooCommerce | Product page URL with `#reviews` anchor; reviews are inline on the page |\n| Shopify | Reviews are typically inline on the product page |\n| Generic | Navigate to product URL; reviews section is usually below product info |\n\n**Step 2 — Extract reviews:**\n```bash\neval \"$(python scripts/extract-reviews.py --max-reviews 20)\"\n```\n\n**Step 3 — Paginate (Amazon):**\nAmazon review pages support URL pagination:\n- Most recent sort: `https://www.amazon.com/product-reviews/{ASIN}?sortBy=recent&pageNumber={page}`\n- Helpful sort: `https://www.amazon.com/product-reviews/{ASIN}?sortBy=helpful&pageNumber={page}`\n\nFor each page: `navigate {reviews_url_with_page}` → `wait stable` → re-run extract-reviews.py\n\nTermination: when `count` returns 0, or no new reviews appear compared to prior page.\n\n## Pagination\n\n**URL Pagination (Amazon)**: Increment `pageNumber` parameter in the reviews URL. Start from 1.\n\n**DOM Pagination (WooCommerce/generic)**: Look for a \"Next\" pagination link on the reviews section. Use `eval \"$(python ../ecommerce-listing/scripts/extract-listing-next-page.py)\"` to detect it, then navigate.\n\nTermination: `has_next` is false, or `count` is 0.\n\n## Success Criteria\n\n`result.count >= 1 AND reviews[0].body != null`\n\n## Known Limitations\n\n- Amazon: navigate from `https://www.amazon.com` first on fresh sessions to avoid bot detection\n- JSON-LD reviews are often limited to a small subset (3–5 reviews) even when hundreds exist; use the Amazon-specific URL for full review extraction\n- WooCommerce and Shopify review data depends on which review plugin is installed; body extraction may be null if a non-standard plugin is used\n- Review dates may be locale-formatted strings rather than ISO dates depending on the site's configuration\n\n## Execution Efficiency\n\n- **Batch orchestration**: Loop through review pages serially; add 1–2 second intervals between navigations\n- **Test before batch execution**: Test with page 1 before running multi-page extraction\n- **Error resumption**: Record page number; on failure, resume from last successful page\n\n## Experience Notes\n\nPath: `{working-directory}/browser-act-skill-forge-memories/ecommerce-scraper-ecommerce-reviews.memory.md`\n\n**Before execution**: If the file exists, read it first — it records unexpected situations encountered during past executions; adjust strategy order accordingly.\n\n**After execution**: If an unexpected situation is encountered (strategy became ineffective, page redesigned, anti-scraping upgraded, better path discovered), append a line:\n`{YYYY-MM-DD}: {what happened} → {conclusion}`","author":"@browser-act","ownerProfile":null,"authorContacts":null,"sourceUrl":"https://github.com/browser-act/skills/tree/main/solutions/ecommerce/ecommerce-reviews","license":"MIT","category":"coding","lang":"en","tokens":1106,"stars":0,"calls30d":2,"claimed":false,"visibility":"public","origin":"crawler","version":"0.1.0","createdAt":"2026-08-22","updatedAt":"2026-08-22","files":[{"path":"scripts/extract-reviews.py","size":6146,"sha256":"48c5873762fde18dd621b1bbbff34886dc4b77501bba0b835c387a4a7d27e080"}],"requires":{"mcp":[],"tools":[]},"safety":{"flags":[{"code":"net.endpoints","kind":"exfiltration","excerpt":"www.amazon.com","message":"bundled scripts reach 1 external host(s)","severity":"warn"}],"scannedAt":"2026-08-22","hasScripts":true,"networkEndpoints":["www.amazon.com"]}}