自动下单
// ==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;
}