Skip to content

Instantly share code, notes, and snippets.

@panda-mute
Last active April 16, 2022 04:54
Show Gist options
  • Save panda-mute/1f0c50d00802a83a344c340bb15b7e97 to your computer and use it in GitHub Desktop.
Save panda-mute/1f0c50d00802a83a344c340bb15b7e97 to your computer and use it in GitHub Desktop.
autojs
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()
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()
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