Greasy Fork is available in English.
amazon导出产品详情图片
// ==UserScript==
// @name amazon export img
// @namespace http://tampermonkey.net/
// @version 0.1
// @description amazon导出产品详情图片
// @author You
// @match https://www.amazon.com/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=tampermonkey.net
// @grant GM_registerMenuCommand
// @require https://cdn.bootcdn.net/ajax/libs/jszip/3.6.0/jszip.min.js
// @require https://cdn.bootcdn.net/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js
// @license MIT
// ==/UserScript==
(function() {
'use strict';
function getBase64(imgUrl) {
return new Promise((resolve, reject) => {
fetch(imgUrl).then(res => res.blob())
.then(res => {
let fr = new FileReader();
fr.onload = function (e) {
resolve(e.target.result)
};
fr.onerror = function () {
console.log('读取错误!')
reject('读取错误')
};
fr.readAsDataURL(res);//如果是转文字,第二个参数可以使用编码
}).catch(e => {
reject(e)
})
})
}
function exportImg() {
const bannerBg = document.querySelector('.apm-brand-story-hero img').src;
console.log('--------------bannerBg------------');
console.log(bannerBg);
const bannerDoms = document.querySelectorAll('.apm-brand-story-card img');
let bannerItemImgs = []
console.log('--------------bannerItems------------');
bannerDoms.forEach((el) => {
bannerItemImgs.push(el.src)
})
console.log(bannerItemImgs);
const heroDoms = document.querySelectorAll('.apm-hero-image img')
let heroImgs = []
console.log('--------------heroImg------------');
heroDoms.forEach((el) => {
heroImgs.push(el.src)
})
console.log(heroImgs);
const detailDoms = document.querySelectorAll('.celwidget > .aplus-module-wrapper > img')
let detailImgs = []
console.log('--------------detailImg------------');
detailDoms.forEach((el) => {
detailImgs.push(el.src)
})
console.log(detailImgs);
const stepDoms = document.querySelectorAll('th p img');
let stepImgs = []
console.log('--------------stepItems------------');
stepDoms.forEach((el) => {
stepImgs.push(el.src)
})
console.log(stepImgs);
const href = window.location.href
const regex = /\/dp\/(.+?)\/ref/;
const asin = href.match(regex)[1];
let imgUrls = []
imgUrls.push(bannerBg)
imgUrls = imgUrls.concat(bannerItemImgs)
imgUrls = imgUrls.concat(heroImgs)
imgUrls = imgUrls.concat(detailImgs)
imgUrls = imgUrls.concat(stepImgs)
console.log(`一共${imgUrls.length}张图`);
// 创建zip文件对象
const zip = new JSZip();
// 使用fetch获取图片数据
Promise.all(imgUrls.map(url => getBase64(url)))
.then(responses => {
console.log(`成功${responses.length}`);
// 遍历响应结果并将图片数据添加至zip文件对象中
responses.forEach((response, index) => {
const imgUrl = imgUrls[index];
const imgName = imgUrl.substring(imgUrl.lastIndexOf('/') + 1);
response = response.replace(/^data:image\/(png|jpg|jpeg);base64,/, "")
zip.file(imgName, response, { base64: true });
});
// 生成zip文件并下载
zip.generateAsync({ type: 'blob', compression: 'STORE' })
.then(content => {
saveAs(content, asin + '.zip');
})
.catch(e => {
console.log('生成zip', e)
});
})
.catch(e => {
console.log(e)
});
}
GM_registerMenuCommand("导出数据", function () {
exportImg()
});
})();