基于自动化工具autox.js的抢票(猫眼)

1.看到朋友圈抢周杰伦、林俊杰演唱会票贼难信息,特研究了一段时间,用autox.js写了自动化抢票脚本,购票页面自动点击下单(仅限安卓手机)。

2.脚本运行图

3.前期准备工作

 (1)autox.js社区官网:AutoX.js

 (2)b站上学习资料:10分钟学会AutoX.js hello world_哔哩哔哩_bilibili

                                      AutoX.js控件操作_哔哩哔哩_bilibili

4.源码

 // 检查无障碍服务是否已经启用,如果没有启用则跳转到无障碍服务启用界面,并等待无障碍服务启动;当无障碍服务启动后脚本会继续运行。auto.waitFor();//打开猫眼appapp.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("请输入票价关键字(按照默认格式)", "788");if (ticketPrice == null || ticketPrice.trim()=='') {alert("请输入票价信息!");return getTicketPrice();}console.log("手动输入的票价信息:"+ticketPrice);return ticketPrice;
}//获取输入的抢票时间
function getSellTime(){var sellTime = rawInput("请输入抢票时间(按照默认格式)", "10-07 12:18");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 damaiTimestamp;var startTime = convertToTime(startTimestamp);console.log("开抢时间:", startTime);console.log("等待开抢...");// 循环等待while (true) {damaiTimestamp = getDamaiTimestamp();if (damaiTimestamp >= startTimestamp) {break;}}var realStartTime = getDamaiTimestamp();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 = "¥"+ticketPricetextContains(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 = getDamaiTimestamp() - realStartTimeconsole.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(getDamaiTimestamp()))}/*** * @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;
}/*** * @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);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/485340.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT回答模式

你发现了吗,ChatGPT的回答总是遵循这些类型方式。 目录 1.解释模式 2.类比模式 3.列举模式 4.限制模式 5.转换模式 6.增改模式 7.对比模式 8.翻译模式 9.模拟模式 10.推理模式 1.解释模式 ChatGPT 在回答问题或提供信息时,不仅仅给出…

Sora - 探索AI视频模型的无限可能-官方报告解读与思考

一、引言 最近SORA火爆刷屏,我也忍不住找来官方报告分析了一下,本文将深入探讨OpenAI最新发布的Sora模型。Sora模型不仅仅是一个视频生成器,它代表了一种全新的数据驱动物理引擎,能够在虚拟世界中模拟现实世界的复杂现象。本文将重…

基于springboot+vue的中小型医院网站(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

Flutter常用命令,持续更新

目录 前言 Flutter 常用命令 Dart 常用命令 adb 常用命令(用于 Android 开发) 前言 当在开发Flutter项目时,熟悉一些常用的命令是非常重要的。这些命令可以帮助你执行各种任务,从构建应用程序到调试和测试。以下是一些Flutte…

RabbitMQ开启MQTT协议支持

1)RabbitMQ启用MQTT插件 rootmq:/# rabbitmq-plugins enable rabbitmq_mqtt Enabling plugins on node rabbitmq: rabbitmq_mqtt The following plugins have been configured:rabbitmq_managementrabbitmq_management_agentrabbitmq_mqttrabbitmq_web_dispatch Ap…

CleanMyMacX4.15破解版下载安装包步骤教程

安装CleanMyMac X的步骤如下: 在中文网站上进行安装包的免费下载。找到下载完成的安装包,然后双击打开。用鼠标拖动CleanMyMac X应用程序的图标,将其拖放至右侧的“应用程序”文件夹内。稍等片刻,CleanMyMac X应用程序就会出现在…

(提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战

文章目录 (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、提示词Prompt优化本地知识库目标操作步骤问答测试的预设问题原始数据情况数据集优化:预处理,先后准备了三份数据…

微服务-微服务API网关Spring-clould-gateway实战

1. 需求背景 在微服务架构中,通常一个系统会被拆分为多个微服务,面对这么多微服务客户端应该如何去调用呢? 如果根据每个微服务的地址发起调用,存在如下问题: 1.客户端多次请求不同的微服务,会增加客户端…

Linux使用C语言获取进程信息

Linux使用C语言获取进程信息 Author: OnceDay Date: 2024年2月22日 漫漫长路,才刚刚开始… 全系列文章可查看专栏: Linux实践记录_Once_day的博客-CSDN博客 参考文档: Linux proc目录详解_/proc/mounts-CSDN博客Linux下/proc目录介绍 - 知乎 (zhihu.com)Linux内…

大语言模型的开山之作—探秘GPT系列:GPT-1-GPT2-GPT-3的进化之路

模型模型参数创新点评价GPT1预训练微调, 创新点在于Task-specific input transformations。GPT215亿参数预训练PromptPredict, 创新点在于Zero-shotZero-shot新颖度拉满,但模型性能拉胯GPT31750亿参数预训练PromptPredict, 创新点…

openssl3.2 - 编译 - zlib.dll不要使用绝对路径

文章目录 openssl3.2 - 编译 - 编译时的动态库zlib.dll不要使用绝对路径概述测试zlib特性在安装好的目录中是否正常笔记70-test_tls13certcomp.t80-test_cms.t对测试环境的猜测从头再编译测试安装一次测试一下随便改变位置的openssl用到zlib时是否好使测试一下随便改变位置的op…

工信部等九部门:打造一批实现制造过程数字孪生的数字化转型标杆工厂

“人工智能技术与咨询” 发布 培育一批科技领军人才、青年骨干人才,以及一批既懂原材料工业又懂数字技术的复合型人才。依托职业教育提质培优行动计划,加速培育数字化转型急需紧缺的工程师和技术技能人才。支持引进数字化转型海外高端人才。 &#xff…