// ==UserScript== // @name 复制ParentAsin // @namespace http://tampermonkey.net/ // @version 0.5 // @description 复制亚马逊ParentAsin // @author You // @match https://www.amazon.com/*/dp/* // @match https://www.amazon.com/gp/product/* // @match https://www.amazon.com/dp/* // @match https://yuanbao.tencent.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=amazon.com // @grant GM.setClipboard // @downloadURL https://update.greasyfork.icu/scripts/530539/%E5%A4%8D%E5%88%B6ParentAsin.user.js // @updateURL https://update.greasyfork.icu/scripts/530539/%E5%A4%8D%E5%88%B6ParentAsin.meta.js // ==/UserScript== function copyAsin() { const asin = getAsin(); GM.setClipboard(asin); alert('已复制!') } function copyTitle() { const title = getTitle(); const regex = /"parentAsin":"(.*?)"/; // 非贪婪匹配,避免匹配到多余的字符 const asin = getAsin(); const content = asin + "|x|" + title; GM.setClipboard(content); alert('已复制!') } function copyCookie() { GM.setClipboard(document.cookie); alert('已复制!') } function getAsin() { const regex = /"parentAsin":"(.*?)"/; // 非贪婪匹配,避免匹配到多余的字符 const result = document.body.textContent.match(regex); let asin = ''; if (result && result[1]) { asin = result[1]; } return asin; } function getBrand() { // 辅助函数:执行XPath查询 function xpathQuery(xpath) { const result = []; const xpathResult = document.evaluate( xpath, document, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null ); let node = xpathResult.iterateNext(); while (node) { result.push(node.textContent); node = xpathResult.iterateNext(); } return result; } // 首先尝试从主要位置获取品牌 let brand = xpathQuery('//tr[@class="a-spacing-small po-brand"]/td[2]/span/text()'); // 如果没有找到,尝试从bylineInfo获取 if (brand.length === 0) { try { const bylineInfo = xpathQuery('//a[@id="bylineInfo"]/text()')[0]; if (bylineInfo) { if (bylineInfo.includes('Visit the')) { const match = bylineInfo.match(/Visit the (.+?) Store/); brand = match ? match[1] : ""; } else if (bylineInfo.includes('Brand: ')) { brand = bylineInfo.replace('Brand: ', ''); } else { brand = ""; } } } catch (error) { brand = ""; } } if (brand.length !== 0) { brand = brand[0]; } // 如果还没找到,从商品详情中获取 if (!brand.length) { const productDetails = xpathQuery('//table[@id="productDetails_detailBullets_sections1"]//tr/th/text()'); if (productDetails.length > 0) { let brandNumber = 0; for (let i = 0; i < productDetails.length; i++) { brandNumber++; if (productDetails[i].includes('Brand')) { break; } } const detailBrand = xpathQuery( `//table[@id="productDetails_detailBullets_sections1"]//tr[${brandNumber}]//td/text()` ); if (detailBrand.length) { brand = detailBrand[0].trim(); } } } // 最后尝试从店铺中获取品牌 if (!brand.length) { const brandHref = xpathQuery('//a[@id="bylineInfo"]/@href'); if (brandHref.length) { brand = brandHref[0].split('/')[2]; } else { brand = ''; } } return brand; } function getTitle() { return document.getElementById('productTitle').textContent.trim() } function getCategoryName() { // 创建一个XPath表达式求值器 const evaluator = new XPathEvaluator(); // 使用XPath查询获取所有匹配的节点 const expression = '//li/span[@class="a-list-item"]/a[@class="a-link-normal a-color-tertiary"]/text()'; const result = evaluator.evaluate( expression, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null ); // 收集所有类别名称 const categoryNames = []; for (let i = 0; i < result.snapshotLength; i++) { categoryNames.push(result.snapshotItem(i).textContent); } // 处理并连接类别名称 let categoryName = ""; if (categoryNames.length > 0) { categoryName = categoryNames .map(name => name.trim()) .join(">>") .replace(/\n/g, "") .replace(/\s{2,}/g, ""); } return categoryName; } function copyCheckData() { const brand = getBrand(); const title = getTitle(); const categoryName = getCategoryName(); const asin = getAsin(); GM.setClipboard(JSON.stringify({ brand, title, categoryName, asin })); alert('复制成功') } (function () { 'use strict'; window.debugger = function () { }; document.oncontextmenu = null; document.onkeydown = null; window.addEventListener('load', function () { // 创建按钮 const button = document.createElement('button'); button.textContent = '复制ParentAsin'; // 设置间隔 10px button.style.cssText = ` margin: 20px; padding: 8px 16px; background: #4CAF50; color: white; border: none; border-radius: 4px; cursor: pointer; `; const titleButton = button.cloneNode(true); const cookieButton = button.cloneNode(true); const checkButton = button.cloneNode(true); titleButton.textContent = '复制标题+ParentAsin'; cookieButton.textContent = '复制Cookie'; checkButton.textContent = '复制校验参数'; // 绑定点击事件 button.addEventListener('click', function () { copyAsin(); }); titleButton.addEventListener('click', function () { copyTitle(); }); cookieButton.addEventListener('click', function () { copyCookie(); }); checkButton.addEventListener('click', function () { copyCheckData(); }); const targetElement = document.getElementById('desktop-breadcrumbs_feature_div'); const appElement = document.getElementById('app'); // 注入页面 if (targetElement) { targetElement.parentNode.insertBefore(button, targetElement); targetElement.parentNode.insertBefore(titleButton, targetElement); targetElement.parentNode.insertBefore(checkButton, targetElement); } if (appElement) { appElement.parentNode.insertBefore(cookieButton, appElement); } }, false); })();