QQ跳码注册陌陌稳定版
```js
/**
* QQ跳码注册陌陌稳定版
* auth:ydy
* QQ398123186
*/
auto();//开启无障碍模式
var y = 1058//设置滑动按钮高度
//Q跳注册陌陌
websever = 'http://39.96.39.174';
let qqhao;
let qqpwd;
let imgname;
let shebeiinfo;
let imei;
let sousuozhanghao = http.get(websever + '/api/index/getmomo').body.string()
main();
//主程序
function main() {
while (true) {
openwuji();//打开无极
sleep(2000)
//打开沙盒
if (openshahe() == false) {
continue;
}
sleep(1000);
if (gaiji() == false) {
//修改机型
continue;
}
sleep(1000);
clearQQ();//清除QQ数据
if (run_qq() == false) {
continue;
}
sleep(2000)
//第二次打开
if (openshahe() == false) {
continue;
}
sleep(1000);
cleraMM();
sleep(2000);
//打开陌陌
if (run_momo() == false) {
continue;
}
sleep(3000)
}
}
function run_momo() {
try {
id("appIcon").waitFor();//等待出现
id("appIcon").find()[1].click();
text('输入手机号码').waitFor()
sleep(2000);
click(472, 1625);
text('QQ登录').waitFor();
if (text('授权并登录').exists() || text('登录').exists()) {
className('android.widget.Button').click()
sleep(8000);
if (text('下一步').exists()) {
toastLog('进入填写陌陌资料');
sleep(2000)
click(90, 672);
opention_birth();
click(204, 891)//选择性别
text('下一步').waitFor();
sleep(2000);
click(text("下一步").findOne().bounds().centerX(), text("下一步").findOne().bounds().centerY())
} else {
toastLog('QQ号:' + qqhao + ',已注册过陌陌');
return false;
}
}
sleep(3000)
text('绑定手机').waitFor();
text('跳过').click()
sleep(3000);
if (text('跳过').exists()) {
text('跳过').click();
}
sleep(2000)
if (text('消息').exists()) {
click(text('消息').findOne().bounds().centerX(), text('消息').findOne().bounds().centerY());
sleep(5000)
click(text('搜索').findOne().bounds().centerX(), text('搜索').findOne().bounds().centerY());
toastLog('搜索用户组')
Text(sousuozhanghao);
sleep(5000)
click(138, 387)//点击搜索用户组
toastLog('查找用户:' + sousuozhanghao)
sleep(10000)
back()//返回上一级
sleep(5000)
//在返回上一级
back()//
sleep(5000)
click(text('更多').findOne().bounds().centerX(), text('更多').findOne().bounds().centerY())
sleep(5000)
//编辑个人资料
text('查看或编辑个人资料').waitFor();
click(text('查看或编辑个人资料').findOne().bounds().centerX(), text('查看或编辑个人资料').findOne().bounds().centerY())
text('资料').waitFor();//等待资料出现
click(text('资料').findOne().bounds().centerX(), text('资料').findOne().bounds().centerY())
//上滑
swipe(500, 1000, 500, 0, 1000)
sleep(3000)
momozhanghao = className('android.widget.TextView').find()[19].text().split(":")[1]
toastLog('陌陌账号为:' + momozhanghao)
sleep(2000)
back();
sleep(2000)
swipe(500, 1000, 500, 0, 1000)
sleep(2000)
text('设置').waitFor();
click(text('设置').findOne().bounds().centerX(), text('设置').findOne().bounds().centerY())
sleep(2000)
text('设置').waitFor();
click(42, 300)//点击账号与安全
sleep(5000)
text('密码修改').waitFor();
click(text('密码修改').findOne().bounds().centerX(), text('密码修改').findOne().bounds().centerY());
sleep(3000)
text('设置密码').waitFor();
if (className('android.widget.EditText').find().size() == 3) {
back();//返回上一级;
sleep(2000)
back();
click(text('密码修改').findOne().bounds().centerX(), text('密码修改').findOne().bounds().centerY());
}
//获取密码
url = websever + '/api/index/setpwd';
res = http.get(url);
pwd = res.body.string()
Text(pwd)
//重复密码
sleep(5000)
click(30, 519);
Text(pwd);
goback_http = momozhanghao + '|' + pwd;
toastLog(goback_http);
sleep(5000)
//点击修改
click(text('修改').findOne().bounds().centerX(), text('修改').findOne().bounds().centerY())
//回传致服务器
http.get(websever + '/api/index/fanhui?goback_http=' + goback_http + '&name=yushenggongzuoshi&jx=' + shebeiinfo + '&imei=' + imei)
sleep(3000)
click(756, 1002)
} else {
return false;
}
} catch (e) {
return false;
}
}
//QQ登陆
function run_qq() {
try {
id("appIcon").waitFor();//等待出现
id("appIcon").find()[0].click();
text('登 录').waitFor()//QQ出现登陆
text('登 录').click();
//获取服务器账号密码
while (getqq_number() == 0) {
toastLog('服务器上暂无可用的QQ号');
sleep(3000);
getqq_number()
}
text('QQ号/手机号/邮箱').waitFor();
text('QQ号/手机号/邮箱').click();
Text(qqhao)
sleep(3000)
desc('密码 安全').click()//点击密码栏
Text(qqpwd)
sleep(3000);
text('登 录').click()
sleep(10000);
if (text('拖动下方滑块完成拼图').exists()) {
text('拖动下方滑块完成拼图').waitFor();
toastLog('开始滑块');
sleep(3000)
if (!requestScreenCapture()) {
alert("请求截图权限失败!");
exit();
}
if (!start()) {
//如果滑块未成功请手动滑块
}
sleep(3000)
while (text('拖动下方滑块完成拼图').exists()) {
//没有跳过滑块
sleep(3000);
toastLog('请手动完成本次滑块操作');
}
if (text('确定').exists()) {
text('确定').click();
sleep(1000)
text('登 录').click()
sleep(10000)
text('拖动下方滑块完成拼图').waitFor();
if (!requestScreenCapture()) {
alert("请求截图权限失败!");
exit();
}
while (!start()) { }//滑块致完工
sleep(5000)
while (text('拖动下方滑块完成拼图').exists()) {
//没有跳过滑块
sleep(3000);
toastLog('请手动完成本次滑块操作');
}
}
}
if (text('取消').exists()) {
text('取消').click();
return false;
}
sleep(3000)
if (text('绑定手机号码').exists()) {
text('绑定手机号码').waitFor();
text('关闭').click();
}
sleep(3000)
if (text('通讯录').exists()) {
text('通讯录').waitFor();
text('关闭').click();
}
toastLog('进入QQ主界面;等待5秒上传照片');
rand_img();
sleep(5000);
let qqimg = className('android.widget.FrameLayout').find()[7];
click(qqimg.bounds().centerX(), qqimg.bounds().centerY())//点击侧边栏
//等待出现
click(className('android.widget.FrameLayout').find()[5].bounds().centerX(), className('android.widget.FrameLayout').find()[5].bounds().centerY());
if (text('QQ身份证').exists()) {
text('QQ身份证').waitFor();
desc('关闭按钮').click();
}
//加载数据
sleep(10000)
text('编辑资料').waitFor();
text('编辑资料').click();
toastLog('进入编辑资料');
sleep(3000)
text('编辑资料').waitFor();
//点击头像
click(0, 558);
toastLog('进入头像挂件');
//等待选项
text('从相册选择图片').waitFor();
Tap(0, 1290)//点击从相册选择图片
text('相册').waitFor();
toastLog('默认选择第一张照片');
click(className('android.widget.ImageView').find()[0].bounds().centerX(),
className('android.widget.ImageView').find()[0].bounds().centerY());
sleep(3000)
text('完成').waitFor();
text('完成').click();
//删除下载图片
toastLog('等待3秒,正在删除图片......')
del_img();
sleep(3000);
text('头像挂件').waitFor();
text('返回').click();
sleep(3000)
text('编辑资料').waitFor();
click(885, className('android.widget.EditText').find()[0].bounds().centerY())
toastLog("删除昵称")
for (let t = 10; t > 0; t--) {
sleep(1000)
KeyCode("KEYCODE_DEL")
}
sleep(8000)
setClip(rand_name());
className('android.widget.EditText').find()[0].paste()
//返回保存
sleep(2000)
text('返回').click();//保存
toastLog('QQ信息修改成功');
sleep(2000)
text('返回').click();//保存
sleep(2000)
text('设置').waitFor();
click(60, 1820)
sleep(2000)
text('设置').waitFor();
click(text('帐号、设备安全').findOne().bounds().centerX(), text('帐号、设备安全').findOne().bounds().centerY())
sleep(3000)//记住机型
shebeiinfo = className('android.widget.TextView').find()[7].text();
toastLog('机型:' + shebeiinfo);
home();
sleep(3000)
} catch (e) {
return false;
}
}
//获取服务器女性名字
function rand_name() {
let names = http.get(websever + '/api/index/getnames').body.string()
return names;
}
//设置陌陌生日
function opention_birth() {
//后台设置
year = http.get(websever + '/api/index/getyear')
year = year.body.string()
if (year < 0) {
//从上往下滑
for (let i = 1; i <= Math.abs(year); i++) {
swipe(300, 760, 300, 900, 2000)//年
sleep(800)
//log('当前年执行:'+i+'次')
}
} else {
//从下往上滑
for (let i = 1; i <= year; i++) {
swipe(300, 900, 300, 760, 2000)//年
sleep(800)
//log('当前年执行:'+i+'次')
}
}
sleep(1000)
month = http.get(websever + '/api/index/getmonth')
month = month.body.string()
for (let i = 1; i <= (13 - Math.abs(month)); i++) {
swipe(554, 769, 550, 769, 2000)//月
sleep(800)
//log('当前月执行:'+i+'次')
}
sleep(1000)
day = http.get(websever + '/api/index/getday')
day = day.body.string()
for (let i = 1; i <= (31 - Math.abs(day)); i++) {
swipe(750, 767, 700, 767, 500)//日
sleep(800)
//log('当前日执行:'+i+'次')
}
sleep(1000)
click(750, 1260)//点击确定
sleep(1000)
}
//打开沙盒
function openshahe() {
app.launch("com.dobe.sandbox");
sleep(2000)
if (text('机智沙盒').exists()) {
toastLog('打开沙盒')
return true
} else { return false }
}
//一键vpn
function yjvpn() {
app.launch("com.leteng.ltproxy");
toastLog('正在换ip中,请稍后');
sleep(5000);
id('bt_change_ip').click();
sleep(15000)
toastLog('ip更换成功')
}
//一键新机
function gaiji() {
if (id("download_device").exists()) {
sleep(2000)
id("download_device").findOne().click()
sleep(2000)
if (className('android.widget.TextView').find()[2].text() == '修改设备') {
var xiugaishebei = className('android.widget.TextView').find()[2];
click(xiugaishebei.bounds().centerX(), xiugaishebei.bounds().centerY());
sleep(2000)
if (className("android.widget.Button").exists()) {
className("android.widget.Button").findOne().click();
className("android.widget.TextView").indexInParent(4).waitFor();
//等待控件出现
toastLog('修改设备成功')
sleep(1000);
back();
sleep(1000);
back();
sleep(1000)
} else {
toastLog('修改设备失败');
return false;
}
}
}
//二次清机
sleep(2000)
if (id("download_device").exists()) {
sleep(2000)
id("download_device").findOne().click()
sleep(2000)
if (className('android.widget.TextView').find()[2].text() == '修改设备') {
var xiugaishebei = className('android.widget.TextView').find()[2];
click(xiugaishebei.bounds().centerX(), xiugaishebei.bounds().centerY());
sleep(2000)
if (className("android.widget.Button").exists()) {
className("android.widget.Button").findOne().click();
//等待控件出现
toastLog('修改设备成功')
className("android.widget.TextView").indexInParent(4).waitFor();
sleep(3000)
imei = className('android.widget.TextView').find()[2].text();
toastLog('设备号:' + imei);
sleep(1000);
back();
sleep(1000);
back();
sleep(1000)
}
}
}
}
//点击momo上角的三个点--清除数据
function cleraMM() {
id("context_menu").find()[1].click()
id("kill").waitFor();
//点击关闭进程
id("kill").findOne().click();
id("btnPositive").waitFor();
id("btnPositive").findOne().click();
sleep(5000)
id("context_menu").find()[1].click()
id("wipe").waitFor();
id("wipe").findOne().click();
id("btnPositive").waitFor();
id("btnPositive").findOne().click();
toastLog('陌陌数据清理');
sleep(2000);
}
//清除QQ上角的三个点--清楚数据
function clearQQ() {
id("context_menu").find()[0].click()
id("kill").waitFor();
//点击关闭进程
id("kill").findOne().click();
id("btnPositive").waitFor();
id("btnPositive").findOne().click();
toastLog('QQ进程关闭');
sleep(5000)
id("context_menu").find()[0].click()
id("wipe").waitFor();
id("wipe").findOne().click();
id("btnPositive").waitFor();
id("btnPositive").findOne().click();
toastLog('QQ数据清理');
sleep(2000);
}
//切换无极vpn
function openwuji() {
app.launch("org.wuji");
sleep(2000)
click(500, 1350);
sleep(3000)
}
//获取服务器QQ号码
function getqq_number() {
let url = websever + '/api/index/getqq';
let res = http.get(url).body.string()
if (res != 0) {
qqhao = res.split('|')[0];
qqpwd = res.split('|')[1];
return true;
} else {
//
log('服务器暂无可使用的QQ号');
return false;
}
}
function discernSlidingblock(img, ratio) {
//创建识别变量
var temp, temp2, x, y, num, color, p, temp3, arr1;
//分析设备分辨率
if (ratio == 720) {
var tb = [348, 253, 691, 638, 81]
log("您的设备分辨率为:720p");
} else if (ratio == 1080) {
var tb = [463, 387, 912, 831, 125]
log("您的设备分辨率为:1080p");
} else {
log("当前设备分辨率不符合规范")
return -2
}
num = Math.ceil(tb[4] / 3.3 - 4);
//计算滑块位置
for (var k = 29; k <= 40; k++) {
temp2 = "";
color = "#" + k + "" + k + "" + k + "";
for (var i = 1; i <= num; i++) {
temp2 = temp2 + "0|" + i + "|" + color + ",";
temp2 = temp2 + i + "|0|" + color + ",";
temp2 = temp2 + "1|" + i + "|" + color + ",";
temp2 = temp2 + i + "|1|" + color + ",";
temp2 = temp2 + "2|" + i + "|" + color + ",";
temp2 = temp2 + i + "|2|" + color + ",";
}
x = 0;
while (x > -2) {
y = 0;
while (y > -2) {
temp = "";
for (var i = 1; i <= num; i += 2) {
temp = temp + "0|" + (tb[4] + y - i - 1) + "|" + color + ",";
temp = temp + (tb[4] + x) + "|" + i + "|" + color + ",";
temp = temp + (tb[4] + x) + "|" + (tb[4] + y - i - 1) + "|" + color + ",";
temp = temp + (tb[4] + x - i - 1) + "|0|" + color + ",";
temp = temp + i + "|" + (tb[4] + y) + "|" + color + ",";
temp = temp + (tb[4] + x - i - 1) + "|" + (tb[4] + y) + "|" + color + ",";
temp = temp + "1|" + (tb[4] + y - i - 1) + "|" + color + ",";
temp = temp + (tb[4] + x - 1) + "|" + i + "|" + color + ",";
temp = temp + (tb[4] + x - 1) + "|" + (tb[4] + y - i - 1) + "|" + color + ",";
temp = temp + (tb[4] + x - i - 1) + "|1|" + color + ",";
temp = temp + i + "|" + (tb[4] + y - 1) + "|" + color + ",";
temp = temp + (tb[4] + x - i - 1) + "|" + (tb[4] + y - 1) + "|" + color + ",";
}
temp = temp + temp2 + "0|0|" + color;
arr1 = temp.split(",");
var arr2 = new Array();
for (var i = 0; i < arr1.length - 1; i++) {
arr2[i] = new Array();
temp3 = arr1[i].split("|");
arr2[i] = [Number(temp3[0]), Number(temp3[1]), temp3[2]];
}
try {
p = images.findMultiColors(img, color, arr2, {
region: [tb[0], tb[1], tb[2] - tb[0], tb[3] - tb[1]],
threshold: (Math.floor(k / 10) * 16 + k % 10)
});
if (p) {
img.recycle();
return p.x
}
} catch (error) {
//出错
console.log("识别失败,错误原因:" + error);
return -1;
}
y = --y;
}
x = --x;
}
}
try {
img.recycle();
} catch (error) {
console.log("识别失败,错误原因:" + error);
}
return -1;
}
function start() {
for (var i = 0; i < 0; i++) { sleep(1000); log(i); }
while (true) {
img = images.captureScreen();
if (img) {
log("截图成功。进行识别滑块!");
break;
} else {
log('截图失败,重新截图');
}
}
var x = discernSlidingblock(img, device.width) + 65
console.info("识别结果滑块X坐标:" + x);
if (x > -1) {
randomSwipe(220, y, x, y)
return true;
} else {
return false;
console.log("识别有误,请确认是否在滑块界面");
}
}
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
}
/**
* 真人模拟滑动函数
*
* 传入值:起点终点坐标
* 效果:模拟真人滑动
*/
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])
//滑动
gestures(time.concat(track))
}
function rand_img() {
//从服务器上下载图片
let tx = http.get(websever + "/system/index/return_tx").body.string();
var url = websever + tx;
//保存到路径/sdcard/auto.js.png
threads.start(function () {
imgname = (new Date).getTime();
if (url) {
files.writeBytes("/sdcard/" + imgname + ".jpg", http.get(url).body.bytes());
media.scanFile("/sdcard/" + imgname + ".jpg");
toast("图片上传成功!");
}
});
}
//删除文件
function del_img() {
url = "/sdcard/" + imgname + ".jpg";
threads.start(function () {
if (files.remove(url)) {
log('图片删除成功')
} else {
log('图片删除失败')
}
})
}
```