店铺商品名图片单独文件夹下载
发表于 ・ 视频
// ==UserScript==
// @name JD SKU商品名图片单独文件夹下载
// @namespace jd-sku-folder-img
// @version 8.0
// @match *://*.jd.com/*
// @grant GM_download
// ==/UserScript==
(function () {
'use strict';
function safeName(str) {
return String(str || "")
.trim()
.replace(/[\\/:*?"<>|]/g, "_")
.replace(/\s+/g, " ")
.slice(0, 120);
}
function cleanImg(url) {
if (!url) return "";
url = url.trim();
if (url.startsWith("//")) {
url = "https:" + url;
}
return url
.replace(/s\d+x\d+_/, "")
.replace(".avif", "")
.replace(".webp", "");
}
function getImg(item) {
let img = item.querySelector(".jPic img") || item.querySelector("img");
if (!img) return "";
return img.getAttribute("data-src")
|| img.getAttribute("data-lazy-img")
|| img.getAttribute("src")
|| "";
}
function getTitle(item) {
return item.querySelector(".jDesc a")?.innerText?.trim()
|| item.querySelector(".p-name a")?.innerText?.trim()
|| item.querySelector("a")?.innerText?.trim()
|| "";
}
function downloadImg(url, sku, title) {
let folderName = safeName(sku) + "----" + safeName(title);
GM_download({
url: url,
name: folderName + "/" + "主图.jpg",
saveAs: false,
onerror: function (e) {
console.log("下载失败:", folderName, url, e);
}
});
}
function waitForGoods(callback) {
let timer = setInterval(function () {
let items = document.querySelectorAll("#J_GoodsList .gl-item");
console.log("检测商品数量:", items.length);
if (items.length > 0) {
clearInterval(timer);
callback(items);
}
}, 1000);
}
function run(items) {
let count = 0;
items.forEach(function (item) {
let sku = item.querySelector("[data-sku]")?.getAttribute("data-sku");
if (!sku) return;
let title = getTitle(item);
if (!title) return;
let img = cleanImg(getImg(item));
if (!img) return;
downloadImg(img, sku, title);
console.log("SKU:", sku);
console.log("商品名:", title);
console.log("文件夹:", sku + "----" + title);
console.log("图片:", img);
count++;
});
alert("完成下载:" + count + " 张图片");
}
let btn = document.createElement("button");
btn.innerText = "单独文件夹下载";
btn.style.cssText = `
position:fixed;
right:20px;
top:120px;
z-index:999999;
padding:10px 14px;
background:red;
color:white;
border:none;
border-radius:4px;
cursor:pointer;
font-size:14px;
`;
btn.onclick = function () {
waitForGoods(run);
};
document.body.appendChild(btn);
})();
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。