参考官方文档,通过autox.js写了一款ks刷金币脚本。本代码仅用作学习参考。
autox.js官方文档:autox.js官方文档
安装autox.js后,通过右上角+号,新建js文件,把代码粘贴进去即可运行,运行过程中如果有顶部弹窗可能会导致广告视频完成失败。
代码优先完成任务,而后刷视频。
代码:
/*
* @Descripttion: 用于快手刷金币的脚本
* @Author: 只会Ctrl CV的菜鸟
* @version: 1.1
* @Date: 2022-12-19 22:54:52
* @LastEditTime: 2022-12-22 15:37:20
*/
/**
* @descripttion: 进入红包界面,查找延时10s,点击随机延时500-1500ms
* @return null
*/
function clickRedEnvelope() {
//查找红包小图标
var rect = id("com.smile.gifmaker:id/pendant_mask_bg").findOne(8000);
if (rect) {
rect = rect.bounds();
sleepRandom();
//点击红包小图标
click(rect.left, rect.top, rect.right, rect.bottom);
}
else {
toast('未查找到红包图标');
wipeUp();
clickRedEnvelope();
}
}
/**
* @descripttion: 领取宝箱,查找延时5s,点击随机延时500-1500ms
* @return null
*/
function getBox() {
//领取宝箱
var t = textMatches("立刻领.*金币").findOne(5000)
if (t) {
sleepRandom();
t.click();
toast('宝箱领取成功');
}
else {
toast('未查找到宝箱');
}
}
/**
* @descripttion: 向上滑动屏幕,每次滑动600dp
* @return
*/
function wipeUp() {
var x1 = device.width / 2 - 200;
var y1 = device.height - 300;
gesture(500, [x1, y1], [x1 - random(100, 200), y1 - 600]);
}
/**
* @descripttion: 向下滑动屏幕,每次滑动600dp
* @return
*/
function wipeDown() {
var x1 = device.width / 2 - 200;
var y1 = device.height - 300;
gesture(500, [x1, y1], [x1 + random(100, 200), y1 + 600]);
}
/**
* @descripttion: 领取额外金币,查找延时2s,点击随机延时500-1500ms
* @return
*/
function getExtra() {
var t = text('立即领取').findOne(2000);
if (t) {
sleepRandom();
t.click();
t = text('知道了').findOne(2000);
if (t) {
sleepRandom();
t.click();
}
}
else {
toast('没有额外的视频金币');
}
}
function sleepRandom() {
sleep(random(500, 1500));
}
/**
* @descripttion: 完成去关注的任务
* @return
*/
function gotoAttention() {
var i = 4;
while (i >= 0) {
var t = text('去关注').findOne(2000);
if (t) {
sleepRandom();
//点击去关注
t.click();
t = id('com.smile.gifmaker:id/follow_button').findOne(2000);
if (t) {
sleepRandom();
//点击关注
t.click();
sleepRandom();
back();
t = text('知道了').findOne(2000);
if (t) {
sleepRandom();
//点击知道了
t.click();
}
}
else {
toast('关注失败');
}
}
else {
toast('该用户没有关注任务');
i = 0;
}
i--;
}
}
/**
* @descripttion: 完成点赞任务
* @return
*/
function gotoGive() {
var t = text('去点赞').findOne(2000);
if (t) {
sleepRandom();
t.click()
var rect = id("com.smile.gifmaker:id/player_cover").findOne(2000).bounds();
if (rect) {
sleepRandom();
//点击视频
click(rect.left, rect.top, rect.right, rect.bottom);
rect = id('com.smile.gifmaker:id/like_icon').findOne(2000).bounds();
if (rect) {
sleepRandom();
//点击爱心
click((rect.left + rect.right) / 2, (rect.bottom + rect.top) / 2);
clickRedEnvelope();
t = text('知道了').findOne(2000);
if (t) {
sleepRandom();
//点击知道了
t.click();
}
}
}
}
else {
toast('用户无点赞任务');
}
/**
* @descripttion: 完成评论任务
* @return
*/
}
/**
* @descripttion: 完成评论任务
* @return {*}
*/
function gotoComment() {
var t = text('去评论').findOne(2000);
if (t) {
sleepRandom();
//去评论
t.click()
var rect = id("com.smile.gifmaker:id/player_cover").findOne(2000).bounds();
if (rect) {
sleepRandom();
//点击视频
click(rect.left, rect.top, rect.right, rect.bottom);
rect = id('com.smile.gifmaker:id/comment_icon').findOne(2000).bounds();
if (rect) {
sleepRandom();
//点击评论图标
click((rect.left + rect.right) / 2, (rect.bottom + rect.top) / 2);
t = id('com.smile.gifmaker:id/editor_holder_text').findOne(2000);
if (t) {
sleepRandom();
//点击输入框
t.click();
t = id("com.smile.gifmaker:id/editor").findOne(2000);
if (t) {
sleepRandom();
//输入评论
t.setText('666');
t = text('发送');
if (t) {
sleepRandom();
//点击发送
t.click();
clickRedEnvelope();
t = text('知道了').findOne(2000);
if (t) {
sleepRandom();
//点击知道了
t.click();
}
}
}
}
}
}
}
else {
toast('用户无评论任务');
}
}
/**
* @descripttion: 完成广告悬赏福利任务
* @return
*/
function gotoWelfare() {
var i = 10;
var t = 0;
while (i > 0) {
t = textMatches('领福利.*赚更多').findOne(2000);
if (t) {
sleepRandom();
//点击领福利
t.click();
var rect = text('已成功领取奖励').findOne(35000).bounds();
if (rect) {
sleepRandom();
//返回
back();
}
i--;
}
else {
i = 0;
toast('用户无福利悬赏');
}
sleepRandom();
}
}
/**
* @descripttion: 完成观看直播任务
* @return
*/
function gotoLive() {
var i;
var max;
if (findTimeoutAndClick(textMatches("去观看.*限时领"), 2000)) {
//等待直播出现
id('com.smile.gifmaker:id/constraint_layout_live_item_container').waitFor();
//统计任务次数
if (id('com.smile.gifmaker.neo_live:id/watch_live_task_layout').exists()) {
max = id('com.smile.gifmaker.neo_live:id/progress_display').findOne(1000).text().match(/\d+/g)[1];
max = Number(max);
i = id('com.smile.gifmaker.neo_live:id/progress_display').findOne(1000).text().match(/\d+/g)[0];
i = Number(i);
}
print(i, max);
while (i < max) {
id('com.smile.gifmaker:id/constraint_layout_live_item_container').waitFor()
max = id('com.smile.gifmaker.neo_live:id/progress_display').findOne(1000).text().match(/\d+/g)[1];
max = Number(max);
i = id('com.smile.gifmaker.neo_live:id/progress_display').findOne(1000).text().match(/\d+/g)[0];
i = Number(i);
//刷新
wipeDown();
sleep(random(3000, 5000));
//进入直播间
if (clickByRect(id('com.smile.gifmaker:id/constraint_layout_live_item_container'), 2000)) {
sleep(random(31000, 35000));
//等待31-35s,消除关注提示
if (text('立即关注').findOne(1000)) {
sleep(500);
back();
print('取消关注1');
}
}
//点击赚金币
if (clickByRect(text('赚金币').id('com.smile.gifmaker:id/neo_count_down_text'), 2000)) {
sleep(1000);
back();
sleep(1000);
//三个if为退出准备
if (text('立即关注').exists()) {
sleep(500);
back();
}
if (text('退出直播间').exists()) {
clickByRect(text('退出直播间'), 2000);
sleep(2000);
}
if (text('猜你喜欢').exists() && text('退出').exists()) {
clickByRect(text('退出'), 2000);
sleep(2000);
}
}
}
back();
sleepRandom();
} else {
toast('用户无观看直播任务');
}
}
/**
* @descripttion: 根据UiSelector来点击一个控件,点击前延时500-1500ms
* @param {*} Object 传入UiSelector
* @return true ro false
*/
function clickOne(Object) {
if (Object.exists()) {
sleepRandom();
Object.findOne().click();
return true;
}
else {
return false;
}
}
/**
* @descripttion: 根据UiSelector来查找并点击一个控件,点击前延时500-1500ms
* @param {*} object 传入UiSelector
* @param {*} timeout 查找延时
* @return true or false
*/
function findTimeoutAndClick(object, timeout) {
var i = object.findOne(timeout);
if (i) {
sleepRandom();
i.click();
return true;
}
else {
return false;
}
}
/**
* @descripttion: 根据UiSelector来查找并通过rect点击一个控件,点击前延时500-1500ms
* @param {*} object 传入UiSelector
* @param {*} timeout 查找延时
* @return true or false
*/
function clickByRect(object, timeout) {
var i = object.findOne(timeout);
if (i) {
let rect = i.bounds();
sleepRandom();
try {
click((rect.left + rect.right) / 2, (rect.top + rect.bottom) / 2);
return true;
} catch (e) {
print(e.message);
print(rect.left , rect.right, rect.top , rect.bottom);
}
}
else {
return false;
}
}
function loopVideo() {
while (true) {
//刷视频
sleep(random(10000, 20000));
if (random(0, 2) > 0) {
if (id('comment_button').exists()) {
if (clickByRect(id('comment_button'), 2000)) {
sleep(random(2000, 3000));
back();
sleepRandom();
}
}
}
wipeUp();
}
}
//脚本开始函数
function main() {
var i;
//等待无障碍
auto.waitFor();
//启动快手
app.launchApp('快手');
sleep(1500);
//跳过广告
i = textMatches('跳过.*\\d');
clickOne(i);
//点击精选
clickByRect(id('android:id/text1').text('精选'), 2000);
//进入红包界面
clickRedEnvelope();
//领取宝箱
getBox();
sleep(1000);
//back,回到主页
back();
//进入红包界面
clickRedEnvelope();
sleep(1000);
//评论
gotoComment();
sleep(1000);
//点赞
gotoGive();
sleep(1000);
//关注
gotoAttention();
//广告悬赏
gotoWelfare();
sleep(1000);
//看直播
gotoLive();
back();
//循环刷视频
clickByRect(id('android:id/text1').text('精选'), 2000);
loopVideo();
}
main();