Skip to content

Commit 7350ea1

Browse files
committed
111
1 parent 414864c commit 7350ea1

File tree

4 files changed

+175
-80
lines changed

4 files changed

+175
-80
lines changed
File renamed without changes.

MaoYan/猫眼卡点.js

Lines changed: 83 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,103 +1,107 @@
1-
// 检查无障碍服务是否已经启用,如果没有启用则跳转到无障碍服务启用界面,并等待无障碍服务启动;当无障碍服务启动后脚本会继续运行。
1+
// 等待无障碍服务启动
22
auto.waitFor();
3-
//打开猫眼app
3+
// 打开猫眼 App
44
app.launchApp("猫眼");
55
openConsole();
6-
console.setTitle("猫眼 go!", "#ff11ee00", 30);
6+
console.setTitle("猫眼抢票助手", "#ff11ee00", 30);
77

8-
//确认选票坐标,建议配置(不配置时仍会寻找“确认”按钮进行点击,但可能会出现点击失败的情况)
8+
// 确认选票的绝对坐标,具体值需调整
99
const ConfirmX = 878;
1010
const ConfirmY = 2263;
1111

12-
//是否在测试调试
13-
var isDebug = false;
14-
//调试模式下的模拟票档自动选择的点击坐标
12+
// 是否为调试模式
13+
const isDebug = false;
14+
// 调试模式下模拟票档选择的点击坐标
1515
const debugTicketClickX = 207;
1616
const debugTicketClickY = 1170;
1717

1818
main();
1919

