Greasy Fork is available in English.

天猫 图片获取脚本

下载天猫缩略图,分类图以及详情图

// ==UserScript==
// @name         天猫 图片获取脚本
// @namespace    https://www.tmall.com
// @version	 1.29
// @description	 下载天猫缩略图,分类图以及详情图
// @author       Richard He
// @homepage     https://www.greasyfork.org/users/89556
// @iconURL      https://img.alicdn.com/tfs/TB1XlF3RpXXXXc6XXXXXXXXXXXX-16-16.png
// @match        https://detail.tmall.com/*
// @match        https://detail.tmall.hk/*
// @grant        GM_log
// @grant        GM_setClipboard
// @grant        GM_notification
// @grant        GM_download
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_deleteValue
// @grant	 GM_addStyle
// @license      MIT
// ==/UserScript==
	//match example url
	//1. https://detail.tmall.com/item.htm?id=559254305797
	/*jshint multistr:true */
	//CSS Style
	GM_addStyle('\
	/* style for thumbs */\
	.thumbUlOverride li{\
		padding-top:0px!important;\
	}\
	.thumbUlOverride li a {\
		border:2px solid #000;\
		width:56px!important;\
		height:56px!important;\
		font-size:22px;\
		font-family:Arial;\
		font-weight:bold;\
		color:#FE0335!important;\
		line-height:56px!important;\
	}\
	.img-down li a{\
		font-family:Arial;\
		cursor:pointer;\
		color:#FE0335;\
		font-weight:bold;\
		font-size:16px;\
	}\
	.cat-ul{\
    \
	}\
	.cat-ul li{\
		line-height:28px;\
		float:left;\
		position:relative;\
		margin:0 4px 4px 0;\
		vertical-align:middle;\
		padding:1px;\
		list-style:none;\
	}\
	.cat-ul li a{\
		width:38px!important;\
		height:38px;\
		padding:0px;\
		line-height:38px;\
		outline:0;\
		font-family:Arial;\
		color:#FE0335;\
		font-weight:bolder;\
	}\
	');
	//Vars needed
	var paramsObj = {}; //store all the parameters in url
	var params = location.search.substr(1).split('&');
	for(var i=0;i<params.length;i++)
	{
		paramsObj[params[i].split('=')[0]] = unescape(params[i].split('=')[1]);
	}
   //下载商品 缩略图
   var d = document;
	var thumbList = d.getElementById('J_UlThumb');
	var imgAddress = [];
	var imgSrc = '';
    var Seq;
	var thumbUl,thumbLi,thumbA;
	thumbUl = d.createElement('ul');
	thumbUl.className = 'tb-thumb tm-clear thumbUlOverride';
	d.getElementsByClassName('tb-gallery')[0].appendChild(thumbUl);
	for(var i=0;i<thumbList.getElementsByTagName('li').length;i++)
	{
		imgSrc = thumbList.getElementsByTagName('li')[i].getElementsByTagName('a')[0].getElementsByTagName('img')[0].src;
		imgAddress[i] = imgSrc.substr(0,imgSrc.length-13);
            //生成按钮
					thumbLi = d.createElement('li');
					thumbA = d.createElement('IMG');
					thumbA.src = imgAddress[i];
                    thumbA.style.cursor = "pointer";
					thumbA.title = i+1;
					thumbA.onmouseover = function()
					{
						thumbList.getElementsByTagName('li')[this.title-1].className = 'tb-selected';
					};
					thumbA.onmouseout = function()
					{
						thumbList.getElementsByTagName('li')[this.title-1].className = 'tb-thumb tm-clear';
					};
					thumbA.onclick = function()
					{
                      Seq = parseInt(this.title);
                      Seq = Seq < 10 ? "0" + Seq : Seq;
                      GM_download(this.src,"S" + paramsObj.id.substr(-2,2) + Seq + this.src.substr(-4,4));
					};
					thumbUl.appendChild(thumbLi);
					thumbLi.appendChild(thumbA);
	}


	//下载商品 颜色分类图
	var catImage = d.getElementsByClassName('tb-img')[0];
	var jAmount = d.getElementById('J_Amount');
	var catWrapperDl,catWrapperDt,catWrapperDd,catWrapperUl,catWrapperLi;
	var catImageList = [];
	var bgImage = '';
	var catA;
	if(jAmount.nodeName == 'DD'&&typeof(catImage)!='undefined'&&document.getElementsByClassName('tb-img')[0].childNodes[1].childNodes[1].style.backgroundImage.indexOf('url')>=0)
	{
		catWrapperDl = d.createElement('dl');
		catWrapperDt = d.createElement('dt');
		catWrapperUl = d.createElement('ul');
		catWrapperLi = d.createElement('li');
		jAmount.parentNode.parentNode.insertBefore(catWrapperDl,jAmount.parentNode);
		catWrapperDl.appendChild(catWrapperDt);
		catWrapperDd = d.createElement('dd');
		catWrapperDl.appendChild(catWrapperDd);
		catWrapperDd.appendChild(catWrapperUl);
		catWrapperDl.className = 'tb-prop';
		catWrapperDt.className = 'tb-metatit';
		catWrapperDt.innerHTML = '天猫图片<br/>分类下载';
		catWrapperUl.className = 'cat-ul';
		for(var i=0;i<catImage.getElementsByTagName('li').length;i++)
		{
			bgImage = catImage.getElementsByTagName('li')[i].getElementsByTagName('a')[0].style.backgroundImage;
			catImageList[i] = 'http:'+bgImage.substr(5,bgImage.length-20);

			catWrapperLi = d.createElement('li');
			catA = d.createElement('a');
			catA.href = '#';
			catA.data = catImageList[i];
			catA.innerText = i+1;
			catA.onmouseover = function()
			{
				catImage.getElementsByTagName('li')[this.innerText-1].className = 'tb-selected';
			};
			catA.onmouseout = function()
			{
				catImage.getElementsByTagName('li')[this.innerText-1].className = '';
			};
			catA.onclick = function()
			{
                Seq = this.innerText;
                Seq = Seq < 10 ? "0" + Seq : Seq;
				GM_download(this.data,"F" + paramsObj.id.substr(-2,2) + Seq);
			};
			catWrapperUl.appendChild(catWrapperLi);
			catWrapperLi.appendChild(catA);
		}
		catWrapperLi = d.createElement('li');
		catA = d.createElement('a');
		catA.href = '#';
		catA.innerText = '全';
		catA.title = '点击下载全部分类图片';
		catA.onclick = function()
		{
			for(var i=0;i<catImage.getElementsByTagName('li').length;i++)
			{ console.log(i);
				GM_download(catImageList[i],paramsObj.id+'分类图'+(i+1));
			}
		}
		catWrapperUl.appendChild(catWrapperLi);
		catWrapperLi.appendChild(catA);
	}


	//下载 商品详情图 可给图片加边框以方便下载单个图片
	var imgAdrs =[];
    var Seq;
	var jTabBar = d.getElementById('J_TabBar');
	var detailLi = d.createElement('li');
	var detailA = d.createElement('a');
	detailLi.appendChild(detailA);
	jTabBar.insertBefore(detailLi,d.getElementsByClassName('tm-qrcode-icon')[0]);
	detailA.href = '#description';
                detailA.onclick = function() {
                    detailLi.className = 'tm-selected';
                    var desLis = d.getElementsByClassName('ke-post')[0].childNodes;
                    if (typeof (desLis[0]) != 'undefined') {
                        for (var l = 0; l < desLis.length; l++) {
                            if (desLis[l].nodeName == 'IMG') {} else if (desLis[l].childNodes.length > 0) {
                                for (var m = 0; m < desLis[l].childNodes.length; m++) {
                                    if (desLis[l].childNodes[m].nodeName == 'IMG')
                                        imgAdrs.push(desLis[l].childNodes[m].src);
                                }
                            }
                        }
                        GM_notification('本次将下载 ' + imgAdrs.length + ' 张图片,点击此处下载', '友情提示');
                        for (var k = 0; k < imgAdrs.length; k++) {
                            Seq = k + 1;
                            Seq = Seq < 10 ? '0'+ Seq : Seq;
                            GM_download(imgAdrs[k], "X"+paramsObj.id.substr(-2,2) + Seq + imgAdrs[k].substr(-4, 4));
                        }
                    }
                }                ;
			detailA.innerHTML = '下载详情图';
			detailA.title = '请注意,下载详情图之前请先将所有详情图片显示完毕再点击此按钮下载,否则会出现下载不完整等问题';

	//图片加边框
	var borderLi = d.createElement('li');
	var borderA= d.createElement('a');
   borderLi.appendChild(borderA);
	jTabBar.insertBefore(borderLi,d.getElementsByClassName('tm-qrcode-icon')[0]);
	borderA.href="javascript:void(0)";
	borderLi.onclick = function()
	{
		borderLi.className = 'tm-selected';
		var desLis = d.getElementsByClassName('ke-post')[0].childNodes;
		if(typeof(desLis[0])!='undefined')
		{
			for(var i=0;i<desLis.length;i++)
			{//console.log(desLis[i]);
				if((desLis[i].align == "absmiddle"|desLis[i].alt!='')&&desLis[i].nodeName == 'IMG') //filter other images and elements
				{
					desLis[i].style.borderTop = '8px solid #000';
					desLis[i].style.borderBottom = '8px solid #000';
				}
				else if(desLis[i].childNodes.length>0)
				{
					for(var j=0;j<desLis[i].childNodes.length;j++)
					{
						if(desLis[i].childNodes[j].nodeName == 'IMG')
							desLis[i].childNodes[j].style.borderTop = '8px solid #000';
							desLis[i].childNodes[j].style.borderBottom = '8px solid #000';
					}
				}
				else
				{
				}
			}
		}
    };
		borderA.innerHTML = '详情图加框';
		borderA.title = '点击后每一张单独的图片上下会添加黑色边框,便于单张或多张选择下载';