This commit is contained in:
张成
2026-03-17 18:24:33 +08:00
parent f5880baacf
commit 3c7b629606

View File

@@ -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,
});
});