使用方式:
- chrome 浏览器打开 如下链接 https://item.mi.com/product/10000085.html 或其他抢购链接
- 选中需要抢购的产品,记住,这一步非常重要
- 键盘点击 F12
- 在弹出的窗口 选中 console 选项卡 或者点击 键盘 ESC
- 在输入光标处 粘贴 下面文件的代码,点击 enter 键
使用方式:
(function test(startHour = 10) { | |
const timePoint = startHour | |
? new Date(`${new Date().toISOString().slice(0, 10)} ${startHour}:00`).getTime() | |
: new Date().getTime() + 5000 | |
const gidSeletor = '#J_list .J_step:nth-child(2) .step-list .btn[class*="active"]' | |
hackMI() | |
main() | |
function tryBuy() { | |
var t = { | |
obj: ".xmAddShopCart", | |
modeType: "", | |
before: null, | |
callback: null, | |
overCallback: null, | |
beforeQueue: null, | |
storage: "000", | |
sourceVal: "bigtap" | |
}; | |
MI.bigtap.init({ | |
gid: $(gidSeletor).data().id, | |
modeType: t.modeType, | |
callback: t.callback, | |
obj: $('.xmAddShopCart'), | |
overCallback: t.overCallback, | |
beforeQueue: t.beforeQueue, | |
storage: t.storage, | |
sourceVal: t.sourceVal | |
}) | |
} | |
function testIdRetrival() { | |
const testId = $(gidSeletor).data().id | |
console.log('The selected gid is: ', testId) | |
} | |
function main() { | |
let timesup = false | |
let timeleft = Math.floor((timePoint - Date.now()) / 1000) | |
testIdRetrival() | |
const interval = setInterval(function () { | |
var cur = Date.now() | |
if (cur >= timePoint) { | |
tryBuy() | |
timesup = true | |
} | |
if (timesup) { | |
clearInterval(interval) | |
} else { | |
let temp = Math.floor((timePoint - cur) / 1000) | |
if (temp < timeleft) { | |
timeleft = temp | |
console.log('time left ', timeleft, ' s') | |
} | |
} | |
}, 16) | |
} | |
function hackMI() { | |
let errorCount = 0 | |
Object.assign(MI.bigtap, { | |
getHdget: function () { | |
var e = this | |
, t = 'cn' + e.config.gid | |
, n = MI.GLOBAL_CONFIG.damiaoSite + 'hdget/cn'; | |
$.ajax({ | |
type: 'GET', | |
url: n, | |
dataType: 'jsonp', | |
jsonp: 'jsonpcallback', | |
data: { | |
source: e.config.sourceVal, | |
product: e.config.gid, | |
addcart: 1, | |
m: 1, | |
fk: e.config.modeVal, | |
tsort: e.config.modeTime, | |
storage: e.config.storage, | |
cstr1: e.config.jsSignResult.cstr1, | |
cstr2: e.config.jsSignResult.cstr2, | |
event: e.config.jsSignResult.ev, | |
r: e.config.jsSignResult.r, | |
b: e.config.jsSignResult.b, | |
salt: e.config.salt, | |
ans: e.config.mi6Sign | |
}, | |
jsonpCallback: t, | |
timeout: 3e4, | |
error: function (t, i, r) { | |
if (errorCount < 50 ) { | |
console.log(e.inTheQueue) | |
e.inTheQueue || e.startQueue() | |
e.getHdgetTimer = setTimeout(function () { | |
e.getHdget() | |
}, 16) | |
} | |
errorCount ++ | |
console.log('errors: ', errorCount) | |
}, | |
success: function (t) { | |
var n = t.status | |
, i = n[e.config.gid].hdurl | |
, isStop = !n[e.config.gid].hdstart && n[e.config.gid].hdstop; | |
if (e.inTheQueue) { | |
if (!isStop) { | |
e.getHdgetTimer && clearTimeout(e.getHdgetTimer) | |
if (i) { | |
e.getShopCart(i) | |
} else { | |
e.inTheQueue || e.startQueue() | |
e.getHdgetTimer = setTimeout(function () { | |
e.getHdget() | |
}, 50) | |
} | |
} else { | |
alert('活动已结束') | |
e.stopQueue() | |
} | |
} | |
} | |
}) | |
} | |
}) | |
} | |
})() |