匹配范围
*://*.guazi.com/*guazi-used-car-list用途 读取当前瓜子二手车公开列表页,返回在售二手车条目,包括车源 ID、标题、价格、降价信息、里程、年份、城市、标签和详情页地址。 执行前提 请先打开瓜子二手车公开列表页,例如 https://www.guazi.com/bj/。脚本读取当前页面 DOM,不需要登录。若页面出现安全验证、验证码或风控提示,需要先在真实浏览器会话中完成验证后再重试。 参数 l…
*://*.guazi.com/*dom.read1return await (async () => {2 const input = params && typeof params === "object" ? params : {};3 const limitValue = Number(input.limit);4 const limit = Math.max(1, Math.min(Number.isFinite(limitValue) ? Math.trunc(limitValue) : 20, 40));5 const clean = (value) => String(value == null ? "" : value).replace(/\s+/g, " ").trim();6 const sourceUrl = location.href;7 8 if (!/guazi\.com/.test(location.hostname)) {9 throw new Error("请先打开瓜子二手车公开列表页,例如 https://www.guazi.com/bj/。");10 }11 12 const pageText = clean(document.body?.innerText || "");13 if (/瑞数|reese84|captcha|滑动验证|安全验证|验证码|访问过于频繁/i.test(pageText)) {14 throw new Error("瓜子二手车页面出现安全验证或访问频率限制,请先在真实浏览器会话中完成验证。");15 }16 17 const links = Array.from(document.querySelectorAll('a[href*="/car-detail/c"]'));18 const rows = [];19 const seen = new Set();20 21 for (const link of links) {22 if (rows.length >= limit) break;23 const href = link.href || link.getAttribute("href") || "";24 const idMatch = href.match(/car-detail\/c(\d+)/);25 if (!idMatch) continue;26 const clueId = idMatch[1];27 if (seen.has(clueId)) continue;28 29 const rawText = String(link.innerText || link.textContent || "");30 if (!clean(rawText)) continue;31 const lines = rawText.split(/\n+/).map(clean).filter(Boolean);32 const title = lines[0] || "";33 if (!title) continue;34 35 const metaLine = lines.find((line) => /\d{4}年/.test(line) && /公里/.test(line)) || "";36 const metaParts = metaLine.split("|").map(clean).filter(Boolean);37 const year = (metaParts[0] || "").match(/(\d{4})年/)?.[1] || "";38 const mileage = metaParts.find((part) => /公里/.test(part)) || "";39 const city = metaParts[2] || metaParts.find((part) => !/\d{4}年|公里/.test(part)) || "";40 const priceLine = lines.find((line) => /已减/.test(line) && (/\d+(?:\.\d+)?\s*万/.test(line) || /\d+\s*元/.test(line)))41 || lines.find((line) => !/公里/.test(line) && (/\d+(?:\.\d+)?\s*万/.test(line) || /\d+\s*元/.test(line)))42 || "";43 const price = priceLine.match(/(\d+(?:\.\d+)?\s*万|\d+\s*元)/)?.[1]?.replace(/\s+/g, "") || "";44 const discount = priceLine.match(/已减\s*(\d+(?:\.\d+)?\s*万|\d+\s*元)/)?.[1]?.replace(/\s+/g, "") || "";45 const tags = lines.filter((line) => /^已检测$|^高保值$|^车主急售$|^纯电动$|^油电混动$|^插电混动$|^汽油$|^柴油$|^新能源$/.test(line));46 47 seen.add(clueId);48 rows.push({49 rank: rows.length + 1,50 clue_id: clueId,51 title,52 price,53 discount,54 mileage,55 year,56 city,57 tags,58 url: href.startsWith("http") ? href : new URL(href, location.origin).href,59 });60 }61 62 if (rows.length === 0) {63 throw new Error("没有从当前瓜子二手车列表页提取到车源,请确认页面是公开列表页并已加载完成。");64 }65 66 return {67 sourceUrl,68 count: rows.length,69 items: rows,70 };71})();