var
TASK_LIST = [
"早起"
,
"AR"
,
"浏览领"
,
"浏览并关注8s"
,
"浏览8秒"
,
"浏览8s"
,
"累计浏览"
,
"浏览并关注可得2000"
,
"浏览可得"
,
"入会"
,
"浏览并关注可得"
,
"去首页浮层进入"
,
"浏览5个品牌墙店铺"
,
"小程序"
,
"浏览5个品牌墙店铺"
,
"浏览活动"
];
var
PASS_LIST = [
'请选择要使用的应用'
,
'我知道了'
,
'取消'
,
"京口令已复制"
];
var
JUDGE_TIME = 0;
var
interval;
var
finished_task_num =
new
Array();
var
current_task_num = 0;
var
isBackFlag =
false
;
var
isXcx =
false
;
var
appName =
"com.jingdong.app.mall"
;
var
huodong_indexInParent_num = 9;
var
headerXY;
var
ruhui_enable = 1
var
ruhui_errtime = 0
var
AppType = 0;
init();
function
ruhui(){
if
(ruhui_enable == 0)
return
1;
headerXY = textContains(
'确认授权'
).findOne().parent().children()[5].bounds()
var
rightx = headerXY.centerX();
var
righty = headerXY.bottom - 5;
console.info(
"x="
+ rightx +
" y="
+ righty)
textContains(
'确认授权'
).findOne().parent().children()[5].click()
click(rightx, righty)
sleep(500)
click(rightx + 100, righty + 100)
sleep(2000)
if
(textContains(
'确认授权'
).exists())
{
console.info(
"入会失败"
);
ruhui_errtime++;
if
(ruhui_errtime > 4)
{
ruhui_errtime = 0;
console.info(
"超过4次,不再入会"
);
return
1;
}
}
else
{
back();
sleep(1000)
if
(textContains(
'累计任务'
).exists())
{
console.info(
"入会成功"
);
}
else
{
console.info(
"入会失败"
);
ruhui_errtime++;
if
(ruhui_errtime > 4)
{
ruhui_errtime = 0;
console.info(
"超过4次,不再入会"
);
return
1;
}
}
}
return
0;
}
function
init() {
threads.start(
function
() {
events.setKeyInterceptionEnabled(
"volume_up"
,
true
);
events.observeKey();
events.onKeyDown(
"volume_up"
,
function
(event) {
console.log(
"脚本退出!"
)
exit();
});
});
start();
while
(
true
) {
transitioPperation();
enterActivity();
recoverApp();
var
flag = getNeedSelector();
if
(viewTask(flag) == 0)
addMarketCar();
}
}
function
start() {
auto.waitFor()
console.show();
}
function
enterActivity() {
console.info(
"准备进入任务界面"
);
if
(!textContains(
"当前进度"
).exists()) {
sleep(1000);
if
(textContains(
"当前进度"
).exists()) {
console.info(
"已经在任务界面"
);
sleep(1000);
headerXY = id(
"a96"
).findOne().bounds();
}
else
{
if
(desc(
"浮层活动"
).exists()) {
console.info(
"点击浮层活动"
);
var
huodong = desc(
"浮层活动"
).findOne().bounds();
randomClick(huodong.centerX(), huodong.centerY());
sleep(1000);
}
var
button = className(
'android.view.View'
)
.depth(14)
.indexInParent(huodong_indexInParent_num)
.drawingOrder(0)
.clickable();
if
(button.exists()) {
console.info(
"点击进入做任务界面"
)
var
rect = button.findOne().bounds();
randomClick(rect.centerX(), rect.centerY());
sleep(1000);
headerXY = id(
"a96"
).findOne().bounds();
}
else
{
huodong_indexInParent_num = huodong_indexInParent_num + 1;
if
(huodong_indexInParent_num == 10) {
console.info(
"无法自动进入做任务界面,请手动进入!"
);
huodong_indexInParent_num = 9;
}
}
}
}
}
function
viewTask(flag) {
var
res = 0;
sleep(2000);
var
timeout = 15
var
timestart =
new
Date().getTime();
console.info(
"开始时间:"
+ timestart)
var
timenow =
new
Date().getTime();
while
(
true
&& flag) {
timenow =
new
Date().getTime();
if
((timenow - timestart) / 1000 > timeout)
{
console.info(
"结束时间:"
+ timenow)
break
;
}
if
((textStartsWith(
"获得"
).exists() && textEndsWith(
"爆竹"
).exists()) || text(
"已浏览"
).exists() || text(
"浏览完成"
).exists()) {
console.info(
"任务完成,返回"
);
viewAndFollow();
sleep(500);
JUDGE_TIME = 0;
break
;
}
else
if
(text(
"已达上限"
).exists()) {
console.info(
"任务已达上限,切换已完成按钮"
);
finished_task_num[finished_task_num.length] = current_task_num;
viewAndFollow();
sleep(500);
JUDGE_TIME = 0;
res = 1;
break
;
}
else
if
(textContains(
'会员授权协议'
).exists()) {
if
(ruhui())
{
finished_task_num[finished_task_num.length] = current_task_num;
}
viewAndFollow();
JUDGE_TIME = 0;
break
;
}
else
if
(textContains(
'当前页点击浏览'
).exists() || textContains(
'当前页浏览加购'
).exists()) {
console.info(
"当前为加入购物车任务"
);
JUDGE_TIME = 0;
break
;
}
else
if
(text(
"互动种草城"
).exists()) {
console.info(
"当前为互动种草城任务"
);
JUDGE_TIME = 0;
if
(interactionGrassPlanting()) {
back();
break
;
}
break
;
}
else
if
(text(
"到底了,没有更多了~"
).exists() && !text(
"消息"
).exists() && !text(
"扫啊扫"
).exists()
&& !(textStartsWith(
"当前进度"
).exists() && textEndsWith(
"10"
).exists())) {
console.info(
"到底了,没有更多了~"
);
sleep(1000);
JUDGE_TIME = 0;
var
count = 0;
while
(count <= 5) {
if
(undefined === headerXY) {
headerXY = id(
"a96"
).findOne().bounds();
}
var
rightx = headerXY.right;
var
righty = headerXY.bottom + 300;
while
(click(rightx, righty)) {
console.info(
"尝试点击坐标:"
, rightx, righty);
count = count + 1;
sleep(6000);
if
(!text(
"到底了,没有更多了~"
).exists()) {
if
(id(
"aqw"
).click()) {
sleep(2000);
console.info(
"尝试返回"
, count);
back();
break
;
}
}
else
{
righty = righty + 50;
}
if
(righty >= 1600) {
break
;
}
}
}
swipe(807, 314, 807, 414, 1);
sleep(2000);
break
;
}
else
if
(text(
"天天都能领"
).exists()) {
sleep(2000);
console.info(
"天天都能领"
);
JUDGE_TIME = 0;
var
button = className(
'android.view.View'
)
.depth(16)
.indexInParent(3)
.drawingOrder(0)
.clickable().findOne().bounds();
if
(randomClick(button.centerX(), button.centerY())) {
sleep(1000);
console.log(
"点我收下"
);
if
(back()) {
break
;
}
}
}
else
if
(isBackFlag) {
console.info(
"进入浏览就返回任务"
);
viewAndFollow();
isBackFlag =
false
;
break
;
}
else
if
(isXcx) {
console.info(
"进入小程序任务"
);
JUDGE_TIME = 0;
sleep(2000);
back();
sleep(2000);
let
trytime = 0;
if
(textContains(
"确定"
).exists())
{
print(
"小程序签名未通过"
)
textContains(
"确定"
).click()
sleep(1000);
}
while
(!textContains(
"当前进度"
).exists() && trytime < 5) {
back();
sleep(1000);
trytime++;
}
isXcx =
false
;
break
;
}
else
{
if
(recoverApp()) {
break
;
}
}
}
if
((timenow - timestart) > (timeout * 1000)) {
console.info(
"界面超时了"
)
viewAndFollow();
}
return
res;
}
function
addMarketCar() {
if
(textContains(
'当前页点击浏览4个'
).exists() || textContains(
'当前页浏览加购'
).exists()) {
console.info(
"在加购页面"
);
const productList = textContains(
'¥'
).find()
console.info(productList.length);
var
count = 0;
for
(index = 0; index < productList.length; index++) {
if
(count >= 4) {
if
(back()) {
sleep(3000)
count = 0;
break
;
}
}
if
(productList[index].parent().parent().children()[4].click()) {
JUDGE_TIME = 0;
log(
"加购浏览任务:正在添加第"
+ (index + 1) +
"个商品"
);
sleep(2000);
while
(
true
) {
if
(back()) {
count = count + 1;
sleep(2000);
if
(textContains(
"当前页"
).exists()) {
break
;
}
}
}
}
}
}
}
function
interactionGrassPlanting() {
var
count = 0;
while
(
true
) {
if
(className(
'android.view.View'
).indexInParent(4).depth(14).findOne().click()) {
JUDGE_TIME = 0;
console.info(
"去逛逛"
);
sleep(2000);
if
(back()) {
sleep(2000);
count = count + 1;
if
(count == 3) {
return
true
;
}
}
}
}
}
function
getNeedSelector() {
sleep(2000)
try
{
{
allSelector = textContains(
"每邀1个好友"
).findOne()
console.info(allSelector.text())
allSelector = allSelector.parent()
allSelector = allSelector.parent()
allSelector = allSelector.children()
console.info(allSelector.length)
for
(
let
index = 0; index < allSelector.length - 1; index++) {
for
(
var
i = 0; i < TASK_LIST.length; i++) {
lab = allSelector[index].children()[2].text()
var
list = allSelector[index].children()[2].findByText(TASK_LIST[i]);
if
(list.size() > 0) {
if
(finished_task_num.indexOf(index) < 0) {
console.info(
"当前已完成序列:"
, finished_task_num)
current_task_num = index;
}
else
{
continue
;
}
isBackFlag = (TASK_LIST[i].indexOf(
"AR"
) >= 0 || TASK_LIST[i].indexOf(
"浏览可得"
) >= 0 || TASK_LIST[i].indexOf(
"浏览并关注可得"
) >= 0 || TASK_LIST[i].indexOf(
"浏览领"
) >= 0 ) ?
true
:
false
;
isXcx = (TASK_LIST[i].indexOf(
"小程序"
) >= 0) ?
true
:
false
;
var
rect = allSelector[index].children()[3].bounds();
if
(textContains(
"当前进度"
).exists()) {
console.info(
"去完成任务,当前任务序列:"
, current_task_num,TASK_LIST[i])
if
(TASK_LIST[i] ==
"浏览可得"
)
{
console.info(
"看下就回来"
)
isBackFlag =
true
;
}
randomClick(rect.centerX(), rect.centerY());
sleep(1000)
if
(TASK_LIST[i].indexOf(
"早起"
) >= 0){
log(
"早上好!!那么早就跑脚本"
)
break
;
}
for
(i = 0; i < 5; i++)
{
if
(textContains(
"当前进度"
).exists()) {
log(
"点了没反应?我再试几次,可能是已完成的任务,也可能是卡了"
)
sleep(2000)
randomClick(rect.centerX(), rect.centerY());
}
else
{
return
true
;
}
}
if
(textContains(
"当前进度"
).exists()) {
finished_task_num[finished_task_num.length] = current_task_num;
log(
"任务没有跳转,应该任务完成了,屏蔽当前任务序列,如果是误操作,请结束后重新运行脚本"
)
break
;
}
}
}
}
}
console.log(
"没有检测到可以跑的了"
)
}
}
catch
(e){
log(
"getNeedSelector"
)
log(e)
}
}
function
viewAndFollow() {
trytime = 0;
while
(!textContains(
"当前进度"
).exists() && trytime < 10) {
back();
sleep(1000);
trytime++;
}
}
function
recoverApp() {
if
(!text(
"当前进度"
).exists() && JUDGE_TIME > 30) {
if
(back()) {
JUDGE_TIME = 0;
console.warn(
"停留某个页面超过30s,自动返回,重置定时器。"
);
return
true
;
}
}
else
{
return
false
;
}
}
function
transitioPperation() {
for
(
let
index = 0; index < PASS_LIST.length; index++) {
if
(text(PASS_LIST[index]).exists()) {
console.info(
"过渡操作:"
, PASS_LIST[index]);
if
(PASS_LIST[index].indexOf(
"请选择要使用的应用"
) >= 0) {
back();
}
else
if
(text(
"查看同款"
).exists()) {
text(PASS_LIST[index]).click();
}
else
if
(PASS_LIST[index].indexOf(
"已复制"
) >= 0) {
className(
'android.widget.LinearLayout'
)
.depth(4)
.indexInParent(1)
.drawingOrder(2)
.clickable()
.findOne().click();
}
else
{
text(PASS_LIST[index]).click();
}
}
}
}
function
randomClick(x, y) {
var
rx = random(0, 5);
var
ry = random(0, 5);
click(x + rx, y + ry);
sleep(2000);
return
true
;
}