半自动下单

自动下单

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        半自动下单
// @namespace   zlh.com
// @include     https://detail.1688.com/offer/*
// @version     2
// @grant       none
// @description 自动下单
// ==/UserScript==
window.onload = function () {
 console.log("半自动下单开始");
  //获取属性参数
  function GetQueryString(name) {
    var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)');
    var r = window.location.search.substr(1).match(reg);
    if (r != null) return urldecode(r[2]);
    return null;
  }
  
  var strname = GetQueryString('name');
 console.log(strname);
  var arrname = strname.split('__');
  var n = GetQueryString('n');
  var arrlen = arrname.length;
 
  if (n >= arrlen) {
    //已全部加入购物车,跳转到购物车页面
    window.location.href = 'https://cart.1688.com/cart.htm?&status=' + n+'&name='+strname;
  } 
  
 console.log('断点1');
  var name = arrname[n].split('_') [2];
  var num = arrname[n].split('_') [1];
  var m = eval(n) + 1;
  if (arrlen != m) {
    var product = arrname[m].split('_') [0];
  } else {
    var product = arrname[n].split('_') [0];
  }  
  //执行选中属性
  console.log(name);
  if (name && name!="noattrname") {
    console.log('可选属性名');
        var ul = document.getElementsByClassName('list-leading');
        // alert(ul.length);
        if (ul.length != 0) {
         console.log(ul.length);
          var li = ul[0].getElementsByTagName('li');
          var leng = li.length;
          for (var j = 0; j < leng; j++) {
            var div = li[j].getElementsByTagName('div') [0];
            var hax = div.getAttribute('data-unit-config');
            var str = JSON.parse(hax);
            if (str.name.trim() == name.trim()) {
                var aa = div.getElementsByTagName('a') [0];
                aa.click();
                var flag = true;
                //alert(name);
            }
          }
        }   

        if (!flag) {
          console.log('不选属性名');
          var tablesku = document.getElementsByClassName('table-sku') [0];
          if(tablesku){
                console.log("只有一个属性");
                var tbody = tablesku.getElementsByTagName('tbody') [0];
                var trs = tbody.getElementsByTagName('tr');
                var lenx = trs.length;
                // alert(lenx);
                for (var k = 0; k < lenx; k++) {
                  var tdx = trs[k].getElementsByClassName('name') [0];
                  var spanx = tdx.getElementsByTagName('span') [0];
                  //如果span里面是图片
                  if(spanx.getAttribute("class")=="image"){

                    var content=spanx.getAttribute("title").trim();

                  }else{
                    var content=spanx.innerHTML.trim();
                  }

                  var tdamount = trs[k].getElementsByClassName('amount') [0];

                  if ( content== name.trim()) {
                    //就点击Num下
                    console.log(spanx.innerHTML.trim());
                    var upx = tdamount.getElementsByClassName('amount-up') [0];
                    for (var l = 0; l < num; l++) {
                      upx.click();
                    }
                    console.log(l); //这是数量
                  }else{
                     var flag = true;//参数写noattrname
                  }
                }
          }else{
            console.log("没有一个属性");
              var nonameup=document.getElementsByClassName('amount-up') [0];
              for (var q = 0; q < num; q++) {
                  nonameup.click();
              }
            //alert(i);
            console.log(q);
          }
         
        }
    
  } else { 
        var flag = true;
  }  //执行选择数量
  console.log(num);
  if (num && flag) {
    //找到正确的对象
    var amount = document.getElementsByClassName('table-sku') [0];
    if(amount){
        var up = amount.getElementsByClassName('amount-up') [0];
        for (var i = 0; i < num; i++) {     
            up.click();
        }
        console.log(i);  
    }else{
        var up = document.getElementsByClassName('amount-up') [1];//第二个amount_up
        console.log(up);
        for (var i = 0; i < num; i++) {     
            up.click();
        }
        console.log(i);  
    }
    
  }  
  
  //执行点击加入购物车   
  if (num) {
        var cart = document.getElementsByClassName('do-cart') [0];
        var spancart=cart.getElementsByTagName("span")[0];
            spancart.click();    
        var cartflag=true;
        console.log('cart');
  }  
  //如果num存在就继续添加
  if (cartflag) {
    n++;
    var url = window.location.href;
    console.log(url);
    var index = url.lastIndexOf('&');
    var newurl = url.substring(0, index);
    //替换产品id
    var reg = /\/[0-9]+/;
    product = '/' + product;
    var  str = newurl.replace(reg, product);
    setTimeout(function(){
       window.location.href=str+"&n="+n;
    },10000);
  }
  
}

//js解php的url编码
function urldecode(encodedString)
	{
		var output = encodedString;
		var binVal, thisString;
		var myregexp = /(%[^%]{2})/;
		function utf8to16(str)
		{
			var out, i, len, c;
			var char2, char3;

			out = "";
			len = str.length;
			i = 0;
			while(i < len)
			{
				c = str.charCodeAt(i++);
				switch(c >> 4)
				{
					case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
					out += str.charAt(i-1);
					break;
					case 12: case 13:
					char2 = str.charCodeAt(i++);
					out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
					break;
					case 14:
						char2 = str.charCodeAt(i++);
						char3 = str.charCodeAt(i++);
						out += String.fromCharCode(((c & 0x0F) << 12) |
						((char2 & 0x3F) << 6) |
						((char3 & 0x3F) << 0));
						break;
				}
			}
			return out;
		}
		while((match = myregexp.exec(output)) != null
		&& match.length > 1
		&& match[1] != '')
		{
			binVal = parseInt(match[1].substr(1),16);
			thisString = String.fromCharCode(binVal);
			output = output.replace(match[1], thisString);
		}

		//output = utf8to16(output);
		output = output.replace(/\\+/g, " ");
		output = utf8to16(output);
		return output;
	}