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

2023-11-29 18:50

本文主要是介绍基于自动化工具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);}
}

这篇关于基于自动化工具autox.js的抢票(猫眼)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/433933

相关文章

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Python使用python-pptx自动化操作和生成PPT

《Python使用python-pptx自动化操作和生成PPT》这篇文章主要为大家详细介绍了如何使用python-pptx库实现PPT自动化,并提供实用的代码示例和应用场景,感兴趣的小伙伴可以跟随小编... 目录使用python-pptx操作PPT文档安装python-pptx基础概念创建新的PPT文档查看

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

MySQL慢查询工具的使用小结

《MySQL慢查询工具的使用小结》使用MySQL的慢查询工具可以帮助开发者识别和优化性能不佳的SQL查询,本文就来介绍一下MySQL的慢查询工具,具有一定的参考价值,感兴趣的可以了解一下... 目录一、启用慢查询日志1.1 编辑mysql配置文件1.2 重启MySQL服务二、配置动态参数(可选)三、分析慢查

基于Python实现进阶版PDF合并/拆分工具

《基于Python实现进阶版PDF合并/拆分工具》在数字化时代,PDF文件已成为日常工作和学习中不可或缺的一部分,本文将详细介绍一款简单易用的PDF工具,帮助用户轻松完成PDF文件的合并与拆分操作... 目录工具概述环境准备界面说明合并PDF文件拆分PDF文件高级技巧常见问题完整源代码总结在数字化时代,PD

Python调用LibreOffice处理自动化文档的完整指南

《Python调用LibreOffice处理自动化文档的完整指南》在数字化转型的浪潮中,文档处理自动化已成为提升效率的关键,LibreOffice作为开源办公软件的佼佼者,其命令行功能结合Python... 目录引言一、环境搭建:三步构建自动化基石1. 安装LibreOffice与python2. 验证安装

Python按照24个实用大方向精选的上千种工具库汇总整理

《Python按照24个实用大方向精选的上千种工具库汇总整理》本文整理了Python生态中近千个库,涵盖数据处理、图像处理、网络开发、Web框架、人工智能、科学计算、GUI工具、测试框架、环境管理等多... 目录1、数据处理文本处理特殊文本处理html/XML 解析文件处理配置文件处理文档相关日志管理日期和

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3