2020
function main() {
21-
console.log("开始猫眼抢票!");
22-
var preBook = text("已 预 约").findOne(2000)
23-
var preBook2 = className("android.widget.TextView").text("已填写").findOne(2000)
24-
var isPreBook = preBook2 != null || preBook != null;
25-
console.log("界面是否已预约:" + isPreBook);
26-
if (!isPreBook && !isDebug) {
27-
console.log("无预约信息,请提前填写抢票信息!(若已经开票,请到票档界面使用MoYanMonitor.js)");
28-
return;
29-
}
21+
console.log("开始猫眼抢票流程!");
22+
23+
// 检测是否有“已预约”状态
24+
var preBook = text("已 预 约").findOne(2000);
25+
var preBook2 = className("android.widget.TextView").text("已填写").findOne(2000);
26+
var isPreBook = preBook2 != null || preBook != null;
27+
console.log("界面是否已预约:" + isPreBook);
28+
29+
if (!isPreBook && !isDebug) {
30+
console.log("无预约信息,请提前填写抢票信息!");
31+
return;
32+
}
3033

31-
//出现刷新按钮时点击刷新
32-
threads.start(function () {
33-
log('刷新按钮自动点击线程已启动')
34-
while(true){
35-
textContains("刷新").waitFor()
36-
textContains("刷新").findOne().click()
37-
log("点击刷新...")
38-
//避免点击过快
39-
sleep(100)
40-
}
41-
});
34+
console.log("等待开抢...");
35+
while (true) {
36+
// 检测“立即预订”、“立即购票”、“特惠购票”按钮
37+
var but1 = classNameStartsWith('android.widget.').text("立即预订").exists();
38+
var but2 = classNameStartsWith('android.widget.').text("立即购票").exists();
39+
var but3 = classNameStartsWith('android.widget.').text("特惠购票").exists();
4240

43-
console.log("等待开抢...");
44-
while (true) {
45-
var but1 = classNameStartsWith('android.widget.').text("立即预订").exists();
46-
var but2 = classNameStartsWith('android.widget.').text("立即购票").exists();
47-
var but3 = classNameStartsWith('android.widget.').text("特惠购票").exists();
48-
//var but4= classNameStartsWith('android.widget.').text("缺货登记").exists();
49-
var result = but1 || but2 || but3;
50-
if (result) {
51-
var s;
52-
if (but1) {
53-
var s = classNameStartsWith('android.widget.').text("立即预订").findOne().click();
54-
} else if (but2) {
55-
var s = classNameStartsWith('android.widget.').text("立即购票").findOne().click();
56-
} else if (but3) {
57-
var s = classNameStartsWith('android.widget.').text("特惠购票").findOne().click();
58-
}
59-
break;
60-
}
41+
if (but1 || but2 || but3) {
42+
if (but1) {
43+
classNameStartsWith('android.widget.').text("立即预订").findOne().click();
44+
} else if (but2) {
45+
classNameStartsWith('android.widget.').text("立即购票").findOne().click();
46+
} else if (but3) {
47+
classNameStartsWith('android.widget.').text("特惠购票").findOne().click();
48+
}
49+
break;
6150
}
62-
console.log("①准备确认购票");
51+
}
52+
console.log("①准备确认购票");
6353

64-
//猛点,一直点到出现支付按钮为止
65-
for (let cnt = 0; cnt >= 0; cnt++) {
66-
if (isDebug) {
67-
//调试模式,模拟选择票档,模拟已预约后自动选择票档
68-
click(debugTicketClickX, debugTicketClickY);
69-
}
54+
// 开始支付流程
55+
processPayment();
56+
console.log("抢票流程结束");
57+
}
7058

71-
//绝对坐标点击
72-
click(ConfirmX, ConfirmY);
73-
//文字查找按钮点击,避免未正确配置坐标导致的点击失败
74-
if(text("确认").exists()){
75-
text("确认").click();
76-
}
77-
sleep(50);
78-
if (className("android.widget.Button").exists()) {
79-
break;
80-
}
81-
if (cnt % 20 == 0) {
82-
log("已点击确认次数:" + cnt);
83-
}
59+
// 处理支付流程,包括检测弹框和点击支付按钮
60+
function processPayment() {
61+
let waitTime = 200; // 初始等待时间 200 毫秒
62+
while (true) {
63+
// 检测并处理弹框
64+
if (textContains("前方拥堵").exists() && text("刷新").exists()) {
65+
console.log("检测到‘前方拥堵’弹框,点击‘刷新’按钮");
66+
let refreshButton = text("刷新").findOne(1000); // 等待刷新按钮出现
67+
if (refreshButton) {
68+
refreshButton.click();
69+
console.log("已点击‘刷新’按钮");
70+
waitTime = 200; // 点击后恢复快速检测
71+
sleep(200);
72+
continue; // 继续支付流程
73+
}
8474
}
85-
console.log("②准备确认支付");
8675

87-
if (!isDebug) {
88-
//调试模式时不点击支付按钮
89-
for (let cnt = 0; className("android.widget.Button").exists(); cnt++) {
90-
//直接猛点就完事了
91-
var c = className("android.widget.Button").findOne().click();
92-
sleep(50);
93-
if (cnt % 20 == 0) {
94-
log("已点击支付次数:" + cnt);
95-
}
96-
}
97-
}else{
98-
console.log("调试模式,不点击支付按钮");
76+
// 检测支付按钮
77+
if (textContains("立即支付").exists() || className("android.widget.Button").text("支付").exists()) {
78+
console.log("检测到支付按钮,点击支付");
79+
let payButton = className("android.widget.Button").text("支付").findOne(1000); // 等待支付按钮出现
80+
if (payButton) {
81+
payButton.click();
82+
console.log("已点击支付按钮");
83+
waitTime = 200; // 点击后恢复快速检测
84+
sleep(200);
85+
continue; // 继续支付流程
86+
}
9987
}
10088

101-
console.log("结束")
89+
// 检测确认按钮
90+
if (text("确认").exists()) {
91+
console.log("检测到确认按钮,点击确认");
92+
let confirmButton = text("确认").findOne(1000); // 等待确认按钮出现
93+
if (confirmButton) {
94+
confirmButton.click();
95+
console.log("已点击确认按钮");
96+
waitTime = 200; // 点击后恢复快速检测
97+
sleep(200);
98+
continue; // 继续支付流程
99+
}
100+
}
102101

102+
// 如果没有检测到目标,逐步增加等待时间
103+
console.log("未检测到目标控件,延长检测间隔:" + waitTime + " 毫秒");
104+
sleep(waitTime);
105+
waitTime = Math.min(waitTime + 100, 500); // 最大延长到 500 毫秒
106+
}
103107
}

MaoYan/猫眼卡点刷新.js

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
// 等待无障碍服务启动
2+
auto.waitFor();
3+
// 打开猫眼 App
4+
app.launchApp("猫眼");
5+
openConsole();
6+
console.setTitle("猫眼抢票助手", "#ff11ee00", 30);
7+
8+
// 确认选票的绝对坐标,具体值需调整
9+
const ConfirmX = 878;
10+
const ConfirmY = 2263;
11+
12+
// 是否为调试模式
13+
const isDebug = false;
14+
// 调试模式下模拟票档选择的点击坐标
15+
const debugTicketClickX = 207;
16+
const debugTicketClickY = 1170;
17+
18+
main();
19+
20+
function main() {
21+
console.log("开始猫眼抢票流程!");
22+
23+
// 检测是否有“已预约”状态
24+
var preBook = text("已 预 约").findOne(2000);
25+
var preBook2 = className("android.widget.TextView").text("已填写").findOne(2000);
26+
var isPreBook = preBook2 != null || preBook != null;
27+
console.log("界面是否已预约:" + isPreBook);
28+
29+
if (!isPreBook && !isDebug) {
30+
console.log("无预约信息,请提前填写抢票信息!");
31+
return;
32+
}
33+
34+
console.log("等待开抢...");
35+
while (true) {
36+
// 检测“立即预订”、“立即购票”、“特惠购票”按钮
37+
var but1 = classNameStartsWith('android.widget.').text("立即预订").exists();
38+
var but2 = classNameStartsWith('android.widget.').text("立即购票").exists();
39+
var but3 = classNameStartsWith('android.widget.').text("特惠购票").exists();
40+
41+
if (but1 || but2 || but3) {
42+
if (but1) {
43+
classNameStartsWith('android.widget.').text("立即预订").findOne().click();
44+
} else if (but2) {
45+
classNameStartsWith('android.widget.').text("立即购票").findOne().click();
46+
} else if (but3) {
47+
classNameStartsWith('android.widget.').text("特惠购票").findOne().click();
48+
}
49+
break;
50+
}
51+
}
52+
console.log("①准备确认购票");
53+
54+
// 开始支付流程
55+
processPayment();
56+
console.log("抢票流程结束");
57+
}
58+
59+
// 处理支付流程,包括检测弹框和点击支付按钮
60+
function processPayment() {
61+
while (true) {
62+
// 检测并处理弹框
63+
if (textContains("前方拥堵").exists() && text("刷新").exists()) {
64+
console.log("检测到‘前方拥堵’弹框,点击‘刷新’按钮");
65+
text("刷新").findOne().click();
66+
sleep(500); // 避免过快点击
67+
continue; // 继续支付流程
68+
}
69+
70+
// 检测支付按钮
71+
if (textContains("立即支付").exists() || className("android.widget.Button").text("支付").exists()) {
72+
console.log("检测到支付按钮,点击支付");
73+
className("android.widget.Button").text("支付").findOne().click();
74+
sleep(500); // 等待页面响应
75+
continue; // 继续支付流程
76+
}
77+
78+
// 检测确认按钮
79+
if (text("确认").exists()) {
80+
console.log("检测到确认按钮,点击确认");
81+
text("确认").findOne().click();
82+
sleep(500); // 避免重复点击
83+
continue; // 继续支付流程
84+
}
85+
86+
// 如果都没有,尝试点击默认支付坐标
87+
console.log("未检测到弹框或按钮,尝试点击默认支付坐标");
88+
click(ConfirmX, ConfirmY);
89+
sleep(500); // 等待页面刷新
90+
}
91+
}

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
当前可用脚本:
2222
- 猫眼卡点.js 卡点抢票 设定抢票时间卡点进入抢票
2323
- 余票监控.js 余票监控 设定目标最高票价,发现更低的票直接进入抢票(已支持观演人自动选择、**刷新自动点击**、成功**webhook通知****响铃通知**;无需配置绝对坐标,更加通用化)
24-
- FenWanDaoGo.js 卡点抢票,余票不断重试
24+
- 纷玩岛.js 卡点抢票,余票不断重试
2525

2626
## 常见问题
2727
建议在正式使用之前调试走完全流程

0 commit comments

Comments
 (0)