分享源码
界面截图:
是否带模块:
纯源码
备注说明:
-
本帖最后由 洛璃 于 2021-8-10 18:37 编辑
编程工具:autojs
某音版本:16.8
设备:安卓7.0及以上 功能:自动涨粉,3天千粉
原理:自动筛选互关的用户进行关注并评论
直接上源码,源码导入Autojs即可使用;
其实我没有内容
"ui";
var 配置 = storages.create("doo");
var version = "1.5"
ui.layout(
<vertical>
<appbar>
<horizontal>
<toolbar id="bt" title="share" gravity="center" textColor="red" layout_weight="1" />
<Switch id="autoService" text="无障碍" checked="{{auto.service != null}}" padding="10 20 8 8" textSize="15sp" />
</horizontal>
</appbar>
<text text="" gravity="left" />
<text text="" gravity="left" />
<text text="" gravity="left" />
<text text="" gravity="left" />
<button id="start" text="开始运行" style="Widget.AppCompat.Button.Colored" />
</vertical>
);
// ui.安卓版本.text(" 本机安卓版本:" + device.release + "");
// ui.ver.text(" 当前软件版本:" + version + " ");
ui.autoService.on("check", function (checked) {
if (checked && auto.service == null) {
app.startActivity({
action: "android.settings.ACCESSIBILITY_SETTINGS"
});
}
if (!checked && auto.service != null) {
auto.service.disableSelf();
}
});
ui.emitter.on("resume", function () {
ui.autoService.checked = auto.service != null;
});
var 悬块 = function (window, view) {
if (!window || !view) {
throw "缺参数";
};
this.x = 0, this.y = 0;
this.windowX, this.windowY;
this.downTime = 500;
this.Timeout = 0;
this.Click = function () { };
this.LongClick = function () { };
this.setClick = function (fun) {
//判断参数类型是否为函数?
if (typeof fun == "function") {
this.Click = fun;
};
};
this.setLongClick = function (fun, ji) {
//判断参数类型是否为函数?
if (typeof fun == "function") {
this.LongClick = fun;
//判断参数是否可为设置数字?
if (parseInt(ji) <= 1000) {
this.downTime = parseInt(ji);
};
};
};
view.setOnTouchListener(new android.view.View.OnTouchListener((view, event) => {
switch (event.getAction()) {
//按下事件。
case event.ACTION_DOWN:
//按下记录各种坐标数据。
this.x = event.getRawX();
this.y = event.getRawY();
this.windowX = window.getX();
this.windowY = window.getY();
//创建一个定时器用来定时执行长按操作。
this.Timeout = setTimeout(() => {
this.LongClick();
this.Timeout = 0;
}, this.downTime);
return true;
//移动事件。
case event.ACTION_MOVE:
//移动距离过大则判断为移动状态
// if (Math.abs(event.getRawY() - this.y) > 5 && Math.abs(event.getRawX() - this.x) > 5) {
// //移动状态清除定时器
// if (this.Timeout) {
// //定时器存在则清除定时器。
// clearTimeout(this.Timeout);
// this.Timeout = 0;
// };
// //移动手指时调整悬浮窗位置
// window.setPosition(this.windowX + (event.getRawX() - this.x), this.windowY + (event.getRawY() - this.y));
// };
return true;
//抬起事件。
case event.ACTION_UP:
if (this.Timeout) {
clearTimeout(this.Timeout);
this.Timeout = 0;
this.Click();
};
return true;
};
return true;
}));
};
var common = require('./common.js');
var App = {
baseUrl: "", // 后台访问地址
packageName: "",
app_version: "1.0.0",
app_name: "",
dy_version: "16.8.0",
creat_time: '2021-8-3'
}
var Config = {
video_keywords: '互关,互粉,回关,互赞,互相,互点,必回,报团,取暖,宠粉,秒回,礼尚往来,信誉第一,不拖欠,张粉,涨粉',
comment_keywords: '互关,互粉,回关,互赞,互相,互点,必回,报团,取暖,宠粉,秒回,礼尚往来,粉丝,关注,信誉第一,不拖欠,张粉,涨粉',
is_commentdigg: false,//评论点赞
is_comment: true,//评论
is_following: true,//关注
work_duration: 9999,//运行时长(分钟)
comment_content: [
"报团取暖,关几个回几个,礼尚往来[比心][比心][比心]永关注,不取消[送心]",
'新人1000粉丝,报团取暖,关注几个回几个,礼尚往来[赞],绝对遵守规则',
'交朋友交朋友抱抱拉拉手必回必回[灵机一动][灵机一动][灵机一动][比心]',
'报团取暖,关几个回几个,礼尚往来[比心]信誉第一[比心][比心][比心]信誉第一',
'新人需1000分粉丝,报团取暖,关几个回几个,礼尚往来[比心][比心][比心]',
'报团取暖,活跃宝宝一枚,诚实守信,关几个,回几个,礼尚往来,实力宠粉[比心][比心][比心]在线等你们[比心][比心][比心]',
'新人需1000分粉丝,报团取暖,关几个回几个,礼尚往来[比心][比心][比心]我需要你们,[一起加油][一起加油]',
'诚信第一[比心][比心][比心]有几回几[比心][比心][比心]可能会迟到[比心][比心][比心]但不拖欠[比心][比心][比心]秒[比心]今限明回',
'诚实守信[比心]一起加油[一起加油]不拖欠[比心][比心]关注点赞秒回[比心][比心]可能会迟到,但不会拖欠,新手,没秒关就是频繁了,报团取暖吧',
'不说暗话,我想张粉,报团取暖[比心][比心]诚实守信,[比心]攒几回几,从不亏欠,在线等。',
'诚信第一,有一回一,可能会迟到,但不拖欠,秒秒秒,诚信诚信,加油加油。 诚信第一,有一回一,可能会迟但不拖欠[比心]'
]
}
var comment_keywords = Config.comment_keywords.split(",");
var video_keywords = Config.video_keywords.split(",");
var startime = Date.parse(new Date());
ui.start.on("click", function () {
//程序开始运行之前判断无障碍服务
if (auto.service == null) {
toast("请先开启无障碍服务!");
return;
}
xf();
main();
});
function xf() {
var thread = threads.start(function op() {
var window = floaty.window(
<button id="but" w="35" h="60" text="停止" />
// <img id="but" src="file://stop.png" />
// <button id="but" text="stop" />
);
window.setPosition(5, device.height / 3)
setInterval(() => { }, 500);
var ad = new 悬块(window, window.but);
ad.setLongClick(function () {
var yxtime = (Date.parse(new Date()) - startime) / 1000;
yxtime = formatSeconds(yxtime);
log("提示:用户停止运行");
log("时间提示:运行" + yxtime);
exit();
});
ad.setClick(function () {
var yxtime = (Date.parse(new Date()) - startime) / 1000;
yxtime = formatSeconds(yxtime);
log("提示:用户停止运行");
log("时间提示:运行" + yxtime);
exit();
})
})
//创建一个新的悬浮控制模块 ad 并带入参数(所要控制的悬浮窗和用来控制悬浮窗移动的控件)。
}
//主程序入口
function main() {
threads.start(function () {
console.setSize(device.width * 0.4,device.height * 0.4 )
console.setPosition(device.width * 0.6, 10)
console.show();
dyhome();//启动抖音至首页
sleep(5000);
closePopup();//启动关闭弹窗线程
//判断作品是否符合,符合后评论,评论回复
养号();
})
}
/**
* 获取作品的点赞数量和评论数量
*/
function get_video_count() {
var res = {};
var uc = textMatches("[0-9]+|[0-9].+w").clickable().visibleToUser().find();
if (uc.length < 2) {
res["dz"] = 0;
res["pl"] = 0;
} else {
for (i = 0; i < uc.length; i++) {
var a = uc[i].text();
if (a.indexOf("w") > 0) {
a = a.replace("w", "");
a = a * 10000;
}
if (i == 0) {
res["dz"] = a;
}
if (i == 1) {
res["pl"] = a;
}
}
}
return res;
}
/**
* 常规养号
*/
function 养号() {
var mt = Date.parse(new Date());
while (true) {
if (视频检测(video_keywords)) {
var sj = random(15, 25);
if (!isNaN(sj)) {
ts("浏览时间:" + sj + "秒");
sleep(sj * 1000);
} else {
ts("浏览时间:10秒");
sleep(10 * 1000);
}
var gzsjs = random(1, 100);
if (30 > gzsjs) {
if (desc("关注").visibleToUser().exists()) {
desc("关注").visibleToUser().findOne(1000).click();
sleep(1000);
}
}
var sjs = random(1, 100);
if (35 > sjs) {
// console.log("执行操作:双击点赞");
click(device.width / 2 + random(-50, 50), device.height / 2 + random(-50, 50));
sleep(50);
click(device.width / 2 + random(-50, 50), device.height / 2 + random(-50, 50));
sleep(500);
}
// sjs = random(1, 100);
// if (sjs <= ui.plgl.text()) {
评论();
// }
};
common.slide();//滑动
sleep(random(100, 1000));
if (Date.parse(new Date()) - mt > 1000 * 60 * Config.workduration) {
//home();
alert("系统提示:结束。")
return;
}
sleep(100);
}
}
/**
* 视频检测
* [url=home.php?mod=space&uid=275307]@param[/url] {string[]} arr 关键词组
* [url=home.php?mod=space&uid=161696]@Return[/url] {boolean} 当前视频是否包含关键词
*/
function 视频检测(arr) {
var jstime = new Date().getTime();
var h = device.height;
if (!text("推荐").visibleToUser().exists()) {
dyhome();
}
// if (text("评论并转发").visibleToUser().exists()) {
// back();
// sleep(1000);
// }
var uc = textMatches(".....*").visibleToUser().boundsInside(0, device.height / 2, device.width, device.height).find();
for (let i = 0; i < uc.length; i++) {
if (uc[i].text() == "点击进入直播间") {
log("直播中,自动跳过");
log("检测耗时:" + (new Date().getTime() - jstime) + "毫秒");
return false;
}
if (uc[i].text().indexOf("[t]") != -1 || uc[i].text().indexOf("广告") != -1) {
log("广告作品,自动跳过");
log("检测耗时:" + (new Date().getTime() - jstime) + "毫秒");
return false;
}
}
for (let i = 0; i < uc.length; i++) {
for (let k = 0; k < arr.length; k++) {
if (uc[i].text().indexOf(arr[k]) != -1) {
log("检测成功,视频符合");
// 浏览数量 = 浏览数量 + 1;
log(uc[i].text());
log("关键词:" + arr[k]);
log("检测耗时:" + (new Date().getTime() - jstime) + "毫秒");
// if (parseInt(ui.zpdzs.text()) > 0 || parseInt(ui.zppls.text()) > 0) {
// var a = 取点赞评论数();
// if (a["dz"] >= parseInt(ui.zpdzs.text()) && a["pl"] >= parseInt(ui.zppls.text())) {
// return true;
// } else {
// log("系统提示:点赞数或评论数不符");
// return false;
// }
// }
return true;
}
}
}
log("跳过!当前视频不包含关键词");
log("检测耗时:" + (new Date().getTime() - jstime) + "毫秒");
if (new Date().getTime() - jstime < 1500) {
sleep(random(500, 1500));
}
return false;
}
/**
* 取出包含关键词的评论内容并返回数组
* @param {string[]} strnum 关键词组
*/
function 取评论内容(strnum) {
var res = "";
var jihe = [];
try {
var uc = textMatches(".+分钟前|.+小时前|刚刚|昨天[0-9][0-9]:[0-9][0-9]").visibleToUser().find();
for (let k = 0; k < uc.length; k++) {
for (var i = 0; i < uc[k].parent().childCount(); i++) {
var child = uc[k].parent().child(i);
// log(child)
if (child.clickable()) {
for (let m = 0; m < strnum.length; m++) {
if (child.text().indexOf(strnum[m]) != -1) {
log(child.text());
log("关键词:" + strnum[m]);
res = uc[k].parent().child(i - 1);
// log(res.id());
if (res.id() == "com.ss.android.ugc.aweme:id/title") {
jihe.push(res);
break;
}
// return res;
}
}
}
}
}
} catch (error) {
log(error)
}
return jihe;
}
/**
* 评论主操作
*/
function 评论() {
var a = descMatches("评论.+按钮").clickable().visibleToUser().findOnce();
if (a) {
a.click();
sleep(1000);
}
if (textStartsWith("留下你的精彩评论").visibleToUser().exists()) {
log("操作提示:获取评论");
var m = 0;
while (true) {
m = m + 1;
var title_num = 取评论内容(comment_keywords);
log("本页符合:" + title_num.length);
for (var i = 0; i < title_num.length; i++) {
if (title_num[i]) {
// log(title_num[i]);
//重新定位控件;
try {
var username = textMatches(title_num[i].text()).visibleToUser().findOnce();
if (!username) {
username = title_num[i];
}
log(username.text())
//给评论点赞
if (Config.is_commentdigg) {
log("commentdigg")
var a = clickable().className("android.view.View").boundsInside(device.width * 3 / 4, username.bounds().top - 100, device.width, username.bounds().top + 150).visibleToUser().findOne(1000);
if (a) {
log(a);
a.click();
sleep(1000);
}
}
//关注评论作者
if (Config.is_following) {
log("following")
// username.click();
click(username.bounds().centerX(), username.bounds().centerY())
sleep(1500);
//判断 当前页面
var page = desc("更多").visibleToUser().className("android.widget.ImageView").findOnce();
if (page) {
var follow = textMatches(".*#.*关注|关注").visibleToUser().clickable().findOne(1000);
if (follow) {
//判断是否为私密账号
if (!text("这是私密账号").visibleToUser().exists()) {
//简单取账号信息做判断是否关注
var userinfo = get_user_info();
if (userinfo.fanscount <= 10000) {
if (userinfo.followcount > 100 || userinfo.fanscount <= 100) {
follow.click();
sleep(1000);
}
}
}
back();
sleep(1000);
}
}
var page = desc("更多").visibleToUser().className("android.widget.ImageView").findOnce();
if (page) {
back();
sleep(1000);
}
}
} catch (error) {
log(error)
}
//评论私信。
// if (ui.sxpl.checked) {
// click(title_num[i].bounds().centerX(), title_num[i].bounds().centerY())
// sleep(2000);
// if (textMatches("抖音号.+").exists()) {
// var a = desc("更多").visibleToUser(true).findOne(1000);
// if (a) {
// a.click();
// }
// sleep(1000);
// a = text("发私信").visibleToUser(true).findOne(1000);
// if (a) {
// a.click();
// sleep(1000);
// }
// }
// if (textStartsWith("发送消息").exists() || desc("表情").exists()) {
// if (chat()) {
// 任务数量 = 任务数量 + 1;
// log("任务数量:" + 任务数量);
// back();
// var sj = random(parseInt(ui.jg.text()), parseInt(ui.jg1.text()));
// if (!isNaN(sj)) {
// ts("休息时间:" + sj + "秒");
// sleep(sj * 1000);
// } else {
// ts("休息时间:3秒");
// sleep(3 * 1000);
// }
// } else {
// back();
// sleep(1000);
// }
// }
// }
//评论
if (Config.is_comment) {
log("comment")
try {
username.parent().parent().click();
sleep(1000);
var content = common.randomArr(Config.comment_content);
// var sjs = random(1, 100);
// if (sjs >= 70) {
// content = content + sj_bq();
// }
// log(content)
common.inputTxt(content);
sleep(1000);
if (desc("表情").exists()) {
var td = desc("表情").findOne().bounds();
click(td.right + 50, td.centerY());
sleep(2000);
log("执行回复:" + content);
}
} catch (error) {
}
}
}
}
if (!swipeup()) {
//滑动失败,没有更多内容了;
break;
}
if (m >= 10) {
break;
}
}
//执行评论作品
if (!desc("[呲牙]").exists()) {
var content = common.randomArr(Config.comment_content);
if (textStartsWith("留下你的精彩评论").exists()) {
// textStartsWith("留下你的精彩评论").findOne(100).click();
click("留下你的精彩评论吧");
sleep(1000);
common.inputTxt(content)
sleep(1000);
if (desc("表情").exists()) {
var td = desc("表情").findOne().bounds();
click(td.right + 50, td.centerY());
sleep(2000);
log("执行评论:" + content);
}
}
}
back();
sleep(2000);
}
// app.startActivity({
// action: "android.intent.action.VIEW",
// data: "snssdk1128://feed"
// });
sleep(100);
}
/**
* 弹窗线程检测弹窗
*/
function closePopup() {
thread = threads.start(function () {
while (true) {
sleep(5000);
if (text('朋友推荐').exists()) {
back()
sleep(1000)
};
if (text('关闭动画').exists()) {
back()
sleep(1000)
};
if (text('授权提示').exists()) {
let yes = text('同意授权').findOnce();
if (yes) {
yes.click();
}
};
if (text('好友推荐').exists()) {
let fds = id('com.ss.android.ugc.aweme:id/xg').findOnce();
if (fds) {
fds.click();
}
};
if (text('发现通讯录好友').exists()) {
let telList = text('暂时不要').findOnce();
if (telList) {
telList.click();
}
sleep(1000);
let no = text('取消').findOnce();
if (no) {
no.click();
}
};
if (text('个人信息保护指引').exists()) {
let ok = text('好的').findOnce();
if (ok) {
ok.click();
}
}
if (text('去商店评分').exists()) {
let comm = text('取消').findOnce();
if (comm) {
comm.click();
}
}
if (text('检测到更新').exists()) {
let o = text('以后再说').findOnce();
if (o) {
o.click();
}
}
if (text('我知道了').visibleToUser().exists()) {
let o = text('我知道了').visibleToUser().findOnce();
if (o) {
o.click();
}
}
if (text('安装“多闪APP”,不错过你的每一条私信').exists()) {
let ele = text('取消').findOnce();
if (ele) {
ele.click();
}
}
if (text('跳过广告').exists()) {
let ads = text('跳过广告').findOnce();
if (ads) {
ads.click();
}
}
}
});
}
/**
* 强制返回至抖音主页
*/
function dyhome() {
app.startActivity({
action: "android.intent.action.VIEW",
data: "snssdk1128://feed"
});
sleep(1000);
}
/**
* 返回一个随机表情
*/
function sj_bq() {
var str = "[微笑]|[惊呆]|[爱慕]|[流泪]|[可爱]|[害羞]|[呲牙]|[来看我]|[捂脸]|[耶]|[灵光一闪]|[偷笑]|[送心]|[大笑]|[泣不成声]|[可怜]|[奸笑]|[笑哭]|[黑线]|[坏笑]|[得意]|[翻白眼]|[互粉]|[吻]|[舔屏]|[飞吻]|[汗]|[擦汗]|[做鬼脸]|[尬笑]|[奋斗]|[惊喜]|[嘿哈]|[憨笑]|[囧]";
if (str) {
str = str.split("|");
var sjz = random(0, str.length - 1);
return str[sjz];
}
}
/**
* 控件上滑,滑动成功返回true否则返回false
*/
function swipeup() {
var uc = scrollable(true).visibleToUser(true).find();
if (uc.length > 0) {
if (uc[uc.length - 1].scrollForward()) {
return true;
} else {
return false;
}
}
}
/**
* 获取当前id的信息,获赞/关注/粉丝
* @return {Array} diggcount/followcount/fanscount
*/
function get_user_info() {
var res = {
diggcount: "",
followcount: "",
fanscount: ""
}
var info = textMatches("[0-9]+|[0-9].+w|[0-9].+亿").visibleToUser().filter(function (w) {
return w.desc() == null;
}).find();
if (info.length >= 3) {
res.diggcount = info[0].text();
if (info[1].text().indexOf("w") > -1) {
res.followcount = parseFloat(info[1].text()) * 10000;
} else {
res.followcount = info[1].text();
}
if (info[2].text().indexOf("w") > -1) {
res.fanscount = parseFloat(info[2].text()) * 10000;
} else {
res.fanscount = info[2].text();
}
}
return res;
}
function ts(txt) {
log(txt);
}
function formatSeconds(value) {
var secondTime = parseInt(value);// 秒
var minuteTime = 0;// 分
var hourTime = 0;// 小时
if (secondTime > 60) {
minuteTime = parseInt(secondTime / 60);
secondTime = parseInt(secondTime % 60);
if (minuteTime > 60) {
hourTime = parseInt(minuteTime / 60);
minuteTime = parseInt(minuteTime % 60);
}
}
var result = "" + parseInt(secondTime) + "秒";
if (minuteTime > 0) {
result = "" + parseInt(minuteTime) + "分" + result;
}
if (hourTime > 0) {
result = "" + parseInt(hourTime) + "小时" + result;
}
return result;
} 复制代码
评分
查看全部评分