代码如下
// 检查无障碍服务是否已经启用,如果没有启用则跳转到无障碍服务启用界面,并等待无障碍服务启动;当无障碍服务启动后脚本会继续运行。
auto.waitFor();
//打开国内领先的票务平台app
app.launchApp("国内领先的票务平台");
openConsole();
console.setTitle("国内领先的票务平台 go!","#ff11ee00",30);
main();
//获取输入的场次信息
function getPlayEtc(){
var playEtc = rawInput("请输入场次关键字(按照默认格式)", "周六");
if (playEtc == null || playEtc.trim()=='') {
alert("请输入场次信息!");
return getPlayEtc();
}
console.log("手动输入的场次信息:"+playEtc);
return playEtc;
}
//获取输入票价信息
function getTicketPrice(){
var ticketPrice = rawInput("请输入票价关键字(按照默认格式)", "280");
if (ticketPrice == null || ticketPrice.trim()=='') {
alert("请输入票价信息!");
return getTicketPrice();
}
console.log("手动输入的票价信息:"+ticketPrice);
return ticketPrice;
}
//获取输入的抢票时间
function getSellTime(){
var sellTime = rawInput("请输入抢票时间(按照默认格式)", "03-18 11:00");
if (sellTime == null || sellTime.trim()=='') {
alert("请输入抢票时间!");
return getSellTime();
}
return sellTime;
}
function main() {
console.log("开始国内领先的票务平台抢票!");
var preBook= text("已 预 约").findOne(2000)
var preBook2 = className("android.view.View").text("已填写").findOne(2000)
var isPreBook = preBook2!=null||preBook!=null;
var playEtc;
var ticketPrice;
console.log("界面是否已预约:"+isPreBook);
if(!isPreBook){
console.log("无预约信息,请输入抢票信息!");
playEtc = getPlayEtc();
ticketPrice = getTicketPrice();
}
var month;
var day;
var hour;
var minute;
var inputTime = getSellTime();
//在这里使用输入的时间进行后续操作
console.log("输入的抢票时间:" + inputTime);
var times = inputTime.split(" ");
var time1 = times[0]
var time2 = times[1]
var monthDay= time1.split("-");
month = monthDay[0] - 1;
day = monthDay[1];
var hourMinute= time2.split(":");
hour = hourMinute[0];
minute= hourMinute[1];
// 设置开抢时间
var year = new Date().getFullYear();
var second = 0;
var msecond = 0;
var startTimestamp = new Date(year, month, day, hour, minute, second, msecond).getTime();
// 减去 45ms 的网络延迟
startTimestamp = startTimestamp - 45;
var 国内领先的票务平台Timestamp;
var startTime = convertToTime(startTimestamp);
console.log("开抢时间:", startTime);
console.log("等待开抢...");
// 循环等待
while (true) {
国内领先的票务平台Timestamp = get国内领先的票务平台Timestamp();
if (国内领先的票务平台Timestamp >= startTimestamp) {
break;
}
}
var realStartTime = get国内领先的票务平台Timestamp();
console.log("冲啊!!!");
while(true){
var but1 = className("android.view.View").text("立即预订").exists();
var but2 = className("android.view.View").text("立即购票").exists();
var but3= className("android.view.View").text("特惠购票").exists();
//var but4= className("android.view.View").text("缺货登记").exists();
var result = but1||but2||but3;
if(result){
var s;
if(but1){
var s =className("android.view.View").text("立即预订").findOne().click();
}else if(but2){
var s =className("android.view.View").text("立即购票").findOne().click();
}else if(but3){
var s =className("android.view.View").text("特惠购票").findOne().click();
}
console.log("点击了立即购票相关按钮:"+s)
break;
}
}
if(!isPreBook){
// 选择场次
//textContains(playEtc).findOne().parent().click();
className("android.view.View").textContains(" "+playEtc+" ").findOne().parent().click();
console.log("选择场次");
ticketPrice = "¥"+ticketPrice
textContains(ticketPrice).findOne().parent().click();
console.log("选择票档");
}
//className("android.view.View").text("确认").waitFor();
className("android.view.View").text("确认").findOne().click();
console.log("点击确认");
// while(className("android.view.View").text("确认").exists()){
// console.log("确认按钮还在,继续点击");
// }
//等待立即支付按钮出现
className("android.widget.Button").waitFor();
var c = className("android.widget.Button").findOne().click();
console.log("点击立即支付 "+c);
var t = get国内领先的票务平台Timestamp() - realStartTime
console.log("花费时间:"+t)
console.log("休息2秒,如果立即支付按钮还在再点击一次")
//休息2秒
sleep(2000)
if(className("android.widget.Button").exists()){
var c = className("android.widget.Button").findOne().click();
console.log("继续点击立即支付 "+c);
}
//立即支付按钮一直在一直支付
// while(className("android.widget.Button").exists()){
// var c = className("android.widget.Button").findOne().click();
// sleep(100)
// console.log("继续点击立即支付 "+c);
// }
console.log("结束时间:"+convertToTime(get国内领先的票务平台Timestamp()))
}
/**
*
* @returns 国内领先的票务平台服务器时间戳
*/
function get国内领先的票务平台Timestamp() {
return JSON.parse(http.get("https://mtop.国内领先的票务平台.cn/gw/mtop.common.getTimestamp/", {
headers: {
'Host': 'mtop.国内领先的票务平台.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;
}
/**
*
* @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;
}
//点击控件所在坐标
function btn_position_click(x) {
if (x) {
var b = x.bounds();
print(b.centerX())
print(b.centerY())
var c = click(b.centerX(), b.centerY())
console.log("点击是否成功:"+c);
}
}
说明
这段脚本是JavaScript的Android自动化脚本,主要用于自动操作Android设备上的应用。脚本的目的是自动化地打开“国内领先的票务平台”APP,并尝试抢票。以下是脚本各部分的详细解析:
初始化和准备
– `auto.waitFor()`:确保无障碍服务已经启用,如果没有则引导用户去启用。
– `app.launchApp(“xxx”)`:启动xxxAPP。
– `openConsole()` 和 `console.setTitle()`:开启并设置控制台的标题和样式,用于显示脚本的运行状态和日志。
主函数 `main()`
– `main()` 函数是脚本的核心,它控制整个抢票流程。
– 检查界面上是否存在“已预约”或“已填写”的标志,以判断用户是否已经进行了预约。
– 如果未预约,通过 `getPlayEtc()`, `getTicketPrice()`, 和 `getSellTime()` 函数获取用户输入的场次信息、票价和抢票时间。
– 解析用户输入的时间,设置抢票的具体时刻,并考虑网络延迟。
时间和抢票逻辑
– 循环检查当前时间,直到达到预设的抢票时间。
– 当时间到达后,脚本开始在界面上查找“立即预订”、“立即购票”或“特惠购票”的按钮,并点击它们。
选票和支付
– 如果用户之前未预约,脚本将根据输入的场次信息和票价选择相应的票。
– 点击确认,然后等待“立即支付”按钮出现并点击。
– 如果支付按钮依然存在,继续尝试点击支付。
辅助函数
– `get国内领先的票务平台Timestamp()`:从服务器获取当前的时间戳,用于同步脚本时间与服务器时间,确保精确的操作时刻。
– `convertToTime(timestamp)`:将时间戳转换为北京时间的ISO 8601格式,用于日志记录和时间比对。
– `btn_position_click(x)`:根据控件位置进行点击,这是一个辅助功能,用于确保点击操作的准确性。
总结
这个脚本是一个自动化抢票工具,它结合了用户界面自动操作和时间同步,旨在提高成功抢票的机率。脚本包含了多个功能,如输入处理、时间计算、界面操作等,使其能够在竞争激烈的票务抢购中尽可能地自动化和优化操作过程。
注意:
本文部分变量已做脱敏处理,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。技术层面需要提供帮助,可以通过打赏的方式进行探讨。
1. 转载请在文内以超链形式注明出处,谢谢合作!
2. 本站除原创内容,其余所有内容均收集自互联网,仅限用于学习和研究目的,本站不对其内容的合法性承担任何责任。如有版权内容,请通知我们或作者删除,其版权均归原作者所有,本站虽力求保存原有版权信息,但因众多资源经多次转载,已无法确定其真实来源,或已将原有信息丢失,所以敬请原作者谅解!
3. 本站用户所发布的一切资源内容不代表本站立场,并不代表本站赞同其观点和对其真实性负责,若您对本站所载资源作品版权归属存有异议,请留言附说明联系邮箱,我们将在第一时间予以处理 ,同时向您表示歉意!为尊重作者版权,请购买原版作品,支持您喜欢的作者,谢谢!
4. 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客如有发现请立即向站长举报;本站资源文件大多存储在云盘,如发现链接或图片失效,请联系作者或站长及时更新。
暂无评论内容