自动化定时点击脚本
2022-03-30 本文已影响0人
码农私房菜
(function (win) {
/**
*
* @param {el} 要点击的DOM元素
* @param {delayTime} 要等待当前时间后,点击的DOM元素
* @param {startTime} 活动开始时间 如:要在10:59:59开始就输入 105959
* @param {endTime} 活动开始时间 如:要在11:59:59开始就输入 115959
*/
var loot = function ({
domArr = [{
el: document.querySelector("body"),
delayTime: 0
}],
startTime,
endTime,
pollingInterval = 100,
}) {
console.log("《《《 脚本开始执行 》》》");
if (startTime >= endTime) {
alert("结束时间不能小于或等于开始时间!");
return;
}
if ("" + startTime.length > 6 || "" + endTime.length > 6) {
alert("时间长度6位 如:(105959)!");
console.log("《《《 脚本结束执行 》》》");
return;
}
if (pollingInterval > 1000 * 60) {
alert("轮询时间不能超过1分钟!");
console.log("《《《 脚本结束执行 》》》");
return;
}
var defaultBtn1, defaultBtn2, defaultBtn3;
var awaitTime = pollingInterval ? pollingInterval : 100;
if (timer || timer1) {
clearInterval(timer1);
clearTimeout(timer);
timer1 = null;
timer = null;
}
var timer = null;
var timer1 = null;
var activeIndex = 0;
var obj = {
length: domArr.length
};
if (!obj.length) return;
for (let i = 0; i < domArr.length; i++) {
obj["btn" + i] = {
el: () => domArr[i]["el"] || null,
delayTime: Number(domArr[i]["delayTime"]) || 0,
};
}
function pay(num, n) {
var len = num.toString().length;
while (len < n) {
num = "0" + num;
len++;
}
return num;
}
var oldMinute = 0
var getTimer = function (startTime = 85959, endTime = 91000) {
var type = -1;
var d = new Date();
var hour = pay(d.getHours(), 2); //得到小时数
var minute = pay(d.getMinutes(), 2); //得到分钟数
var second = pay(d.getSeconds(), 2); //得到秒数
var milliseconds = pay(d.getMilliseconds(), 3); //得到毫秒数
var mtime = ("" + hour + minute + second) * 1;
var mtimeNow = ("" + hour + minute + second + milliseconds) * 1;
var startTimeNow = ("" + startTime + 970) * 1;
var endTimeNow = ("" + endTime + 970) * 1;
console.log(">>" + mtimeNow + "ms");
if (mtimeNow > startTimeNow && mtimeNow < endTimeNow) {
console.log(
"type = 1时," + mtimeNow + "ms == " + "startTimeNow:" + startTimeNow
);
type = 1;
} else if (mtime > endTime) {
type = 0;
} else {
type = -1;
if (oldMinute !== minute) {
oldMinute = minute;
console.clear();
console.log("-----------清空---------------");
}
}
return type;
};
var el1 = obj["btn0"]["el"]();
if (!el1) {
alert("初始化dom没获取到,请重新输入!!!");
console.log("》》脚本退出执行!《《");
return;
}
timer1 = setInterval(() => {
var timeType = getTimer(startTime, endTime);
if (timeType == 0) {
alert("超出截至时间!");
clearInterval(timer1);
clearTimeout(timer);
timer1 = null;
timer = null;
activeIndex = 0;
}
if (activeIndex > 0) return;
console.log("当前时间!");
if (timeType == 1) {
if (el1) {
confirm(obj["btn" + activeIndex]["el"], 0);
} else {
alert("没获取到" + obj["btn0"]["el"] + "按钮");
clearInterval(timer1);
}
}
}, awaitTime);
var confirm = function (domElCb, delay) {
activeIndex += 1;
timer = setTimeout(() => {
var btnConfirmDom = domElCb();
if (btnConfirmDom) {
console.log(
"《《《 执行" +
activeIndex +
" 开始 》》》-----------" +
getTimer(startTime, endTime)
);
btnConfirmDom.click();
console.log("《《《 执行" + activeIndex + " 完成 》" + Date.now() + "》》");
clearInterval(timer1);
if (obj.length > activeIndex) {
// debugger;
confirm(
obj["btn" + activeIndex]["el"],
obj["btn" + activeIndex]["delayTime"]
);
} else {
console.log("《《《 脚本结束执行 》》》");
clearTimeout(timer);
clearInterval(timer1);
timer = null;
timer1 = null;
activeIndex = 0;
window.loot = null;
}
} else {
console.log(
"---------《《《 执行" + activeIndex + " 失败 》》》-----------"
);
if (obj["btn" + activeIndex]) {
confirm(
obj["btn" + activeIndex]["el"],
obj["btn" + activeIndex]["delayTime"]
);
} else {
console.log("《《《 脚本结束执行 》》》");
clearTimeout(timer);
clearInterval(timer1);
timer = null;
timer1 = null;
activeIndex = 0;
window.loot = null;
}
}
}, delay);
};
};
if (!win.loot) {
alert(
`需要手动调用loot方法,如:
loot({
// 预先获取需要触发dom元素,可设置多个元素依次点击(设置delayTime控制执行间隔时间)
domArr: [
{
el: document.querySelector( "#app > div" ) ,
delayTime: 0,
},
{
el: document.querySelector( "#app > div > div:nth-child(2) " ),
delayTime: 50,
},
{
el: document.querySelector( "#app > div > div:nth-child(2) > div > button" ),
delayTime: 100,
},
],
startTime: 125959, // 预约触发时间
endTime: 130000, // 结束运行时间
pollingInterval: 100, // 轮询检测时间ms
});
`
);
win.loot = loot;
}
})(window);