From 3c7b629606ad7af59676c2fe2d0277320ece535a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=88=90?= Date: Tue, 17 Mar 2026 18:24:33 +0800 Subject: [PATCH] 1 --- .../src/injected/amazon_search_list.js | 51 ++++++++++++++++--- 1 file changed, 43 insertions(+), 8 deletions(-) diff --git a/mv2_simple_crx/src/injected/amazon_search_list.js b/mv2_simple_crx/src/injected/amazon_search_list.js index 4065150..d33c9ff 100644 --- a/mv2_simple_crx/src/injected/amazon_search_list.js +++ b/mv2_simple_crx/src/injected/amazon_search_list.js @@ -4,6 +4,19 @@ export function injected_amazon_search_list(params) { const start_url = params && params.url ? String(params.url) : location.href; const category_keyword = params && params.category_keyword ? String(params.category_keyword).trim() : ''; + function pick_number(text) { + if (!text) return null; + const s = String(text).replace(/[(),]/g, ' ').replace(/\s+/g, ' ').trim(); + const m = s.match(/(\d+(?:\.\d+)?)/); + return m ? Number(m[1]) : null; + } + + function pick_int(text) { + if (!text) return null; + const s = String(text).replace(/[^\d]/g, ''); + return s ? Number(s) : null; + } + function abs_url(href) { try { return new URL(href, location.origin).toString(); @@ -34,15 +47,35 @@ export function injected_amazon_search_list(params) { const price_el = el.querySelector('span.a-price > span.a-offscreen'); const price = price_el ? price_el.textContent.trim() : null; - const rating_el = el.querySelector('span.a-icon-alt'); - const rating_text = rating_el ? rating_el.textContent.trim() : null; + const reviews_block = el.querySelector('div[data-cy="reviews-block"]') || el; - const review_count_el = - el.querySelector('span[aria-label$="ratings"]') || - el.querySelector('span[aria-label$="rating"]') || - el.querySelector('span[aria-label$="评价"]') || - el.querySelector('span[aria-label$="评分"]'); - const review_count_text = review_count_el ? review_count_el.textContent.trim() : null; + const rating_text = (() => { + const t1 = reviews_block.querySelector('span.a-icon-alt'); + if (t1 && t1.textContent) return t1.textContent.trim(); + const t2 = reviews_block.querySelector('span.a-size-small.a-color-base[aria-hidden="true"]'); + if (t2 && t2.textContent) return t2.textContent.trim(); + return null; + })(); + + const rating = (() => { + const n = pick_number(rating_text); + return Number.isFinite(n) ? n : null; + })(); + + const review_count_text = (() => { + const a1 = reviews_block.querySelector('a[href*="#customerReviews"]'); + if (a1 && a1.textContent) return a1.textContent.trim(); + const a2 = reviews_block.querySelector('a[aria-label*="rating"], a[aria-label*="ratings"], a[aria-label*="评级"], a[aria-label*="评价"]'); + if (a2 && a2.getAttribute('aria-label')) return a2.getAttribute('aria-label').trim(); + const s1 = reviews_block.querySelector('span.a-size-mini.puis-normal-weight-text'); + if (s1 && s1.textContent) return s1.textContent.trim(); + return null; + })(); + + const review_count = (() => { + const n = pick_int(review_count_text); + return Number.isFinite(n) ? n : null; + })(); items.push({ index: idx + 1, @@ -50,7 +83,9 @@ export function injected_amazon_search_list(params) { title, url, price, + rating, rating_text, + review_count, review_count_text, }); });