-
Notifications
You must be signed in to change notification settings - Fork 25
/
0727(可自定义抖动)秒数倒计时自动点击浮窗优化版.js
145 lines (119 loc) · 4.99 KB
/
0727(可自定义抖动)秒数倒计时自动点击浮窗优化版.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
auto.waitFor();
app.launchApp("大麦");
console.show();
//本脚本是通过github大神们的脚本,模仿写出,用来学习使用
//预先说明,滑块问题,需要更换设备和路由器,或者直接用手机网络,到手机网络会慢,自己抉择
//步骤1:在显示倒计时的页面,填好观影人
//步骤2:在此处填好你想看的场次和票档
var ticketInfo = {
date: "周六",
price: 680
}
//步骤2.1 0727记录:0秒之后按钮会变"立即订购",继而一瞬间又变回"立即预约",说明APP,在0秒的时候还会再次请求服务器时间,所以此处新添抖动
var zeroToWait = 500;
//步骤3:打开APP,进入有倒计时的页面
//步骤4:点击本脚本上方的"运行"按钮,即会自动跳转到APP
//下面不用管
main(ticketInfo);
function main(ticketInfo) {
// 从界面上获取开抢时间
var UIStartTime = id("tv_count_down_remind").findOne();
// 获取系统本地时间
var strStartTime = UIStartTime.text();
print("获取到的开抢时间: " + strStartTime);
// 通过viewId获取点击坐标
//todo 如果大麦更新该id,得重新获取jdxd
var btnBuy = id("trade_project_detail_purchase_status_bar_container_fl").findOne();
var rectBtnBuy = btnBuy.bounds();
var clickPosX = rectBtnBuy.centerX();
var clickPosY = rectBtnBuy.centerY();
print("获取到的点击坐标: " + clickPosX + ", " + clickPosY);
// 设置开抢时间
var year = new Date().getFullYear();
var month = strStartTime.slice(strStartTime.indexOf("月") - 2, strStartTime.indexOf("月")) - 1;
var day = strStartTime.slice(strStartTime.indexOf("日") - 2, strStartTime.indexOf("日"));
var hour = strStartTime.slice(strStartTime.indexOf(":") - 2, strStartTime.indexOf(":"));
var minute = strStartTime.slice(strStartTime.indexOf(":") + 1, strStartTime.indexOf(":") + 3);
var second = 0;
var msecond = 0;
var startTimestamp = new Date(year, month, day, hour, minute, second, msecond).getTime();
startTimestamp = startTimestamp - 40; // 减去 40ms 的网络延迟
var damaiTimestamp;
var startTime = convertToTime(startTimestamp);
print("开始时间:\n", startTime);
print("等待开抢...");
var i = 0;
// 循环等待
while (true) {
damaiTimestamp = getDamaiTimestamp();
if (damaiTimestamp >= startTimestamp) {
print("到点了,自动开始。");
break;
}
var mm = startTimestamp - damaiTimestamp;
var ss = mm/1000;
if(ss>300){
print("剩余:"+(ss)+"秒");
}else{print("剩余:"+(mm)+"毫秒");}
i++;
if(i%200==0){
print("清屏");
console.clear();
//break;
}
}
//2023.07.27 加个抖动,因为在0秒的时候,还会再次请求服务器时间回到APP校准,所以此处等几毫秒吧
print("加入抖动:" + zeroToWait + "ms");
sleep(zeroToWait);
click(clickPosX, clickPosY);
print("点击立即购买按钮");
// 选择场次
textContains(ticketInfo.date).findOne().parent().parent().parent().parent().click();
print("选择场次ing");
//选择票档
textContains(ticketInfo.price).findOne().parent().parent().parent().parent().click();
print("选择票档ing");
id("btn_buy").findOne().click();
print("点击红色确定按钮");
//print("进入提交订单页面");
//获取按钮位置
text("提交订单").findOne().click();
print("点击提交订单按钮");
// 提交订单的大麦时间
var endTime = convertToTime(getDamaiTimestamp());
console.log("订单提交时间:" + endTime);
}
/**
* 感谢GitHub大佬提供
* @param {时间戳} timestamp
* @returns ISO 8601 格式的北京时间
*/
function convertToTime(timestamp) {
var date = new Date(Number(timestamp));
var year = date.getUTCFullYear();
var month = (date.getUTCMonth() + 1).toString().padStart(2, "0");
var day = date.getUTCDate().toString().padStart(2, "0");
var hours = (date.getUTCHours() + 8).toString().padStart(2, "0");
var minutes = date.getUTCMinutes().toString().padStart(2, "0");
var seconds = date.getUTCSeconds().toString().padStart(2, "0");
var milliseconds = date.getUTCMilliseconds().toString().padStart(3, "0");
var iso8601 = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}.${milliseconds}`;
return iso8601;
}
/**
*
* @returns 大麦服务器时间戳
*/
function getDamaiTimestamp() {
return JSON.parse(http.get("https://mtop.damai.cn/gw/mtop.common.getTimestamp/", {
headers: {
'Host': 'mtop.damai.cn',
'Content-Type': 'application/json;charset=utf-8',
'Accept': '*/*',
'User-Agent': 'floattime/1.1.1 (iPhone; iOS 15.6; Scale/3.00)',
'Accept-Language': 'zh-Hans-CN;q=1, en-CN;q=0.9',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive'
}
}).body.string()).data.t;
}