软件下载地址:助手https://www.lanzoui.com/b01cfbrbi喵惠助手是一款基于安卓系统的辅助脚本工具,模拟人工在手机屏幕上点击,实现自动化操作。
支持淘宝/天猫、京东、拼多多,抖音直播等平台,抢购小米手机/茅台/Nike耐克球鞋/Adidas阿迪达斯鞋子等等。
源码
//打开浮窗
function openConsole() {
auto.waitFor()
//显示控制台
var middle = device.width / 2 - 400;
console.setSize(800, 800);
console.setPosition(middle, 0);
console.show();
}
// 时间戳转时间字符串
function add0(m) {
return m < 10 ? '0' + m : m
}
function add00(m) {
if (m < 10) {
return '00' + m;
} else if (m < 100) {
return '0' + m;
} else {
return m;
}
}
function formatDate(needTime) {
//needTime是整数,否则要parseInt转换
var time = new Date(parseInt(needTime));
var h = time.getHours();
var mm = time.getMinutes();
var s = time.getSeconds();
var ms = time.getMilliseconds();
return add0(h) + ':' + add0(mm) + ':' + add0(s) + ":" + add00(ms);
}
// 根据时间偏移值计算真实时间
function getNow() {
var now = new Date().getTime();
if (isUseNetTime) {
return now - NTPClockOffset;
}
return now;
}
// 检测时间字符串是否有效
function strDateTime(str) {
var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;
var r = str.match(reg);
if (r == null) return false;
var d = new Date(r[1], r[3] - 1, r[4], r[5], r[6], r[7]);
return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4] && d.getHours() == r[5] && d.getMinutes() == r[6] && d.getSeconds() == r[7]);
}
// 获取默认开始时间
function getTime() {
var fmt = "YYYY-MM-dd hh:mm:ss";
var d = new Date();
var hh = d.getHours();
var mm = d.getMinutes();
if (mm < 30) {
mm = 30
} else {
hh += 1;
mm = 0
}
var o = {
"Y+": d.getYear() + 1900,
"M+": d.getMonth() + 1,
"d+": d.getDate(),
"h+": hh,
// "m+": d.getMinutes(),
// "s+": d.getSeconds()
"m+": mm,
"s+": 0
};
for (var k in o) {
if (new RegExp("(" + k + ")").test(fmt)) {
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 4) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
}
}
fmt = fmt.replace(/-/g, '/');
return fmt;
}
//*******************************************************************基础方法***************************************************************************************** */
//*******************************************************************滑动方法***************************************************************************************** */
/**
* 下拉滑动
* @param {*} duration 不能小于350ms
*/
function dropDown(duration) {
var width = device.width;
var height = device.height;
var y1 = height / 2;
var y2 = height * 3 / 4;
var x1 = width / 2;
var x2 = width / 2;
// log(x1+"|"+y1+"|"+x2+"|"+y2)
logInfo("刷新:" + swipe(x1, y1, x2, y2, duration))
}
/**
* 真人模拟滑动函数
*
* 传入值:起点终点坐标
* 效果:模拟真人滑动
*/
function randomSwipe(sx, sy, ex, ey) {
//设置随机滑动时长范围
var timeMin = 1000
var timeMax = 3000
//设置控制点极限距离
var leaveHeightLength = 500
//根据偏差距离,应用不同的随机方式
if (Math.abs(ex - sx) > Math.abs(ey - sy)) {
var my = (sy + ey) / 2
var y2 = my + random(0, leaveHeightLength)
var y3 = my - random(0, leaveHeightLength)
var lx = (sx - ex) / 3
if (lx < 0) { lx = -lx }
var x2 = sx + lx / 2 + random(0, lx)
var x3 = sx + lx + lx / 2 + random(0, lx)
} else {
var mx = (sx + ex) / 2
var y2 = mx + random(0, leaveHeightLength)
var y3 = mx - random(0, leaveHeightLength)
var ly = (sy - ey) / 3
if (ly < 0) { ly = -ly }
var y2 = sy + ly / 2 + random(0, ly)
var y3 = sy + ly + ly / 2 + random(0, ly)
}
//获取运行轨迹,及参数
var time = [0, random(timeMin, timeMax)]
var track = bezierCreate(sx, sy, x2, y2, x3, y3, ex, ey)
// log("随机控制点A坐标:" + x2 + "," + y2)
// log("随机控制点B坐标:" + x3 + "," + y3)
// log("随机滑动时长:" + time[1])
// log("time:"+time)
// log("track:"+track)
//滑动
gestures(time.concat(track))
}
function bezierCreate(x1, y1, x2, y2, x3, y3, x4, y4) {
//构建参数
var h = 100;
var cp = [{ x: x1, y: y1 + h }, { x: x2, y: y2 + h }, { x: x3, y: y3 + h }, { x: x4, y: y4 + h }];
var numberOfPoints = 100;
var curve = [];
var dt = 1.0 / (numberOfPoints - 1);
//计算轨迹
for (var i = 0; i < numberOfPoints; i++) {
var ax, bx, cx;
var ay, by, cy;
var tSquared, tCubed;
var result_x, result_y;
cx = 3.0 * (cp[1].x - cp[0].x);
bx = 3.0 * (cp[2].x - cp[1].x) - cx;
ax = cp[3].x - cp[0].x - cx - bx;
cy = 3.0 * (cp[1].y - cp[0].y);
by = 3.0 * (cp[2].y - cp[1].y) - cy;
ay = cp[3].y - cp[0].y - cy - by;
var t = dt * i
tSquared = t * t;
tCubed = tSquared * t;
result_x = (ax * tCubed) + (bx * tSquared) + (cx * t) + cp[0].x;
result_y = (ay * tCubed) + (by * tSquared) + (cy * t) + cp[0].y;
curve[i] = {
x: result_x,
y: result_y
};
}
//轨迹转路数组
var array = [];
for (var i = 0; i < curve.length; i++) {
try {
var j = (i < 100) ? i : (199 - i);
xx = parseInt(curve[j].x)
yy = parseInt(Math.abs(100 - curve[j].y))
} catch (e) {
break
}
array.push([xx, yy])
}
return array
}