Last active
April 16, 2022 04:54
-
-
Save panda-mute/1f0c50d00802a83a344c340bb15b7e97 to your computer and use it in GitHub Desktop.
autojs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const pay = () => { | |
console.log("支付") | |
id("tv_submit").findOne().click() | |
} | |
const check = (d, x_offset, y_offset) => { | |
var a = text(d).findOne().bounds(); | |
var b = a.centerX() + x_offset; | |
var c = a.centerY() + y_offset; | |
click(b, c) | |
} | |
const to_mall_cart = () => { | |
shopping_cart_btn = id('rl_car_layout').findOne() | |
if (shopping_cart_btn) { | |
shopping_cart_btn.click() | |
toast('已进入购物车') | |
console.log('已进入购物车') | |
} else { | |
toast('手动点击购物车') | |
console.log('手动点击购物车') | |
//exit; | |
} | |
} | |
const poll_id_or_text = (id_or_text, is_id, max_count) => { | |
console.log('entry => poll: '+id_or_text) | |
count = 0 | |
is_exit = false | |
while (true ) { | |
count += 1 | |
if (is_id) { | |
chk_id = id(id_or_text).findOne() | |
//console.log('poll: '+id_or_text) | |
if (chk_id) { | |
is_exit = true; | |
} | |
} else { | |
if (textContains(id_or_text).exists()) { | |
is_exit = true; | |
} | |
} | |
if (count > max_count) { | |
console.log('exit => poll: '+id_or_text) | |
break; | |
} | |
sleep(10) | |
} | |
} | |
const poll_multi_id_or_text = (id_or_text_list, is_id, max_count) => { | |
console.log('entry => poll: '+id_or_text_list) | |
count = 0 | |
is_exit = false | |
while (true) { | |
count += 1 | |
id_or_text_list.forEach(id_or_text => { | |
//console.log('poll: '+id_or_text) | |
if (is_id) { | |
chk_id = id(id_or_text).findOne() | |
if (chk_id) { | |
is_exit = true; | |
} | |
} else { | |
if (textContains(id_or_text).exists()) { | |
is_exit = true; | |
} | |
} | |
}); | |
if (count > max_count || is_exit) { | |
console.log('exit => poll: '+id_or_text_list) | |
break; | |
} | |
sleep(10) | |
} | |
} | |
const selectTime = (countT, status) => { | |
console.log("检查重新加载") | |
while (true) { | |
if (textContains('立即支付').exists()) { | |
break; | |
} | |
if (textContains('重新加载').exists()) { | |
reload_btn = id('ll_reload_action').findOne() | |
if (reload_btn) { | |
console.log('点击重新加载') | |
reload_btn.click() | |
} | |
} | |
sleep(10) | |
} | |
console.log("加载成功或者跳过加载") | |
if (textStartsWith('自动尝试可用时段').exists() || !textStartsWith('请选择送达时间').exists()) { | |
poll_id_or_text('立即支付', false, 100) | |
var a = text('立即支付').findOne().bounds(); | |
var b = a.centerX(); | |
var c = a.centerY(); | |
//pay_btn = id('tv_submit').findOne() | |
exit_count = 0; | |
while (true) { | |
exit_count += 1 | |
if (textContains('立即支付').exists()) { | |
exit_count = 0 | |
} | |
/* | |
if (pay_btn) { | |
pay_btn.click() | |
console.log('循环支付') | |
} | |
*/ | |
click(b, c) | |
console.log('快速点击循环支付') | |
if (textStartsWith('请选择送达时间').exists() || textContains('重新加载').exists() || exit_count >= 50/*5s not found pay button*/) { | |
if (exit_count >= 50) | |
exit; | |
break; | |
} | |
sleep(10) | |
} | |
selectTime(countT, false) | |
} else if (textStartsWith('请选择送达时间').exists()) { | |
console.log("开始选择送达时间") | |
timeChooseBtn = id("tv_multi_product_time_text").findOne() | |
if (!timeChooseBtn) | |
timeChooseBtn = id("tv_single_product_time_text").findOne() | |
if (timeChooseBtn) { | |
console.log("点击选择时间按钮") | |
timeChooseBtn.click() | |
} else { | |
if (textStartsWith('请选择送达时间').exists()) { | |
console.log("请选择送达时间") | |
textContains('选择送达时间').findOne().click() | |
} else { | |
console.log("已进入选择时间") | |
} | |
} | |
console.log("选择送达时间") | |
var selectedTime = null; | |
hourClock_unfilterd = textContains('-10:30').find() | |
hourClock = hourClock_unfilterd.filter(item => item.clickable&&item.checkable&&enabled) | |
if (hourClock.length > 0){ | |
selectedTime = hourClock[0] | |
} else { | |
quarClock_unfilterd = textContains('-14:30').find() | |
quarClock = quarClock_unfilterd.filter(item => item.clickable&&item.checkable&&enabled) | |
if (quarClock.length > 0) { | |
selectedTime = quarClock[0] | |
} else { | |
halfClock_unfilterd = textContains('-18:30').find() | |
halfClock = halfClock_unfilterd.filter(item => item.clickable&&item.checkable&&enabled) | |
if (halfClock.length > 0) { | |
selectedTime = halfClock[0] | |
} else { | |
clock_last_unfilterd = textContains('-22:30').find() | |
clock_last = clock_last_unfilterd.filter(item => item.clickable&&item.checkable&&enabled) | |
if (clock_last.length > 0) { | |
selectedTime = clock_last[0] | |
} | |
} | |
} | |
} | |
if (selectedTime != null) { | |
selectedTime.parent().click(); | |
console.log('已选择时间,开始支付') | |
poll_id_or_text('立即支付', false, 100) | |
var a = text('立即支付').findOne().bounds(); | |
var b = a.centerX(); | |
var c = a.centerY(); | |
//pay_btn = id('tv_submit').findOne() | |
exit_count = 0; | |
while (true) { | |
exit_count += 1 | |
if (textContains('立即支付').exists()) { | |
exit_count = 0 | |
} | |
/* | |
if (pay_btn) { | |
pay_btn.click() | |
console.log('循环支付') | |
} | |
*/ | |
click(b, c) | |
console.log('快速点击循环支付') | |
if (textContains('提示').exists() || exit_count >= 50/*5s not found pay button*/) { | |
if (exit_count >= 50) | |
exit; | |
break; | |
} | |
sleep(10) | |
} | |
//poll_id_or_text('提示', false, 100) | |
//console.log("poll success") | |
if (textContains('提示').exists()) { | |
console.log("时间失效,重新选择时间"); | |
check('提示', 0, -200); | |
} | |
selectTime(countT, false); | |
} else { | |
console.log("抢菜") | |
countT += 1; | |
if(countT > 18000){ | |
toast('抢菜选择时间失败') | |
exit; | |
} | |
sleep(5) | |
selectTime(countT, false) | |
} | |
} else { | |
sleep(5) | |
selectTime(countT, false) | |
} | |
} | |
const submit_order = (count) => { | |
toast('抢菜第'+count+'次尝试') | |
//id("bottom_right_button_ll").findOne().click() //结算按钮点击 | |
check("全选", 0, 0) | |
id("vg_car").findOne().children().forEach(child => { | |
var target = child.findOne(id("btn_submit")); | |
target.click(); | |
}); | |
sleep(800) | |
if (textStartsWith('我知道了').exists()) { | |
toast('配送运力已约满') | |
textStartsWith('我知道了').findOne().parent().click() | |
} else if (textStartsWith('全选').exists()) { | |
sleep(100) | |
count=count+1; | |
if (count > 18000) { | |
toast('抢菜失败') | |
exit; | |
} | |
submit_order(count) | |
} else if (textStartsWith('返回购物车').exists() || textContains('重新加载').exists()) { | |
if (textContains('重新加载').exists()) { | |
selectTime(0, false) | |
} else if (textContains('返回购物车').exists()) { | |
toastLog('前方拥堵') | |
textStartsWith('返回购物车').findOne().click() | |
submit_order(count) | |
} else { | |
toastLog('异常,请返回购物车') | |
poll_id_or_text('购物车', true, 500) | |
submit_order(count) | |
} | |
} else { | |
if (textStartsWith('放弃机会').exists()) { | |
toastLog('跳过加购') | |
textStartsWith('放弃机会').findOne().click() | |
} | |
selectTime(0, false) | |
} | |
} | |
const start = () => { | |
const appName = "叮咚买菜"; | |
launchApp(appName); | |
sleep(20); | |
auto.waitFor() | |
/* | |
//跳过开屏广告 | |
btn_skip = id('btn_skip').findOne() | |
if (btn_skip) { | |
btn_skip.click() | |
toast('已跳过开屏广告') | |
} | |
sleep(600); | |
//跳过后加载首页会有一段时间再加载出购物车 | |
to_mall_cart() | |
*/ | |
poll_multi_id_or_text(['立即支付', '购物车', '跳过'], false, 500) | |
if (textContains('跳过').exists()) { | |
poll_multi_id_or_text(['立即支付', '购物车'], false, 500) | |
} | |
if (textContains('立即支付').exists()) { | |
selectTime(0, false) | |
} else { | |
submit_order(0) | |
} | |
} | |
start() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const pay = () => { | |
console.log("支付") | |
id("tv_submit").findOne().click() | |
} | |
const check = (d, x_offset, y_offset) => { | |
var a = text(d).findOne().bounds(); | |
var b = a.centerX() + x_offset; | |
var c = a.centerY() + y_offset; | |
click(b, c) | |
} | |
const pay_order = () => { | |
id("rl_mine_layout").findOne().click() | |
sleep(800) | |
payBtn = id("rl_wait_pay1").findOne() | |
if (payBtn) { | |
toastLog("进入待支付") | |
payBtn.click() | |
} else { | |
toastLog("未找到待支付") | |
exit; | |
} | |
sleep(3000) | |
count = 0 | |
is_exit = false | |
while (!is_exit) { | |
count += 1 | |
if (textStartsWith('去支付').exists()) { | |
toastLog("找到待支付订单") | |
textStartsWith('去支付').findOne().click() | |
sleep(100) | |
if (textStartsWith('确认支付').exists()) { | |
textStartsWith('确认支付').findOne().click() | |
sleep(100) | |
} | |
} else { | |
toastLog("未找到待支付订单") | |
is_exit = true | |
} | |
if (count >= 300 || is_exit) { | |
toastLog('支付超时,退出') | |
} else { | |
sleep(1000) | |
toastLog('支付第'+count+'次尝试') | |
} | |
} | |
} | |
const start = () => { | |
const appName = "叮咚买菜"; | |
launchApp(appName); | |
sleep(20); | |
auto.waitFor() | |
/* | |
//跳过开屏广告 | |
btn_skip = id('btn_skip').findOne() | |
if (btn_skip) { | |
btn_skip.click() | |
toast('已跳过开屏广告') | |
} | |
sleep(600); | |
//跳过后加载首页会有一段时间再加载出购物车 | |
to_mall_cart() | |
*/ | |
/* | |
sleep(1000) | |
to_mall_cart() | |
//等待购物车加载完成 | |
sleep(3000) | |
*/ | |
pay_order() | |
} | |
start() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const musicNotify = () => { | |
const m = '/storage/emulated/0/Download/平凡之路.mp3' | |
media.playMusic(m); | |
sleep(media.getMusicDuration()); | |
} | |
const to_mall_cart = () => { | |
shopping_cart_btn=id('img_shopping_cart').findOne() | |
if(shopping_cart_btn){ | |
shopping_cart_btn.parent().click() //btn上一级控件可点击 | |
toast('已进入购物车') | |
}else{ | |
toast('未找到购物车按钮,退出') | |
exit; | |
} | |
} | |
const pay = () =>{ | |
if(textStartsWith('立即支付').exists()){ | |
textStartsWith('立即支付').findOne().parent().click() | |
musicNotify() | |
} | |
} | |
const selectTime = (countT,status) =>{ | |
//选择送达时间 | |
textStartsWith('送达时间').findOne().parent().click() | |
var selectedTime=null; | |
hourClock_unfilterd=textContains(':00').find() | |
hourClock=hourClock_unfilterd.filter(item => item.clickable&&item.checkable&&enabled) | |
if(hourClock.length>0){ | |
selectedTime=hourClock[0] | |
}else{ | |
quarClock_unfilterd=textContains(':15').find() | |
quarClock=quarClock_unfilterd.filter(item => item.clickable&&item.checkable&&enabled) | |
if(quarClock.length>0){ | |
selectedTime=quarClock[0] | |
}else{ | |
halfClock_unfilterd=textContains(':30').find() | |
halfClock=halfClock_unfilterd.filter(item => item.clickable&&item.checkable&&enabled) | |
if(halfClock.length>0){ | |
selectedTime=halfClock[0] | |
}else{ | |
clock_last_unfilterd=textContains(':45').find() | |
clock_last=clock_last_unfilterd.filter(item => item.clickable&&item.checkable&&enabled) | |
if(clock_last.length>0){ | |
selectedTime=clock_last[0] | |
} | |
} | |
} | |
} | |
if(selectedTime!=null){ | |
selectedTime.parent().click() | |
sleep(50) | |
status=true | |
pay() | |
}else{ | |
countT=countT+1; | |
if(countT>18000){ | |
toast('抢菜选择时间失败') | |
exit; | |
} | |
sleep(100) | |
selectTime(countT,false) | |
} | |
} | |
const submit_order = (count) => { | |
toast('抢菜第'+count+'次尝试') | |
//美团买菜 结算按钮无id | |
submit_btn=textStartsWith('结算').findOne() | |
if(!submit_btn){ | |
toast('未找到结算按钮,退出') | |
exit; | |
} | |
submit_btn.parent().click() //结算按钮点击 | |
sleep(800) | |
if(textStartsWith('我知道了').exists()){ | |
toast('配送运力已约满') | |
textStartsWith('我知道了').findOne().parent().click() | |
}else if(textStartsWith('返回购物车').exists()) { | |
toast('前方拥堵') | |
textStartsWith('返回购物车').findOne().parent().click() | |
}else{ | |
if(textStartsWith('放弃机会').exists()){ | |
toast('跳过加购') | |
textStartsWith('放弃机会').findOne().parent().click() | |
} | |
selectTime(0,false) | |
} | |
sleep(100) | |
count=count+1; | |
if(count>18000){ | |
toast('抢菜失败') | |
exit; | |
} | |
submit_order(count) | |
} | |
const start = () => { | |
kill_app('美团买菜') | |
const appName = "美团买菜"; | |
launchApp(appName); | |
sleep(600); | |
auto.waitFor() | |
//跳过开屏广告 | |
btn_skip=id('btn_skip').findOne() | |
if(btn_skip){ | |
btn_skip.click() | |
toast('已跳过开屏广告') | |
} | |
sleep(600); | |
//跳过后加载首页会有一段时间再加载出购物车 | |
to_mall_cart() | |
sleep(3000) //等待购物车加载完成 | |
if(textStartsWith('重新加载').exists()){ | |
toast('购物车加载失败,重新加载') | |
textStartsWith('重新加载').findOne().parent().click() | |
} | |
submit_order(0) | |
} | |
function kill_app(packageName) { | |
var name = getPackageName(packageName); | |
if (!name) { | |
if (getAppName(packageName)) { | |
name = packageName; | |
} else { | |
return false; | |
} | |
} | |
app.openAppSetting(name); | |
text(app.getAppName(name)).waitFor(); | |
let is_sure = textMatches(/(.*强.*|.*停.*|.*结.*|.*行.*)/).findOne(); | |
if (is_sure.enabled()) { | |
textMatches(/(.*强.*|.*停.*|.*结.*|.*行.*)/).findOne().click(); | |
buttons=textMatches(/(.*强.*|.*停.*|.*结.*|.*行.*|确定|是)/).find() | |
if(buttons.length>0){ | |
buttons[buttons.length-1].click() | |
} | |
log(app.getAppName(name) + "应用已被关闭"); | |
sleep(1000); | |
back(); | |
} else { | |
log(app.getAppName(name) + "应用不能被正常关闭或不在后台运行"); | |
back(); | |
} | |
} | |
start() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment