// ==UserScript==
// @name 京东页面全部商品链接提取
// @namespace http://tampermonkey.net/
// @version 0.1
// @description 在京东的页面中一键复制当前页面的全部商品链接
// @author 苦苦守候
// @match https://*.jd.com/*
// @match https://*.jd.hk/*
// @match https://*.yiyaojd.com/*
// @match https://*.jkcsjd.com/*
// @match https://*.jingxi.com/*
// @require https://cdn.bootcdn.net/ajax/libs/clipboard.js/2.0.8/clipboard.min.js
// @icon https://www.google.com/s2/favicons?domain=jd.com
// @grant none
// @license MIT
// @downloadURL https://update.greasyfork.icu/scripts/436020/%E4%BA%AC%E4%B8%9C%E9%A1%B5%E9%9D%A2%E5%85%A8%E9%83%A8%E5%95%86%E5%93%81%E9%93%BE%E6%8E%A5%E6%8F%90%E5%8F%96.user.js
// @updateURL https://update.greasyfork.icu/scripts/436020/%E4%BA%AC%E4%B8%9C%E9%A1%B5%E9%9D%A2%E5%85%A8%E9%83%A8%E5%95%86%E5%93%81%E9%93%BE%E6%8E%A5%E6%8F%90%E5%8F%96.meta.js
// ==/UserScript==
let lastTimeout = 0;
const JD_ITEM_RE = [
/\.[jd|jingxi]+?\.[com|hk]+?\/.*?sku=(\d+)/,
/\.m\.jd\.com\/.*?wareId=(\d+)/,
/mitem\.jd\.hk\/product\/(\d+)\.html/,
/re\.jd\.[com|hk]+?\/.*?\/(\d+)\.html/,
/[item.]*?[m.]*?[yiyao]*?jd\.[com|hk]+?\/[product\/]*?(\d+)\.html/,
];
function matchReGroupToOneString(str, reGroup) {
let value;
for (let i = 0; i < reGroup.length; i += 1) {
const re = reGroup[i];
value = matchReToOneString(str, re);
if (value) {
break;
}
}
return value;
}
function matchReToOneString(str, re) {
if (re.test(str)) {
const match = str.match(re);
if (match) {
if (match.length > 1) {
return match[1]
} else {
return match[0]
}
}
}
}
(function() {
'use strict';
document.body.insertAdjacentHTML('beforeend', ``);
document.body.insertAdjacentHTML('beforeend', `
`);
new ClipboardJS('#ks-one-copy-jd-urls', {
text: function (trigger) {
let result = "";
const allGoods = getAllGoodsUrl();
if(allGoods && allGoods.length > 0){
result = allGoods.join("\n");
hintMsg(`已找到${allGoods.length}个商品链接!`);
}else{
hintMsg(`未发现可复制的商品链接`);
}
return result;
},
});
function getAllGoodsUrl(){
const aGroup = document.querySelectorAll("a");
const result = {};
for(let i = 0; i < aGroup.length; i += 1){
const a = aGroup[i];
const href = a.href;
if(href && href[0] !== "#"){
const goodsId = matchReGroupToOneString(href, JD_ITEM_RE);
if(goodsId && !(goodsId in result)){
result[goodsId] = `https://item.jd.com/${goodsId}.html`;
}
}
}
return Object.values(result);
}
function hintMsg(msg){
const btn = document.querySelector("#ks-one-copy-jd-urls");
if(btn){
if(lastTimeout){
clearTimeout(lastTimeout);
}
btn.innerText = msg;
lastTimeout = setTimeout(()=>btn.innerText = "复制全部商品链接", 2000);
}
}
})();