/** * 1688 采集配置 * 从 docs/extension/plan.md §6.2 移植(选择器来自 v1.1.8 生产 bundle) */ import type { SiteProfile } from './types'; export const profile1688: SiteProfile = { id: '1688', name: '1688', urlPatterns: [/^https:\/\/detail\.1688\.com\/offer\/\d+\.html/], extractItemId: (url) => url.match(/\/offer\/(\d+)\.html/)?.[1] ?? null, readySelectors: ['.title-content', '#dt-tab', '#screen', '#content'], readyTimeoutMs: 10_000, // 懒加载真实地址在 data-* 上(顺序不能动) defaultSrcProps: ['data-lazyload-src', 'data-src', 'currentSrc', 'src'], refererOrigin: 'https://www.1688.com', textRules: [ { kind: 'title', // 标题被拆成多个 .title-text span,必须 join selectors: ['.title-content .title-text', '.title-content h1', '.od-pc-offer-title', 'h1'], extract: 'join', required: true }, { kind: 'price', selectors: ['.price-original', '.od-pc-offer-price-priceRange', '.price .value'], extract: 'first' }, { kind: 'params', selectors: [ '.offer-attr-list .offer-attr-item', '.od-pc-attribute-table tr', '.obj-content .table-tr' ], extract: 'table', tableKeySelector: '.offer-attr-item-name, td:first-child, .table-th', tableValueSelector: '.offer-attr-item-value, td:last-child, .table-td' }, { kind: 'desc', selectors: ['.de-description-detail', '#detailContentContainer', '.html-description'], extract: 'join' } ], imageGroups: [ { key: 'main', name: '主图', type: 'img', // 四套画廊变体(说明 1688 至少有四个线上版本) selectors: [ '#recyclerview .detail-gallery-turn-wrapper .detail-gallery-img', '#screen .od-gallery-turn-item-wrapper .od-gallery-img', '#content .od-scroller-item .v-image-cover', '#content .od-picture-gallery-list .v-image-cover', '#dt-tab img', '.detail-gallery-turn img.detail-gallery-img', '.img-list-wrapper img.od-gallery-img' ], activeSelectors: [ '.detail-gallery-turn-wrapper.prepic-active .detail-gallery-img', '.od-gallery-turn-item-wrapper.prepic-active .od-gallery-img', '.v-image-cover.image-item-active' ], minWidth: 200, minHeight: 200 }, { key: 'sku', name: 'SKU图片', type: 'img', selectors: [ '.pc-sku-wrapper .prop-item-inner-wrapper', '.sku-item-wrapper', '.specification-cell', '.sku-filter-button', '.expand-view-item', '.feature-item img' ], // SKU 缩略图是 CSS 背景图 srcProps: ['backgroundImage'], // 规格名(五种 DOM 结构) nameSelectors: ['.prop-name', '.sku-item-name', '.item-label', '.label-name', '.normal-text'], minWidth: 20, minHeight: 20 }, { key: 'detail', name: '详情图', type: 'img', selectors: [ '.de-description-detail img', '#detailContentContainer img', '.html-description img' ], minWidth: 300, minHeight: 100 }, { key: 'video', name: '视频', type: 'video', selectors: ['.lib-video video', 'video'] } ] };