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 start_url = params && params.url ? String(params.url) : location.href;
|
||||||
const category_keyword = params && params.category_keyword ? String(params.category_keyword).trim() : '';
|
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) {
|
function abs_url(href) {
|
||||||
try {
|
try {
|
||||||
return new URL(href, location.origin).toString();
|
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_el = el.querySelector('span.a-price > span.a-offscreen');
|
||||||
const price = price_el ? price_el.textContent.trim() : null;
|
const price = price_el ? price_el.textContent.trim() : null;
|
||||||
|
|
||||||
const rating_el = el.querySelector('span.a-icon-alt');
|
const reviews_block = el.querySelector('div[data-cy="reviews-block"]') || el;
|
||||||
const rating_text = rating_el ? rating_el.textContent.trim() : null;
|
|
||||||
|
|
||||||
const review_count_el =
|
const rating_text = (() => {
|
||||||
el.querySelector('span[aria-label$="ratings"]') ||
|
const t1 = reviews_block.querySelector('span.a-icon-alt');
|
||||||
el.querySelector('span[aria-label$="rating"]') ||
|
if (t1 && t1.textContent) return t1.textContent.trim();
|
||||||
el.querySelector('span[aria-label$="评价"]') ||
|
const t2 = reviews_block.querySelector('span.a-size-small.a-color-base[aria-hidden="true"]');
|
||||||
el.querySelector('span[aria-label$="评分"]');
|
if (t2 && t2.textContent) return t2.textContent.trim();
|
||||||
const review_count_text = review_count_el ? review_count_el.textContent.trim() : null;
|
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({
|
items.push({
|
||||||
index: idx + 1,
|
index: idx + 1,
|
||||||
@@ -50,7 +83,9 @@ export function injected_amazon_search_list(params) {
|
|||||||
title,
|
title,
|
||||||
url,
|
url,
|
||||||
price,
|
price,
|
||||||
|
rating,
|
||||||
rating_text,
|
rating_text,
|
||||||
|
review_count,
|
||||||
review_count_text,
|
review_count_text,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user