1
This commit is contained in:
@@ -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,
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user