/** * 1688 采集配置(DOM 兜底路径) * * 新版(2026-08 实测,快照:宝宝平衡车)DOM 大改,锚点从业务类名换成稳定的 * id / data-module 属性;旧选择器保留做兼容(旧版页面仍在线上轮转)。 * 主路径(window.context)见 collector/platforms/1688.ts——DOM 只负责兜底 * 和补充参数表(#productAttributes)与详情图(#detail)。 */ 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: ['#productTitle', '.title-content', '#detail', '#dt-tab', '#screen', '#content'], readyTimeoutMs: 10_000, // 懒加载真实地址在 data-* 上(顺序不能动) defaultSrcProps: ['data-lazyload-src', 'data-src', 'currentSrc', 'src'], refererOrigin: 'https://www.1688.com', textRules: [ { kind: 'title', selectors: [ '#productTitle .title-content', // 新版:data-module="od_title" '.title-content .title-text', // 旧版:标题拆多个 span,必须 join '.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' }, // 参数表(新版):#productAttributes 是 antd Descriptions 表格, // th(键)/td(值) 成对平铺在 tr 里——用 cells 模式取兄弟节点 { kind: 'params', selectors: [ '#productAttributes th.ant-descriptions-item-label', '#productAttributes th', ], extract: 'cells' }, // 参数表(旧版):行式键值表 { 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', selectors: [ // 新版:模块锚点(data-module / module- 类名) '[data-module="od_picture_gallery"] img', '.module-od-picture-gallery img', // 旧版四套画廊变体 '#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: [ '[data-module="od_sku_selection"] img', // 新版 '.module-od-sku-selection img', '.pc-sku-wrapper .prop-item-inner-wrapper', '.sku-item-wrapper', '.specification-cell', '.sku-filter-button', '.expand-view-item', '.feature-item img' ], srcProps: ['backgroundImage'], nameSelectors: ['.prop-name', '.sku-item-name', '.item-label', '.label-name', '.normal-text'], minWidth: 20, minHeight: 20 }, { key: 'detail', name: '详情图', type: 'img', selectors: [ '#detail img', // 新版:详情容器(实测 69 张,含少量图标需过滤) '.de-description-detail img', '#detailContentContainer img', '.html-description img' ], minWidth: 300, minHeight: 100 }, { key: 'video', name: '视频', type: 'video', selectors: ['.lib-video video', 'video'] } ] };