ZNDS智能电视网 推荐当贝市场

TV应用下载 / 资源分享区

软件下载 | 游戏 | 讨论 | 电视计算器

综合交流 / 评测 / 活动区

交流区 | 测硬件 | 网站活动 | Z币中心

新手入门 / 进阶 / 社区互助

新手 | 你问我答 | 免费刷机救砖 | ROM固件

查看: 47640|回复: 24
上一主题 下一主题
[分享]

双11秒杀抢购脚本!淘宝+京东+拼多多+苏宁+聚划算百亿补贴

  [复制链接]
跳转到指定楼层
楼主
发表于 2020-11-4 14:45 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
分享转载一个非常有用的软件,尤其是双11期间,秒杀抢购脚本神器。距离双十一还有一波大福利,抢不到好货怎么办?赶紧把这个软件分享给你的老婆。她会感谢你的!

双11秒杀抢购脚本!淘宝+京东+拼多多+苏宁+聚划算百亿补贴

下载链接:https://www.lanzoui.com/b01br9o6j

特色功能:
1.支持淘宝淘宝购物车和BP模式抢购
2.支持京东页面、购物车和BP模式抢购
3.支持苏宁易购页面、购物车模式抢购
4.支持拼多多抢券
5.支持聚划算百亿补贴BP模式抢购

附上源代码(内行一看便知):

1
  1. //=================================================================================
  2. var 连续提交 = "无"
  3. ui.lianxutijiao.on("check", (checked)=>{
  4.     if(checked){
  5.         连续提交= "有"
  6.         toast("已开启连续提交功能,此功能必须填写坐标!");
  7.     }
  8.     else
  9.     {
  10.         连续提交 = "无"
  11.     }
  12. });
  13. ui.zuobiao.click(function () {
  14.     if(ui.zuobiao.getText()=="点击获取坐标") {
  15.         ui.zuobiao.setText("取消获取坐标");   
  16.         threads.start(获取坐标);
  17.         device.keepScreenOn()//保持屏幕常亮
  18.     }else{
  19.         ui.zuobiao.setText("点击获取坐标");
  20.         console.clear();
  21.         console.hide();
  22.         threads.shutDownAll();
  23.         device.cancelKeepingAwake();   
  24.         }
  25. })

  26. ui.taobao.on("click",function(){
  27.     app.openUrl("https://docs.qq.com/doc/DU0pSZ3BTWXl4U1pk")
  28. })
  29. ui.jingdong.on("click",function(){
  30.     app.openUrl("https://docs.qq.com/doc/DU0pSZ3BTWXl4U1pk")
  31. })
  32. var 开启刷新 = "无"
  33. var 提前刷新 = "无"
  34. ui.shuaxin.on("check", (checked)=>{
  35.     if(checked){
  36.         开启刷新= "有"
  37.         提前刷新 = "有"
  38.         toast("已开启购物车自动刷新功能!");
  39.     }
  40.     else
  41.     {
  42.         开启刷新 = "无"
  43.         提前刷新 = "无"
  44.     }
  45. });
  46. var 自动付款 = "无"
  47. ui.pay1.on("check", (checked)=>{
  48.     if(checked){
  49.         自动付款= "有"
  50.         toast("已开启自动付款");
  51.     }
  52.     else
  53.     {
  54.         自动付款 = "无"
  55.     }
  56. });

  57. var 自动勾选 = "无"
  58. var 手动勾选 = "有"
  59. ui.jiance.on("check", (checked)=>{
  60.     if(checked){
  61.         自动勾选= "有"
  62.         toast("已开启自动勾选商品,并检测价格进行结算!");
  63.         手动勾选 = "无"
  64.     }
  65.     else
  66.     {
  67.         自动勾选 = "无"
  68.     }
  69. });
  70. //淘宝密码隐藏
  71. ui.bt1.on("check", (checked)=>{
  72.     if (ui.bt1.getText() == "隐藏密码") {
  73.         ui.bt1.setText("显示密码");
  74.         ui.h.visibility = 8;
  75.         toast("密码已隐藏!");
  76.     } else {
  77.         ui.bt1.setText("隐藏密码");
  78.         ui.h.visibility = 0;
  79.         toast("密码已显示!");
  80.     }
  81. });


  82. var 平台类别2="苏宁页面"
  83. ui.model_one.on("check", (checked)=>{
  84.     if(checked){
  85.         平台类别2="苏宁页面"
  86.         toast("已切换到苏宁页面抢购模式")
  87.     }
  88. });
  89. ui.model_two.on("check", (checked)=>{
  90.     if(checked){
  91.         平台类别2="苏宁购物车"
  92.         toast("已切换到苏宁购物车抢购模式")   
  93.     }
  94. });

  95. var 平台类别="京东页面"
  96. ui.model_tree.on("check", (checked)=>{
  97.     if(checked){
  98.         平台类别="京东页面"
  99.         toast("已切换到京东页面抢购模式")
  100.     }
  101. });
  102. ui.model_four.on("check", (checked)=>{
  103.     if(checked){
  104.         平台类别="京东购物车"
  105.         toast("已切换到京东购物车抢购模式")   
  106.     }
  107. });
  108. ui.model_five.on("check", (checked)=>{
  109.     if(checked){
  110.         平台类别="京东BP链接"
  111.         toast("已切换到京东BP链接抢购模式")   
  112.     }
  113. });

  114. var 测试 = "无"
  115. ui.ceshi.on("check", (checked)=>{
  116.     if(checked){
  117.       测试 = "有"   
  118.     }
  119.     else
  120.     {
  121.        测试 = "无"
  122.     }
  123. });
  124.     //创建选项菜单(右上角)
  125.     ui.emitter.on("create_options_menu", menu=>{
  126.         menu.add("日志");  
  127.         menu.add("关于");
  128.     });
  129.     //监听选项菜单点击
  130.     ui.emitter.on("options_item_selected", (e, item)=>{
  131.         switch(item.getTitle()){
  132.             case "关于":
  133.                 alert("关于", "使用方法、问题反馈、版本更新,请咨询微信客服:baohuikf");
  134.                 break;
  135.             case "日志":
  136.                 app.startActivity("console");
  137.                 break;
  138.     }
  139.             e.consumed = true;
  140.     });
  141.     activity.setSupportActionBar(ui.toolbar);

  142.     //设置滑动页面的标题
  143.     ui.viewpager.setTitles(["淘宝","京东","苏宁","其他"]);
  144.     //让滑动页面和标签栏联动
  145.     ui.tabs.setupWithViewPager(ui.viewpager);
  146.     //让工具栏左上角可以打开侧拉菜单
  147.     ui.toolbar.setupWithDrawer(ui.drawer);

  148.     ui.menu.setDataSource([
  149.         {
  150.          title: "咨询微信客服:baohuikf",
  151.             icon: "@drawable/ic_favorite_black_48dp"
  152.     },
  153.          
  154.     {
  155.          title: "使用教程",
  156.             icon: "@drawable/ic_description_black_48dp"
  157.     },
  158.    

  159.     {
  160.          title: "退出",
  161.          icon: "@drawable/ic_exit_to_app_black_48dp"
  162.     },
  163. ]);
  164.          
  165.         ui.menu.on("item_click", item =>{
  166.          switch(item.title){
  167.             case"咨询微信客服:baohuikf":
  168.             app.openUrl("https://resoumen.com/a/qg/wx.png");
  169.      }
  170.     });
  171.          
  172.     ui.menu.on("item_click", item =>{
  173.         switch(item.title){
  174.             case"使用教程":
  175.             app.openUrl("https://docs.qq.com/doc/DU0pSZ3BTWXl4U1pk");
  176.     }
  177.     });

  178.   
  179.     ui.menu.on("item_click", item => {
  180.         switch(item.title){
  181.             case "退出":
  182.             ui.finish();
  183.             break;
  184.     }
  185.     });

  186.   
  187.     //这里是无障碍触发方式
  188.     ui.autoService.on("check", function(checked) {
  189.     // 用户勾选无障碍服务的选项时,跳转到页面让用户去开启
  190.     if(checked && auto.service == null) {
  191.      app.startActivity({
  192.      action: "android.settings.ACCESSIBILITY_SETTINGS"  }); }
  193.       if(!checked && auto.service != null){
  194.      auto.service.disableSelf();    }    });
  195.    // 当用户回到本界面时,resume事件会被触发
  196.      ui.emitter.on("resume", function() {
  197.     // 此时根据无障碍服务的开启情况,同步开关的状态
  198.     ui.autoService.checked = auto.service != null;    });
  199.    //开启悬浮窗权限
  200.     ui.overlayService.on("check", function (checked) {
  201.     // 用户勾选无障碍服务的选项时,跳转到页面让用户去开启
  202.     if (checked) {
  203.         int = app.startActivity({
  204.             packageName: "com.android.settings",
  205.             className: "com.android.settings.Settings$AppDrawOverlaySettingsActivity",
  206.             data: "package:" + auto.service.getPackageName().toString()
  207.         });
  208.         toast("请打开悬浮窗开关");
  209.     }

  210.      if (!checked && auto.service != null) {
  211.          auto.service.disableSelf();
  212.          toast("已关闭悬浮窗权限");
  213.          }
  214.     });


  215.     ui.ok_bp.on("click", () => {
  216.         // engines.execScriptFile("tb_bp.js");
  217.         "ui";

  218. var color = "#009688";
  219. ui.statusBarColor("#ff4040")
  220. ui.layout(
  221.     <drawer id="drawer" >
  222.         <vertical>
  223.             <appbar>
  224.                 <toolbar  id="toolbar"paddingTop="5dp" title="聚划算百亿补贴模式"  bg="#ff4040" />
  225.             </appbar>
  226.         
  227.             <viewpager id="viewpager">
  228.                 //这是聚划算百亿补贴界面
  229.                 <frame> //start
  230.                 <ScrollView>
  231.                 <vertical>
  232.                 <Switch id="autoService" text="无障碍服务" checked="{{auto.service != null}}" padding="8 8 8 8" textSize="13sp"/>
  233.                 {/* <Switch id="overlayService" text="悬浮窗权限" checked="{{auto.service != null}}" padding="8 8 8 8"textSize="13sp" />  */}
  234.                 <text textSize="13sp" id="networkTesttwo" textColor="#ff0000" margin="0 5" text="点击校准淘宝时间!"/>

  235.                 <radiogroup orientation="horizontal">
  236.                 <checkbox id ="pay1" text="自动付款"/>
  237.                                 <checkbox id ="bt1" text="隐藏密码" checked="false"/>
  238.                 <checkbox id ="tijiao" text="检测提交价格"/>
  239.                 </radiogroup>
  240.                
  241.                 <horizontal>
  242.                 <text id="lianjie" text="请输入聚划算商品BP链接!支持聚划算百亿补贴!如何获取BP链接请点击我!" textColor="#ff0000" w="auto" />
  243.                 </horizontal>


  244.                 <text textSize="14sp" textColor="black" text="商品BP链接:" />
  245.                 <input id="id1" textColor="gray"  text="h5.m.taobao.com/cart/order.html?buyParam=610051376150_1_0" w="*"/>

  246.             
  247.                 <horizontal>
  248.                 <text textSize="13sp" textColor="black" text="提前抢购时间"/>
  249.                 <input id="delaytime_two" textColor="gray" inputType="number" text="700" w="80"/>
  250.                 <text textSize="13sp" textColor="black" text="毫秒"  />
  251.                 </horizontal>

  252.                 <horizontal>
  253.                 <text textSize="13sp" textColor="black" text="提交订单频率"  />
  254.                 <input id="interval" textColor="gray" inputType="number" text="100" w="80"/>
  255.                 <text textSize="13sp" textColor="black" text="毫秒"  />
  256.                 </horizontal>

  257.                 <horizontal>
  258.                 <text textSize="13sp" textColor="black" text="抢购持续时间" />
  259.                 <input id="lastTime_two" textColor="gray" inputType="number" text="10" w="80"/>
  260.                 <text textSize="13sp" textColor="black" text="秒"  />
  261.                 </horizontal>

  262.                 <horizontal>
  263.                 <text textSize="14sp" textColor="black" text="商品价格不等于"  />
  264.                 <input id="password_7" textColor="gray" inputType="number|numberDecimal" text="10" w="80"/>
  265.                 <text textSize="14sp" textColor="black" text="元不提交"  />
  266.                 </horizontal>

  267.                 <linear id="h" layout_gravity="center">                        
  268.                 <horizontal>
  269.                 <text textSize="13sp" textColor="black" text="支付密码:" />
  270.                 <input id="password_1" textColor="gray"  text="*" w="45"/>
  271.                 <input id="password_2" textColor="gray"  text="*" w="45"/>
  272.                 <input id="password_3" textColor="gray"  text="*" w="45"/>
  273.                 <input id="password_4" textColor="gray"  text="*" w="45"/>
  274.                 <input id="password_5" textColor="gray"  text="*" w="45"/>
  275.                 <input id="password_6" textColor="gray"  text="*" w="45"/>
  276.                 </horizontal>
  277.                 </linear>

  278.                 <text  textSize="13sp" textColor="black" text="请输入抢购时间,格式为:2020/04/14 12:00:00"/>
  279.                 <input hint="请输入抢购时间,格式必须正确" textColor="gray" id="startTime_two" />
  280.                 //定义按钮的大小颜色和文本
  281.                 <colored-button  id="ok_two"      layout_gravity="center"      color="#ff5500"  text="开始运行"/>
  282.                 <colored-button  id="fastTbUrlOpen"       layout_gravity="center"     color="#ff5500"  text="点击跳转"/>
  283.                 </vertical>
  284.                 </ScrollView>
  285.                 </frame> //end

  286.             </viewpager>        
  287.         </vertical>
  288.     </drawer>
  289. );

  290. ui.lianjie.on("click",function(){
  291.     app.openUrl("https://docs.qq.com/doc/DU0pSZ3BTWXl4U1pk")
  292. })
  293. //BP跳转
  294. ui.fastTbUrlOpen.on("click", () => {
  295.     if(ui.id1.text() ==""){
  296.         toast("请输入聚划算商品的BP链接!")
  297.     }
  298.     else {
  299.     var url = ui.id1.text();
  300.     app.startActivity({
  301.         action: "android.intent.action.VIEW",
  302.         data: "taobao://" + url,
  303.         packageName: "com.taobao.taobao",
  304.     });
  305.     }
  306. });
  307. var 不提交订单 = "无"
  308. var 提交订单 = "有"
  309. ui.tijiao.on("check", (checked)=>{
  310.     if(checked){
  311.         不提交订单 = "有"
  312.         提交订单 = "无"
  313.         toast("检测商品提交价格,大于预定价格不提交!");
  314.     }
  315.     else
  316.     {
  317.         不提交订单 = "无"
  318.         提交订单 = "有"
  319.     }
  320. });
  321. //密码隐藏
  322. ui.bt1.on("check", (checked)=>{
  323.     if (ui.bt1.getText() == "隐藏密码") {
  324.         ui.bt1.setText("显示密码");
  325.         ui.h.visibility = 8;
  326.         toast("密码已隐藏!");
  327.     } else {
  328.         ui.bt1.setText("隐藏密码");
  329.         ui.h.visibility = 0;
  330.         toast("密码已显示!");
  331.     }
  332. });
  333. //自动付款
  334. var 自动付款 = "无"
  335. ui.pay1.on("check", (checked)=>{
  336.     if(checked){
  337.         自动付款= "有"
  338.         toast("已开启自动付款");
  339.     }
  340.     else
  341.     {
  342.         自动付款 = "无"
  343.     }
  344. });


  345. //这里是无障碍触发方式
  346. ui.autoService.on("check", function(checked) {
  347.     // 用户勾选无障碍服务的选项时,跳转到页面让用户去开启
  348.     if(checked && auto.service == null) {
  349.      app.startActivity({
  350.      action: "android.settings.ACCESSIBILITY_SETTINGS"  }); }
  351.       if(!checked && auto.service != null){
  352.      auto.service.disableSelf();    }    });
  353.    // 当用户回到本界面时,resume事件会被触发
  354.      ui.emitter.on("resume", function() {
  355.     // 此时根据无障碍服务的开启情况,同步开关的状态
  356.     ui.autoService.checked = auto.service != null;    });
  357. //    //开启悬浮窗权限
  358. //     ui.overlayService.on("check", function (checked) {
  359. //     // 用户勾选无障碍服务的选项时,跳转到页面让用户去开启
  360. //     if (checked) {
  361. //         int = app.startActivity({
  362. //             packageName: "com.android.settings",
  363. //             className: "com.android.settings.Settings$AppDrawOverlaySettingsActivity",
  364. //             data: "package:" + auto.service.getPackageName().toString()
  365. //         });
  366. //         toast("请打开悬浮窗开关");
  367. //     }

  368. //      if (!checked && auto.service != null) {
  369. //          auto.service.disableSelf();
  370. //          toast("已关闭悬浮窗权限");
  371. //          }
  372. //     });


  373.     // 获取时分秒用于记录日志
  374.     function logWithTime(msg) {
  375.         console.info(formatDate(getNow()) + " " + msg);
  376.        }
  377.    
  378.        // 检测淘宝网络延迟和时间偏差
  379.        var NTP = {
  380.        requiredResponses: 3,
  381.        serverTimes: [],//服务器时间
  382.        serverDelay: [],//服务器延迟
  383.        serverUrl: "http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp",
  384.        resyncTime: 0, // minutes
  385.        sync: function () {
  386.            var offset = storage.get("NTPClockOffset");//获取时钟偏移
  387.            if (offset) {
  388.                try {
  389.                    var t = offset.split("|")[1];
  390.                    var d = NTP.fixTime() - parseInt(t, 10);
  391.                    if (d < (1000 * 60 * NTP.resyncTime)) {
  392.                        return false;
  393.                    }
  394.                } catch (e) {
  395.                }
  396.            }
  397.            NTP.getServerTime();
  398.        },
  399.        getNow: function () {
  400.            var date = new Date();
  401.            return date.getTime();
  402.        },
  403.        //分析服务器响应
  404.        parseServerResponse: function (data) {
  405.            var NtpStartTime = storage.get("NtpStartTime");
  406.            var NtpStopTime = NTP.getNow();
  407.            var origtime = parseInt(data.data.t);//起始时间
  408.            var delay = ((NtpStopTime - NtpStartTime) / 2);//延迟
  409.            var offset = NtpStopTime - origtime - delay;//抵消
  410.            NTP.serverTimes.push(offset);
  411.            NTP.serverDelay.push(delay);
  412.    
  413.            // 因为网络问题,需要多次获取偏移值,获取平均值
  414.            if (NTP.serverTimes.length >= NTP.requiredResponses) {
  415.                var sumOffset = 0;
  416.                var sumDelay = 0;
  417.                var i = 0;
  418.                for (i = 0; i < NTP.serverTimes.length; i++) {
  419.                    sumOffset += NTP.serverTimes[i];
  420.                    sumDelay += NTP.serverDelay[i];
  421.                }
  422.                var averageOffset = Math.round(sumOffset / i);
  423.                var averageDelay = Math.round(sumDelay / i);
  424.                storage.put("NTPClockOffset", averageOffset + '|' + NTP.fixTime()); // 保存获得offset时的时间戳
  425.                storage.put("NTPClockDelay", averageDelay); // 保存获得offset时的时间戳
  426.            } else {
  427.                NTP.getServerTime();
  428.            }
  429.        },
  430.        //获取服务器时间并判断是否获取成功
  431.        getServerTime: function () {
  432.            var NtpStartTime = NTP.getNow();
  433.            storage.put("NtpStartTime", NtpStartTime);
  434.            var res = http.get(NTP.serverUrl);
  435.            if (res.statusCode !== 200) {
  436.                toast("获取网络时间失败: " + res.statusCode + " " + res.statusMessage);
  437.                return false;
  438.            } else {
  439.                NTP.parseServerResponse(res.body.json());
  440.            }
  441.        },
  442.        //固定时间
  443.        fixTime: function (timeStamp) {
  444.            if (!timeStamp) {
  445.                timeStamp = NTP.getNow();
  446.            }
  447.            var offset = storage.get("NTPClockOffset");
  448.            try {
  449.                if (!offset) {
  450.                    offset = 0;
  451.                } else {
  452.                    offset = offset.split("|")[0];
  453.                }
  454.                if (isNaN(parseInt(offset, 10))) {
  455.                    return timeStamp;
  456.                }
  457.                return timeStamp + parseInt(offset, 10);
  458.            } catch (e) {
  459.                return timeStamp;
  460.            }
  461.        }
  462.    };
  463.    
  464.    
  465.        // 获取默认开始时间
  466.        function getTime() {
  467.            var fmt = "YYYY-MM-dd hh:mm:ss";
  468.            var d = new Date();
  469.            var hh = d.getHours();
  470.            var mm = d.getMinutes();
  471.            var ss = d.getSeconds();
  472.            if (mm < 30) {
  473.             mm = 30
  474.             ss = 00
  475.            }
  476.            else{
  477.             hh+=1
  478.             mm = 00
  479.             ss = 00      
  480.            }
  481.             
  482.            var o = {
  483.                "Y+": d.getYear() + 1900,
  484.                "M+": d.getMonth() + 1,
  485.                "d+": d.getDate(),
  486.                "h+": hh,
  487.                // "m+": d.getMinutes(),
  488.                // "s+": d.getSeconds()
  489.                "m+": mm,
  490.                "s+": ss
  491.            };
  492.            for (var k in o) {
  493.                if (new RegExp("(" + k + ")").test(fmt)) {
  494.                    fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 4) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  495.                }
  496.            }
  497.            fmt = fmt.replace(/-/g, '/');
  498.            return fmt;
  499.          };
  500.    
  501.          //定义初始化界面数据
  502.          var storage = storages.create("tmalltaobaohelper.byfly");
  503.          threads.start(NTP.sync);
  504.    
  505.          //初始化淘宝界面
  506.        setTimeout(initConfig_two, 500);
  507.        function initConfig_two() {
  508.            NTPClockOffset = storage.get("NTPClockOffset", "0");
  509.            NTPClockDelay = storage.get("NTPClockDelay", "0");
  510.        if (!NTPClockOffset) {
  511.            NTPClockOffset = 0;
  512.        } else {
  513.            NTPClockOffset = parseInt(NTPClockOffset.split("|")[0]);
  514.        }
  515.        if (NTPClockOffset < 0) {
  516.            var offset_str = "慢了" + -NTPClockOffset + 'ms,'
  517.        } else {
  518.            offset_str = "快了" + NTPClockOffset + 'ms,'
  519.        }
  520.        if (NTPClockDelay < 50) {
  521.            var good_str = "网速评估:"+"您的网络延迟低于50ms,非常优秀!"
  522.        }
  523.        else if (NTPClockDelay < 100) {
  524.            var good_str = "网速评估:"+"您的网络延迟低于100ms,优秀!"
  525.        }
  526.        else if (NTPClockDelay>100 && NTPClockDelay<200) {
  527.            var good_str = "网速评估:"+"您的网络延迟高于100ms,抢购可能会有影响!"
  528.        }
  529.        else {
  530.            good_str = "网速评估:"+"您的网络质量不佳,建议切换网络!"
  531.        }
  532.    
  533.        ui.networkTesttwo.on("click",function(){
  534.            ui.networkTesttwo.setText("时间校准:"+"本地时间比淘宝" + offset_str +"已经为您校准了淘宝时间!"+'\n'+ "网络延迟:" + NTPClockDelay+'\n'+good_str );
  535.            });      
  536.    
  537.            ui.startTime_two.setText(getTime());
  538.            ui.interval.setText(storage.get("interval", "100").toString());
  539.            ui.lastTime_two.setText(storage.get("lastTime_two", "10").toString());   
  540.            ui.delaytime_two.setText(storage.get("delaytime_two", "700").toString());  
  541.          }

  542.               // 时间戳转时间字符串
  543.     function add0(m) {
  544.         return m < 10 ? '0' + m : m
  545.     }
  546.     function getNow() {
  547.         var now = new Date().getTime();
  548.         return now - NTPClockOffset;
  549.     }

  550.     function formatDate(needTime) {
  551.         //needTime是整数,否则要parseInt转换
  552.         var time = new Date(parseInt(needTime));
  553.         var h = time.getHours();
  554.         var mm = time.getMinutes();
  555.         var s = time.getSeconds();
  556.         var S = time.getMilliseconds();
  557.         return add0(h) + ':' + add0(mm) + ':' + add0(s)+":"+add0(S);
  558.     }


  559.       // 检测时间字符串是否有效
  560.     function strDateTime(str) {
  561.         var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;
  562.         var r = str.match(reg);
  563.         if (r == null) return false;
  564.         var d = new Date(r[1], r[3] - 1, r[4], r[5], r[6], r[7]);
  565.         return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4] && d.getHours() == r[5] && d.getMinutes() == r[6] && d.getSeconds() == r[7]);
  566.     }

  567.     var storage3 = storages.create("这个是一个文件名2");
  568.     for (i = 0; i < 7; i++) {
  569.     var content2 = storage3.get("password_" + (i + 1));
  570.      
  571.     if (content2) {
  572.         ui["password_" + (i + 1)].setText(content2);
  573.     }}

  574.     var storage4 = storages.create("这个是一个文件");
  575.     for (i = 0; i < 1; i++) {
  576.     var content4 = storage4.get("id" + (i + 1));
  577.      
  578.     if (content4) {
  579.         ui["id" + (i + 1)].setText(content4);
  580.     }
  581.     }

  582.       // 淘宝程序主要逻辑
  583.       ui.ok_two.click(function () {
  584.         // 检查无障碍服务
  585.         if (auto.service == null) {
  586.                toast("请先开启无障碍服务!");
  587.                return;
  588.            }
  589.            arr = new Array();
  590.            for (i = 0; i < 7; i++) {
  591.            var content2 = ui["password_" + (i + 1)].getText() + "";
  592.            storage3.put("password_" + (i + 1), content2);
  593.            arr.push(content2);
  594.            };


  595.            arr2 = new Array();
  596.            for (i = 0; i < 1; i++) {
  597.            var content4 = ui["id" + (i + 1)].getText() + "";
  598.            storage4.put("id" + (i + 1), content4);
  599.            arr2.push(content4);
  600.            };

  601.    
  602.        //接收界面数据
  603.            startTime_two = ui.startTime_two.getText().toString();
  604.            interval = parseInt(ui.interval.getText());
  605.            lastTime_two = parseInt(ui.lastTime_two.getText());
  606.            delaytime_two = parseInt(ui.delaytime_two.getText());
  607.            if (!strDateTime(startTime_two)) {
  608.                ui.startTime_two.setError("日期错误,请重新输入!");
  609.                return;
  610.            }
  611.            //传递界面数据      
  612.            storage.put("interval", interval);
  613.            storage.put("lastTime_two", lastTime_two);
  614.            storage.put("delaytime_two", delaytime_two);
  615.    
  616.            //按下开始运行
  617.              if(ui.ok_two.getText()=="开始运行") {
  618.                ui.ok_two.setText("停止运行");   
  619.                threads.start(main_two);
  620.                device.keepScreenOn()//保持屏幕常亮
  621.            }else{
  622.                ui.ok_two.setText("开始运行");
  623.                console.clear();
  624.                console.hide();
  625.                threads.shutDownAll();
  626.                device.cancelKeepingAwake();   
  627.                }
  628.         
  629.    });
  630. //这是淘宝主程序
  631. function main_two() {
  632.     var middle = device.width / 2 -400;      
  633.     console.setPosition(middle, 0);
  634.     console.setGlobalLogConfig({ "file": "/sdcard/日志.txt" });
  635.     console.show();
  636.     var DetailPage =0;
  637.     var notDetailPage = 0;
  638.     var notInDetailPage = 0

  639.     logWithTime("欢迎使用淘宝BP链接模式!");
  640.     sleep(800);
  641.     logWithTime("请勿用于非法用途");  
  642.     sleep(800);
  643.     logWithTime("请打开手机淘宝,并重新切换到点击跳转页面!");
  644.     sleep(800);
  645.     var startTime2 = new Date(Date.parse(startTime_two)).getTime();
  646.     var endTime = new Date(startTime2.valueOf() + lastTime_two * 1000).getTime();
  647.     var Panningingtime = startTime2 - delaytime_two;

  648.     reviewtime();
  649.      //判断实际时间是否大于抢购时间
  650. function reviewtime(){
  651.     var tt = getNow();
  652.        if (tt > Panningingtime) {
  653.             console.warn("您的时间已经错过了哦,请重新输入时间!");
  654.             sleep(2000);
  655.             console.clear();
  656.             console.hide();
  657.             threads.shutDownAll();
  658.         }
  659.        if (tt < Panningingtime){
  660.             logWithTime("您的抢购时间为:" + formatDate(Panningingtime));
  661.             logWithTime("距离抢购时间还剩"+(startTime2-tt)/1000+"秒"+"请耐心等待");
  662.             }
  663.         }
  664.          // 检测是否在商品详情页
  665. x = setInterval(function () {
  666.     var t = getNow();
  667.     if (t < Panningingtime) {
  668.         if (className("android.widget.Button").text("点击跳转").exists()) {
  669.             if (DetailPage === 0) {
  670.                 logWithTime("已找到跳转按钮,请等待......");
  671.                 DetailPage++;
  672.                 notDetailPage = 0
  673.             }

  674.         } else {
  675.             if (notInDetailPage === 0) {
  676.                 logWithTime("未找到跳转按钮,否则无法进行跳转!");
  677.                 DetailPage = 0;
  678.                 notInDetailPage++
  679.             }
  680.         }
  681.     } else {
  682.         not_in_Detail_Page = 0;  // 商品详情页状态复位
  683.         clearInterval(x)
  684.     }
  685. }, 500);

  686. z = setInterval(function () {
  687.     var t = getNow();
  688.     if(t >= Panningingtime && t < endTime){               
  689.         logWithTime("开始抢购")
  690.         BP链接();
  691.         clearInterval(z);        
  692.     }  
  693.   },10)      
  694. };
  695. function BP链接()
  696. {
  697.     var 价格值 = ui.password_7.text()
  698.     var 跳转 = "有"
  699.     var Crowding = 0;
  700.     var cishu = 0;
  701.     var endTime = lastTime_two * 1000;
  702.     var password_1 = ui.password_1.text()*1;   
  703.     var password_2 = ui.password_2.text()*1;
  704.     var password_3 = ui.password_3.text()*1;
  705.     var password_4 = ui.password_4.text()*1;
  706.     var password_5 = ui.password_5.text()*1;
  707.     var password_6 = ui.password_6.text()*1;
  708.             //如果在购物车
  709.         threads.start(function(){
  710.             setInterval(function(){
  711.                 if(跳转 == "有"){
  712.             if (className("android.widget.Button").text("点击跳转").exists()) {
  713.                 logWithTime("准备跳转");
  714.                 className("android.widget.Button").text("点击跳转").findOne().click()
  715.                 logWithTime("已跳转");
  716.                 跳转 = "无"
  717.                 }}
  718.             },100)
  719.         })
  720.         threads.start(function(){
  721.             setInterval(function(){
  722.         if (className("android.widget.TextView").text("加入购物车").exists()) {
  723.             var 领卷购买=id("com.taobao.taobao:id/detail_main_sys_button").findOne()
  724.             press(领卷购买.bounds().centerX()+344,领卷购买.bounds().centerY(),1)
  725.             id("confirm").findOne().click()
  726.             }
  727.         }, 100);
  728.         });

  729.         threads.start(function(){
  730.             setInterval(function(){
  731.         if (id("confirm").exists()) {
  732.             id("confirm").findOne().click()
  733.         }
  734.         }, 100);
  735.         });   

  736.         if(不提交订单 == "有"){
  737.             var 校验价格 = "真"
  738.             if(校验价格 == "真"){
  739.                 threads.start(function(){
  740.                     setInterval(function(){  
  741.                     if(className("android.widget.TextView").text("¥"+价格值).depth(12).exists()&&className("android.widget.TextView").text("提交订单").exists())
  742.                     {
  743.                         logWithTime("已找到符合预定价格的商品,开始提交订单!");
  744.                         className("android.widget.TextView").text("提交订单").findOne().click();
  745.                         找到了 = "真"
  746.                     }   
  747.                     else if(className("android.widget.TextView").text("提交订单").exists())
  748.                     {
  749.                         logWithTime("没有找到符合预定价格的商品,不提交订单!");
  750.                         Panic_buying_end()
  751.                     }                 
  752.             },200)
  753.             })
  754.             }
  755.             }
  756.    

  757.         if(提交订单 == "有"){
  758.         threads.start(function(){
  759.             setInterval(function(){
  760.             if (className("android.widget.TextView").text("提交订单").exists()) {
  761.                     logWithTime("正在尝试提交订单");
  762.                     className("android.widget.TextView").text("提交订单").findOne().click();
  763.                     logWithTime("订单已提交");            
  764.                     }
  765.                 },10)
  766.             })}
  767.         threads.start(function(){
  768.             setInterval(function(){
  769.             if (className("android.widget.TextView").textContains("加载中").exists()) {
  770.                     if (Crowding === 0){
  771.                         Crowding = 1
  772.                         logWithTime("页面加载中");
  773.                         }         
  774.                     }
  775.                 },10)
  776.             })
  777.             threads.start(function(){
  778.                 setInterval(function(){
  779.             if (className("android.widget.TextView").text("我知道了").exists()) {
  780.                         className("android.widget.TextView").text("我知道了").findOne().click();
  781.                         found = true;
  782.                         cishu++;
  783.                         logWithTime("第" + cishu + "次拥挤了,再试一次吧!");            
  784.                     }
  785.                 },10)
  786.             })
  787.         threads.start(function(){
  788.             setInterval(function(){
  789.             if (className("android.widget.TextView").text("立即付款").exists()) {
  790.                 if(自动付款 == "无"){
  791.                         logWithTime("抢购成功!请支付!");
  792.                         device.cancelKeepingAwake();
  793.                         Panic_buying_end()            
  794.                     }}
  795.                     if(自动付款 == "有")
  796.                     {
  797.                         click("立即付款")                           
  798.                     }
  799.                 },200)
  800.             })  
  801.             var 密码1 = "真"
  802.             var 密码2 = "假"
  803.             var 密码3 = "假"
  804.             var 密码4 = "假"
  805.             var 密码5 = "假"
  806.             var 密码6 = "假"
  807.             threads.start(function(){
  808.                 setInterval(function(){
  809.                 if (className("android.widget.TextView").text("请输入支付密码").exists()) {
  810.                     if(密码1 == "真"&&className("android.widget.TextView").text(password_1).exists()){click(password_1);密码2 = "真";sleep(10)}
  811.                     if(密码2 == "真"&&className("android.widget.TextView").text(password_2).exists()){click(password_2);密码3 = "真";sleep(10)}
  812.                     if(密码3 == "真"&&className("android.widget.TextView").text(password_3).exists()){click(password_3);密码4 = "真";sleep(10)}
  813.                     if(密码4 == "真"&&className("android.widget.TextView").text(password_4).exists()){click(password_4);密码5 = "真";sleep(10)}
  814.                     if(密码5 == "真"&&className("android.widget.TextView").text(password_5).exists()){click(password_5);密码6 = "真";sleep(10)}
  815.                     if(密码6 == "真"&&className("android.widget.TextView").text(password_6).exists()){click(password_6);Panic_buying_end()}
  816.                 }
  817.             },300)
  818.             })
  819.         threads.start(function(){
  820.             setInterval(function(){
  821.             if (className("android.view.View").desc("查看订单").findOne().parent().exists()) {
  822.                 logWithTime("支付成功!");
  823.                 Panic_buying_end()
  824.             }
  825.         },10)
  826.         })  
  827.         threads.start(function(){
  828.             setInterval(function(){
  829.                 sleep(endTime)
  830.                 logWithTime("超出预定抢购时长,抢购结束");
  831.                 device.cancelKeepingAwake();
  832.                 Panic_buying_end();           
  833.             
  834.         },10)
  835.     })  
  836. }



  837. function Panic_buying_end(){   
  838. device.cancelKeepingAwake()//关闭屏幕常亮
  839. logWithTime("本次抢购结束");
  840. threads.shutDownAll()
  841. }

  842.     });
  843.     // 获取时分秒用于记录日志
  844.     function logWithTime(msg) {
  845.      console.info(formatDate(getNow()) + " " + msg);
  846.     }

  847.     // 检测淘宝网络延迟和时间偏差
  848.     var NTP = {
  849.     requiredResponses: 3,
  850.     serverTimes: [],//服务器时间
  851.     serverDelay: [],//服务器延迟
  852.     serverUrl: "http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp",
  853.     resyncTime: 0, // minutes
  854.     sync: function () {
  855.         var offset = storage.get("NTPClockOffset");//获取时钟偏移
  856.         if (offset) {
  857.             try {
  858.                 var t = offset.split("|")[1];
  859.                 var d = NTP.fixTime() - parseInt(t, 10);
  860.                 if (d < (1000 * 60 * NTP.resyncTime)) {
  861.                     return false;
  862.                 }
  863.             } catch (e) {
  864.             }
  865.         }
  866.         NTP.getServerTime();
  867.     },
  868.     getNow: function () {
  869.         var date = new Date();
  870.         return date.getTime();
  871.     },
  872.     //分析服务器响应
  873.     parseServerResponse: function (data) {
  874.         var NtpStartTime = storage.get("NtpStartTime");
  875.         var NtpStopTime = NTP.getNow();
  876.         var origtime = parseInt(data.data.t);//起始时间
  877.         var delay = ((NtpStopTime - NtpStartTime) / 2);//延迟
  878.         var offset = NtpStopTime - origtime - delay;//抵消
  879.         NTP.serverTimes.push(offset);
  880.         NTP.serverDelay.push(delay);

  881.         // 因为网络问题,需要多次获取偏移值,获取平均值
  882.         if (NTP.serverTimes.length >= NTP.requiredResponses) {
  883.             var sumOffset = 0;
  884.             var sumDelay = 0;
  885.             var i = 0;
  886.             for (i = 0; i < NTP.serverTimes.length; i++) {
  887.                 sumOffset += NTP.serverTimes[i];
  888.                 sumDelay += NTP.serverDelay[i];
  889.             }
  890.             var averageOffset = Math.round(sumOffset / i);
  891.             var averageDelay = Math.round(sumDelay / i);
  892.             storage.put("NTPClockOffset", averageOffset + '|' + NTP.fixTime()); // 保存获得offset时的时间戳
  893.             storage.put("NTPClockDelay", averageDelay); // 保存获得offset时的时间戳
  894.         } else {
  895.             NTP.getServerTime();
  896.         }
  897.     },
  898.     //获取服务器时间并判断是否获取成功
  899.     getServerTime: function () {
  900.         var NtpStartTime = NTP.getNow();
  901.         storage.put("NtpStartTime", NtpStartTime);
  902.         var res = http.get(NTP.serverUrl);
  903.         if (res.statusCode !== 200) {
  904.             toast("获取网络时间失败: " + res.statusCode + " " + res.statusMessage);
  905.             return false;
  906.         } else {
  907.             NTP.parseServerResponse(res.body.json());
  908.         }
  909.     },
  910.     //固定时间
  911.     fixTime: function (timeStamp) {
  912.         if (!timeStamp) {
  913.             timeStamp = NTP.getNow();
  914.         }
  915.         var offset = storage.get("NTPClockOffset");
  916.         try {
  917.             if (!offset) {
  918.                 offset = 0;
  919.             } else {
  920.                 offset = offset.split("|")[0];
  921.             }
  922.             if (isNaN(parseInt(offset, 10))) {
  923.                 return timeStamp;
  924.             }
  925.             return timeStamp + parseInt(offset, 10);
  926.         } catch (e) {
  927.             return timeStamp;
  928.         }
  929.     }
  930. };




  931.     // 获取默认开始时间
  932.     function getTime() {
  933.         var fmt = "YYYY-MM-dd hh:mm:ss";
  934.         var d = new Date();
  935.         var hh = d.getHours();
  936.         var mm = d.getMinutes();
  937.         var ss = d.getSeconds();
  938.         if (mm < 30) {
  939.             mm = 30
  940.             ss = 00
  941.         }
  942.         else{
  943.             hh+=1
  944.             mm = 00
  945.             ss = 00   
  946.         }
  947.          
  948.         var o = {
  949.             "Y+": d.getYear() + 1900,
  950.             "M+": d.getMonth() + 1,
  951.             "d+": d.getDate(),
  952.             "h+": hh,
  953.             // "m+": d.getMinutes(),
  954.             // "s+": d.getSeconds()
  955.             "m+": mm,
  956.             "s+": ss
  957.         };
  958.         for (var k in o) {
  959.             if (new RegExp("(" + k + ")").test(fmt)) {
  960.                 fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 4) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  961.             }
  962.         }
  963.         fmt = fmt.replace(/-/g, '/');
  964.         return fmt;
  965.       };

  966.       //定义初始化界面数据
  967.       var storage = storages.create("tmalltaobaohelper.byfly");
  968.       threads.start(NTP.sync);

  969.       //初始化苏宁界面数据
  970.     setTimeout(initConfig, 500);

  971.     function initConfig() {  

  972.         ui.startTime.setText(getTime());      
  973.         ui.interval.setText(storage.get("interval", "100").toString());
  974.         ui.lastTime.setText(storage.get("lastTime", "10").toString());      
  975.         ui.delaytime.setText(storage.get("delaytime", "800").toString());      
  976.       }
  977.       //初始化淘宝界面
  978.     setTimeout(initConfig_two, 500);
  979.     function initConfig_two() {
  980.         NTPClockOffset = storage.get("NTPClockOffset", "0");
  981.         NTPClockDelay = storage.get("NTPClockDelay", "0");
  982.     if (!NTPClockOffset) {
  983.         NTPClockOffset = 0;
  984.     } else {
  985.         NTPClockOffset = parseInt(NTPClockOffset.split("|")[0]);
  986.     }
  987.     if (NTPClockOffset < 0) {
  988.         var offset_str = "慢了" + -NTPClockOffset + 'ms,'
  989.     } else {
  990.         offset_str = "快了" + NTPClockOffset + 'ms,'
  991.     }
  992.     if (NTPClockDelay < 50) {
  993.         var good_str = "网速评估:"+"您的网络延迟低于50ms,非常优秀!"
  994.     }
  995.     else if (NTPClockDelay < 100) {
  996.         var good_str = "网速评估:"+"您的网络延迟低于100ms,优秀!"
  997.     }
  998.     else if (NTPClockDelay>100 && NTPClockDelay<200) {
  999.         var good_str = "网速评估:"+"您的网络延迟高于100ms,抢购可能会有影响!"
  1000.     }
  1001.     else {
  1002.         good_str = "网速评估:"+"您的网络质量不佳,建议切换网络!"
  1003.     }

  1004.     ui.networkTesttwo.on("click",function(){
  1005.         ui.networkTesttwo.setText("时间校准:"+"本地时间比淘宝" + offset_str +"已经为您校准了淘宝时间!"+'\n'+ "网络延迟:" + NTPClockDelay+'\n'+good_str );
  1006.         });      

  1007.         ui.startTime_two.setText(getTime());
  1008.         ui.interval.setText(storage.get("interval", "100").toString());
  1009.         ui.lastTime_two.setText(storage.get("lastTime_two", "10").toString());   
  1010.         ui.delaytime_two.setText(storage.get("delaytime_two", "200").toString());
  1011.         ui.count.setText(storage.get("count", "3").toString());

  1012.       }
  1013.       
  1014.     //初始化京东界面数据
  1015.       setTimeout(initConfig_tree, 500);
  1016.       function initConfig_tree() {

  1017.         ui.startTime_tree.setText(getTime());
  1018.         ui.interval.setText(storage.get("interval", "100").toString());
  1019.         ui.lastTime_tree.setText(storage.get("lastTime_tree", "10").toString());      
  1020.         ui.delaytime_tree.setText(storage.get("delaytime_tree", "800").toString());
  1021.          
  1022.       }
  1023. //获取京东时间
  1024. var thread = threads.start(function(){  //页面网络延时提示  
  1025.     timestamp1 = new Date().getTime();
  1026.     r = http.get("https://a.jd.com//ajax/queryServerData.html");
  1027.     timestamp2 = new Date().getTime()
  1028.     JDnetwork_delay = timestamp2-timestamp1  //网络延时
  1029.     var objj = r.body.json();
  1030.     JDtime_difference = timestamp1-objj.serverTime//网络时间差
  1031.     if (JDtime_difference < 0) {
  1032.         var JDoffset_str = "慢了" + -JDtime_difference + 'ms,'
  1033.     } else {
  1034.         JDoffset_str = "快了" + JDtime_difference + 'ms,'
  1035.     }
  1036.     if (JDnetwork_delay < 50) {
  1037.         var JDgood_str = "网速评估:"+"您的网络延迟低于50ms,非常优秀!"
  1038.     }
  1039.     else if (JDnetwork_delay < 100) {
  1040.         var JDgood_str = "网速评估:"+"您的网络延迟低于100ms,优秀!"
  1041.     }
  1042.     else if (JDnetwork_delay>100 && JDnetwork_delay<200) {
  1043.         var JDgood_str = "网速评估:"+"您的网络延迟高于100ms,抢购可能会有影响!"
  1044.     }
  1045.     else {
  1046.         JDgood_str= "网速评估:"+"您的网络质量不佳,建议切换网络!"
  1047.     }
  1048.     ui.networkTest_tree.on("click",function(){
  1049.         ui.networkTest_tree.setText("时间校准:"+"本地时间比京东" + JDoffset_str+"已经为您校准了京东时间!"+'\n'+"网络延时:"+JDnetwork_delay+'\n'+JDgood_str);
  1050.         });
  1051.      
  1052.     });
  1053. //获取苏宁时间
  1054. var thread2 = threads.start(function(){
  1055.     timestamp1 = new Date().getTime();
  1056.      recode_suning = http.get("http://quan.suning.com/getSysTime.do");  
  1057.     timestamp2 = new Date().getTime();
  1058.     SNnetwork_delay = timestamp2-timestamp1
  1059.     var  suningTime = recode_suning.body.json();
  1060.     var nowdate = suningTime.sysTime2;            
  1061.     var nowdate2 = nowdate.replace(/-/g,'/');
  1062.     var nowtime = new Date(nowdate2).getTime();
  1063.     SNtime_difference =timestamp1 - nowtime  ;
  1064.     if (SNtime_difference < 0) {
  1065.         var SNoffset_str = "慢了" + -SNtime_difference + 'ms,'
  1066.     } else {
  1067.         SNoffset_str = "快了" + SNtime_difference + 'ms,'
  1068.     }
  1069.     if (SNnetwork_delay< 50) {
  1070.         var SNgood_str = "网速评估:"+"您的网络延迟低于50ms,非常优秀!"
  1071.     }
  1072.     else if (SNnetwork_delay < 100) {
  1073.         var SNgood_str = "网速评估:"+"您的网络延迟低于100ms,优秀!"
  1074.     }
  1075.     else if (SNnetwork_delay>100 && SNnetwork_delay<200) {
  1076.         var SNgood_str = "网速评估:"+"您的网络延迟高于100ms,抢购可能会有影响!"
  1077.     }
  1078.     else {
  1079.         SNgood_str= "网速评估:"+"您的网络质量不佳,建议切换网络!"
  1080.     }
  1081.     ui.networkTest.on("click",function(){
  1082.         ui.networkTest.setText("时间校准:"+"本地时间比苏宁" + SNoffset_str+"已经为您校准了苏宁时间!"+'\n'+"网络延时:"+SNnetwork_delay+'\n'+SNgood_str);
  1083.         });
  1084. });

  1085.       // 时间戳转时间字符串
  1086.     function add0(m) {
  1087.         return m < 10 ? '0' + m : m
  1088.     }
  1089.     function getNow() {
  1090.         var now = new Date().getTime();
  1091.         return now - NTPClockOffset;
  1092.     }

  1093.     function formatDate(needTime) {
  1094.         //needTime是整数,否则要parseInt转换
  1095.         var time = new Date(parseInt(needTime));
  1096.         var h = time.getHours();
  1097.         var mm = time.getMinutes();
  1098.         var s = time.getSeconds();
  1099.         var S = time.getMilliseconds();
  1100.         return add0(h) + ':' + add0(mm) + ':' + add0(s)+":"+add0(S);
  1101.     }


  1102.       // 检测时间字符串是否有效
  1103.     function strDateTime(str) {
  1104.         var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;
  1105.         var r = str.match(reg);
  1106.         if (r == null) return false;
  1107.         var d = new Date(r[1], r[3] - 1, r[4], r[5], r[6], r[7]);
  1108.         return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4] && d.getHours() == r[5] && d.getMinutes() == r[6] && d.getSeconds() == r[7]);
  1109.     }
  1110.      
  1111.     // 苏宁程序主要逻辑
  1112.     ui.ok.click(function () {
  1113.         // 检查无障碍服务
  1114.         if (auto.service == null) {
  1115.             toast("请先开启无障碍服务!");
  1116.             return;
  1117.         }
  1118.     //接收界面数据
  1119.     startTime = ui.startTime.getText().toString();
  1120.    
  1121.     interval = parseInt(ui.interval.getText());
  1122.     lastTime = parseInt(ui.lastTime.getText());
  1123.     delaytime = parseInt(ui.delaytime.getText());
  1124.     if (!strDateTime(startTime)) {
  1125.         ui.startTime.setError("日期错误,请重新输入!");
  1126.         return;
  1127.     }
  1128.     //传递界面数据      
  1129.     storage.put("interval", interval);
  1130.     storage.put("lastTime", lastTime);
  1131.     storage.put("delaytime", delaytime);

  1132.     if(ui.ok.getText()=="开始运行") {
  1133.         ui.ok.setText("停止运行");   
  1134.         model_change();
  1135.         device.keepScreenOn()//保持屏幕常亮
  1136.     }else{
  1137.         ui.ok.setText("开始运行");
  1138.         console.clear();
  1139.         console.hide();
  1140.         threads.shutDownAll();
  1141.         device.cancelKeepingAwake();   
  1142.         }
  1143. });
  1144.     function model_change()
  1145.     {
  1146.         if(平台类别2=="苏宁页面"){
  1147.             device.keepScreenOn();
  1148.             threads.start(main);
  1149.         }
  1150.         if(平台类别2=="苏宁购物车"){
  1151.             device.keepScreenOn();
  1152.             threads.start(sn购物车);           
  1153.         }
  1154.     }

  1155.     var storage3 = storages.create("这个是一个文件名2");
  1156.     for (i = 0; i < 7; i++) {
  1157.     var content2 = storage3.get("password_" + (i + 1));
  1158.      
  1159.     if (content2) {
  1160.         ui["password_" + (i + 1)].setText(content2);
  1161.     }
  1162.     }

  1163.     var storage6 = storages.create("这个是一个文件名6");
  1164.     for (i = 0; i < 2; i++) {
  1165.     var content6 = storage6.get("X" + (i + 1));
  1166.      
  1167.     if (content6) {
  1168.         ui["X" + (i + 1)].setText(content6);
  1169.     }}

  1170.     // 淘宝程序主要逻辑
  1171.     ui.ok_two.click(function () {
  1172.      // 检查无障碍服务
  1173.      if (auto.service == null) {
  1174.             toast("请先开启无障碍服务!");
  1175.             return;
  1176.         }
  1177.         arr = new Array();
  1178.         for (i = 0; i < 7; i++) {
  1179.         var content2 = ui["password_" + (i + 1)].getText() + "";
  1180.         storage3.put("password_" + (i + 1), content2);
  1181.         arr.push(content2);
  1182.         };

  1183.         arr6 = new Array();
  1184.         for (i = 0; i < 2; i++) {
  1185.         var content6 = ui["X" + (i + 1)].getText() + "";
  1186.         storage6.put("X" + (i + 1), content6);
  1187.         arr6.push(content6);
  1188.         };
  1189.     //接收界面数据
  1190.         startTime_two = ui.startTime_two.getText().toString();
  1191.         interval = parseInt(ui.interval.getText());
  1192.         count= parseInt(ui.count.getText());
  1193.         lastTime_two = parseInt(ui.lastTime_two.getText());
  1194.         delaytime_two = parseInt(ui.delaytime_two.getText());
  1195.         if (!strDateTime(startTime_two)) {
  1196.             ui.startTime_two.setError("日期错误,请重新输入!");
  1197.             return;
  1198.         }
  1199.         //传递界面数据      
  1200.         storage.put("interval", interval);
  1201.         storage.put("count", count);
  1202.         storage.put("lastTime_two", lastTime_two);
  1203.         storage.put("delaytime_two", delaytime_two);

  1204.         //按下开始运行

  1205.           if(ui.ok_two.getText()=="开始运行") {
  1206.             var X轴判断 = ui.X1.text();
  1207.             var Y轴判断 = ui.X2.text();        
  1208.             if(X轴判断.length==0&&连续提交=="有")
  1209.             {
  1210.                 toast("您选择了连续提交模式,但未输入X轴坐标!")
  1211.                 ui.X1.setError("您选择了连续提交模式,但未输入X轴坐标!")
  1212.                 return;
  1213.             }
  1214.             if(Y轴判断.length==0&&连续提交=="有")
  1215.             {
  1216.                 toast("您选择了连续提交模式,但未输入Y轴坐标!")
  1217.                 ui.X2.setError("您选择了连续提交模式,但未输入Y轴坐标!")
  1218.                 return;
  1219.             }
  1220.             if(X轴判断.length>=5&&连续提交=="有") {
  1221.                 ui.X1.setError("您的坐标有误,请重新输入!");
  1222.                 return;
  1223.             }     
  1224.             if(Y轴判断.length>=5&&连续提交=="有") {
  1225.                 ui.X2.setError("您的坐标有误,请重新输入!");
  1226.                 return;              
  1227.             }
  1228.         if(连续提交=="无"||连续提交=="有"){
  1229.                 ui.ok_two.setText("停止运行");   
  1230.                 threads.start(main_two);
  1231.                 device.keepScreenOn()//保持屏幕常亮
  1232.         }}else{
  1233.             ui.ok_two.setText("开始运行");
  1234.             console.clear();
  1235.             console.hide();
  1236.             threads.shutDownAll();
  1237.             device.cancelKeepingAwake();   
  1238.             }   
  1239. });


  1240.      // 京东程序主要逻辑
  1241.      ui.ok_tree.click(function () {
  1242.         // 检查无障碍服务
  1243.         if (auto.service == null) {
  1244.             toast("请先开启无障碍服务!");
  1245.             return;
  1246.     }

  1247.     //接收界面数据
  1248.     startTime_tree = ui.startTime_tree.getText().toString();
  1249.     interval = parseInt(ui.interval.getText());
  1250.     lastTime_tree = parseInt(ui.lastTime_tree.getText());
  1251.     delaytime_tree = parseInt(ui.delaytime_tree.getText());
  1252.     if (!strDateTime(startTime_tree)) {
  1253.         ui.startTime.setError("日期错误,请重新输入!");
  1254.         return;
  1255.     }
  1256.     //传递界面数据      
  1257.     storage.put("interval", interval);
  1258.     storage.put("lastTime_tree", lastTime_tree);
  1259.     storage.put("delaytime_tree", delaytime_tree);

  1260.        //按下开始运行
  1261.     if (ui.ok_tree.getText().toString() === '开始运行') {
  1262.         // 一直保持屏幕常亮
  1263.         device.keepScreenOn();
  1264.         model_change2();
  1265.         ui.ok_tree.setText('停止运行');
  1266.     } else {
  1267.         console.clear();
  1268.         console.hide();
  1269.         threads.shutDownAll();
  1270.         device.cancelKeepingAwake();
  1271.         ui.ok_tree.setText('开始运行');
  1272.     }

  1273. });  

  1274. function model_change2()
  1275. {
  1276.     if(平台类别=="京东页面"){
  1277.         device.keepScreenOn();
  1278.         threads.start(main_tree);
  1279.     }
  1280.     if(平台类别=="京东购物车"){
  1281.         device.keepScreenOn();
  1282.         threads.start(京东购物车);           
  1283.     }
  1284.     if(平台类别=="京东BP链接"){
  1285.         device.keepScreenOn();
  1286.         threads.start(京东BP链接);           
  1287.     }
  1288. }

  1289.       //这是苏宁主程序
  1290.       function main() {
  1291.         var middle = device.width / 2 -400;      
  1292.         console.setPosition(middle, 0);
  1293.         console.setGlobalLogConfig({ "file": "/sdcard/日志.txt" });
  1294.         console.show();
  1295.         var DetailPage =0;
  1296.         var notDetailPage = 0;
  1297.         var notInDetailPage = 0
  1298.    
  1299.         logWithTime("欢迎使用苏宁秒杀助手");
  1300.         sleep(800);
  1301.         logWithTime("请勿用于非法用途");  
  1302.         sleep(800);
  1303.         logWithTime("请进入所要抢购商品的详情页");
  1304.         sleep(800);
  1305.             
  1306.         var startTime2 = new Date(Date.parse(startTime)).getTime();
  1307.         var endTime = new Date(startTime2.valueOf() + lastTime * 1000).getTime();
  1308.         var Panningingtime = startTime2 - delaytime;


  1309.         reviewtime();
  1310.          //判断实际时间是否大于抢购时间
  1311.     function reviewtime(){
  1312.         var shijian = getNow();
  1313.            if (shijian > Panningingtime) {
  1314.                 console.warn("您的时间已经错过了哦,请重新输入时间!");
  1315.                 sleep(2000);
  1316.                 console.clear();
  1317.                 console.hide();
  1318.                 threads.shutDownAll();
  1319.             }
  1320.            if(shijian < Panningingtime){
  1321.                 logWithTime("您的抢购时间为:" + formatDate(Panningingtime));
  1322.                 logWithTime("距离抢购时间还剩"+(startTime2-shijian)/1000+"秒"+"请耐心等待");
  1323.                 }
  1324.             }
  1325.              // 检测是否在商品详情页
  1326.     x = setInterval(function () {
  1327.         var t = getNow();
  1328.         if (t < Panningingtime) {
  1329.             if (className("android.widget.TextView").text("已选").exists()) {
  1330.                 if (DetailPage === 0) {
  1331.                     logWithTime("已进入商品详情页,请等待");
  1332.                     DetailPage++;
  1333.                     notDetailPage = 0
  1334.                 }

  1335.             } else {
  1336.                 if (notInDetailPage === 0) {
  1337.                     logWithTime("未进入商品详情页,请前往,否则无法进行购买!");
  1338.                     DetailPage = 0;
  1339.                     notInDetailPage++
  1340.                 }
  1341.             }
  1342.         } else {
  1343.             not_in_Detail_Page = 0;  // 商品详情页状态复位
  1344.             clearInterval(x)
  1345.         }

  1346.     }, 500);

  1347.             
  1348. z = setInterval(function () {
  1349.     var t = getNow();
  1350.     if(t >= Panningingtime && t < endTime){               
  1351.         logWithTime("开始抢购")
  1352.         苏宁页面();
  1353.         clearInterval(z);        
  1354.     }  
  1355.   },10)
  1356. };
  1357. function 苏宁页面()
  1358. {
  1359.     var Crowding = 0;
  1360.     var endTime = lastTime*1000;
  1361.            // 如果在抢购商品详情页面
  1362.         threads.start(function(){
  1363.             setInterval(function(){      
  1364.         if(className("android.widget.Button").text("立即抢购").exists()){
  1365.             logWithTime("准备点击抢购中");
  1366.             click("立即抢购");
  1367.             click("确定");
  1368.             click("提交订单");
  1369.             logWithTime("准备点击确定");      
  1370.           }
  1371.         }, 10);
  1372.         });  

  1373.         threads.start(function(){
  1374.             setInterval(function(){
  1375.             if(className("android.widget.TextView").text("立即抢购").exists())
  1376.             {
  1377.                 logWithTime("准备点击抢购中");
  1378.                 click("立即抢购");
  1379.                 click("提交订单");
  1380.                 logWithTime("准备提交订单");   
  1381.             }   
  1382.         }, 10);
  1383.         });  

  1384.         threads.start(function(){
  1385.             setInterval(function(){  
  1386.         if(className("android.widget.TextView").textContains("立即购买").exists()){
  1387.             logWithTime("准备点击购买中");
  1388.             click("立即购买");
  1389.             click("确定");
  1390.             click("提交订单");
  1391.             logWithTime("准备点击确定");
  1392.         }
  1393.         }, 10);
  1394.         });  
  1395.         threads.start(function(){
  1396.             setInterval(function(){
  1397.         if(className("android.widget.TextView").textContains("马上抢").exists()){
  1398.             logWithTime("准备点击马上抢");
  1399.             click("马上抢")
  1400.             logWithTime("马上抢已点击");
  1401.             }
  1402.         }, 10);
  1403.         });  
  1404.              // 如果在确定界面
  1405.         threads.start(function(){
  1406.             setInterval(function(){
  1407.         if (className("android.widget.TextView").text("确定").exists()) {
  1408.             click("确定");
  1409.             logWithTime("确定已点击");
  1410.         }
  1411.         }, 10);
  1412.         });
  1413.             // 如果在提交订单界面
  1414.         threads.start(function(){
  1415.             setInterval(function(){
  1416.          if (className("android.widget.TextView").text("提交订单").exists()) {
  1417.             logWithTime("正在尝试提交订单");
  1418.             click("提交订单");
  1419.             logWithTime("订单已提交");
  1420.         }
  1421.         }, 10);
  1422.         });
  1423.         threads.start(function(){
  1424.             setInterval(function(){
  1425.         if (className("android.widget.TextView").text("知道了").exists()) {
  1426.             className("android.widget.TextView").text("知道了").findOne().click();
  1427.             Crowding++;
  1428.             logWithTime("第" + Crowding + "次拥挤了,再试一次吧!");            
  1429.         }
  1430.         }, 10);
  1431.         });
  1432.             // 抢购成功
  1433.         threads.start(function(){
  1434.                 setInterval(function(){
  1435.         if (className("android.widget.TextView").text("苏宁收银台").exists()) {
  1436.             logWithTime("抢购成功!请支付!");
  1437.             device.cancelKeepingAwake();
  1438.             Panic_buying_end();            
  1439.         }
  1440.         }, 10);
  1441.         });
  1442.         threads.start(function(){
  1443.             setInterval(function(){
  1444.             sleep(endTime)
  1445.             logWithTime("超出预定抢购时长,抢购结束");
  1446.             device.cancelKeepingAwake();
  1447.             Panic_buying_end();
  1448.         }, 10);
  1449.         });
  1450. }
  1451. //这是淘宝主程序
  1452. function main_two() {
  1453.     var middle = device.width / 2 -400;      
  1454.     console.setPosition(middle, 0);
  1455.     console.setGlobalLogConfig({ "file": "/sdcard/日志.txt" });
  1456.     console.show();
  1457.     var DetailPage =0;
  1458.     var notDetailPage = 0;
  1459.     var notInDetailPage = 0
  1460.     var notChecked = 0;

  1461.     logWithTime("欢迎使用淘宝秒杀助手");
  1462.     sleep(800);
  1463.     logWithTime("请勿用于非法用途");  
  1464.     sleep(800);
  1465.     logWithTime("本模式属于淘宝购物车抢购模式");  
  1466.     sleep(800);
  1467.     logWithTime("请您进入购物车,否则无法进行购买!");
  1468.     sleep(800);
  1469.         
  1470.     var startTime2 = new Date(Date.parse(startTime_two)).getTime();
  1471.     var endTime = new Date(startTime2.valueOf() + lastTime_two * 1000).getTime();
  1472.     var Panningingtime = startTime2 - delaytime_two;

  1473.     reviewtime();
  1474.      //判断实际时间是否大于抢购时间
  1475. function reviewtime(){
  1476.     var tt = getNow();
  1477.        if (tt > Panningingtime) {
  1478.             console.warn("您的时间已经错过了哦,请重新输入时间!");
  1479.             sleep(2000);
  1480.             console.clear();
  1481.             console.hide();
  1482.             threads.shutDownAll();
  1483.         }
  1484.        if (tt < Panningingtime){
  1485.             logWithTime("您的抢购时间为:" + formatDate(Panningingtime));
  1486.             logWithTime("距离抢购时间还剩"+(startTime2-tt)/1000+"秒"+"请耐心等待");
  1487.             }
  1488.         }
  1489.          // 检测是否在商品详情页
  1490. x = setInterval(function () {
  1491.     var t = getNow();
  1492.     if (t < Panningingtime) {
  1493.         if (id("button_cart_charge").exists() || className("android.widget.TextView").text("全选").exists()) {
  1494.             if (DetailPage === 0) {
  1495.                 logWithTime("已进入购物车,请耐心等待...");
  1496.                 DetailPage++;
  1497.                 notDetailPage = 0
  1498.             }

  1499.         } else {
  1500.             if (notInDetailPage === 0) {
  1501.                 logWithTime("未进入购物车,请前往,否则无法进行购买!");
  1502.                 DetailPage = 0;
  1503.                 notInDetailPage++
  1504.             }
  1505.         }
  1506.     } else {
  1507.         not_in_Detail_Page = 0;  // 商品详情页状态复位
  1508.         clearInterval(x)
  1509.     }
  1510.     //判断是否勾选商品
  1511.     if(提前刷新=="有")
  1512.     {
  1513.         if (notChecked === 0){
  1514.             notChecked = 1
  1515.         logWithTime("请您勿勾选商品!");
  1516.         sleep(1000)
  1517.         logWithTime("需要提前刷新,将自动隐藏控制台!");
  1518.         console.hide()
  1519.         }
  1520.     }
  1521.     if(手动勾选 == "有"){
  1522.         if (className("android.widget.TextView").text("结算").exists()) {
  1523.                 found = true;
  1524.             if (notChecked === 0){
  1525.                 notChecked = 1
  1526.                 desc("全选").findOne().click()
  1527.                 logWithTime("检测到您未勾选商品,以为您自动勾选!");
  1528.             }
  1529.         }
  1530.     }  
  1531.     else{
  1532.         if (notChecked === 0){
  1533.             notChecked = 1
  1534.         logWithTime("请您勿勾选商品!");
  1535.         }
  1536.     }
  1537. }, 500);
  1538. z = setInterval(function () {
  1539.     var t = getNow();
  1540.     if(t >= Panningingtime && t < endTime){               
  1541.         logWithTime("开始抢购")
  1542.         淘宝购物车();
  1543.         clearInterval(z);        
  1544.     }  
  1545.   },10)     
  1546. };
  1547. function 淘宝购物车()
  1548. {
  1549.     var i = 1;
  1550.     var Crowding = 0;
  1551.     var Success = 0;
  1552.     var found = false;
  1553.     var endTime = lastTime_two * 1000
  1554.     var password_1 = ui.password_1.text()*1;   
  1555.     var password_2 = ui.password_2.text()*1;
  1556.     var password_3 = ui.password_3.text()*1;
  1557.     var password_4 = ui.password_4.text()*1;
  1558.     var password_5 = ui.password_5.text()*1;
  1559.     var password_6 = ui.password_6.text()*1;
  1560.     var 提交订单X轴 = ui.X1.text()*1;
  1561.     var 提交订单Y轴 = ui.X2.text()*1;
  1562.     var 价格值 = ui.password_7.text()
  1563.     var count = ui.count.text()*1
  1564.     if(提前刷新=="有"){
  1565.         threads.start(function(){
  1566.             setInterval(function(){
  1567.                 if(开启刷新=="有"){
  1568.                 if(className("android.widget.TextView").text("结算"))
  1569.                 {
  1570.                     logWithTime("开始刷新");
  1571.                     gesture(400, [500, 500], [500, 900])
  1572.                     logWithTime("已刷新");
  1573.                     开启刷新 = "无"
  1574.                 }
  1575.                 }
  1576.             },10)
  1577.         })
  1578.          
  1579.         threads.start(function(){
  1580.             setInterval(function(){
  1581.          if(className("android.widget.TextView").text("加载完成").exists()){
  1582.             logWithTime("准备勾选");
  1583.             className("android.view.View").desc("勾选按钮,商品未选中,双击选中商品").findOne().click()
  1584.             logWithTime("已勾选");
  1585.             }
  1586.         },10)
  1587.         })
  1588.         }      

  1589.     if(自动勾选 == "有"){
  1590.         var 全选 = "有"
  1591.         threads.start(function(){
  1592.             setInterval(function(){
  1593.             if(全选 == "有"){
  1594.         if (className("android.widget.CheckBox").desc("全选").exists()&&className("android.widget.TextView").textContains("结算").exists()) {
  1595.             desc("全选").findOne().click()
  1596.             全选 = "无"
  1597.         }}
  1598.         },100)
  1599.         })

  1600.         var 校验价格 = "真"
  1601.         if(校验价格 == "真"){
  1602.             threads.start(function(){
  1603.                 setInterval(function(){
  1604.                 if(className("android.widget.TextView").text("¥"+价格值).depth(15).exists()&&className("android.widget.TextView").textContains("结算(").exists())
  1605.                 {
  1606.                     logWithTime("已找到符合预定价格的商品,开始结算!");
  1607.                     className("android.widget.TextView").textContains("结算(1)").findOne().click();
  1608.                 }        
  1609.                 else if(className("android.widget.TextView").textContains("结算(").exists())
  1610.                 {
  1611.                     全选 = "有"
  1612.                     logWithTime("未找到符合预定价格的商品,不结算,取消再次勾选!");
  1613.                     desc("取消全选").findOne().click()
  1614.                 }         
  1615.         },200)
  1616.         })
  1617.         }
  1618.         }else
  1619.         {
  1620.             threads.start(function(){
  1621.                 setInterval(function(){
  1622.             if (className("android.widget.TextView").textContains("结算(").exists()) {      
  1623.                    logWithTime("准备点击结算");
  1624.                    className("android.widget.TextView").textContains("结算(").findOne().click();
  1625.                    found = true;
  1626.                    logWithTime("结算已点击");
  1627.                    if(测试 =="有")
  1628.                    {    sleep(100)
  1629.                        logWithTime("测试模式不提交订单!");
  1630.                        Panic_buying_end();
  1631.                    }      
  1632.                 }
  1633.             },10)
  1634.             })
  1635.         }

  1636.     threads.start(function(){
  1637.         setInterval(function(){
  1638.     if (className("android.widget.TextView").text("失效宝贝").exists() && className("android.widget.TextView").text("商品不能购买").exists()&&count>0) {
  1639.         logWithTime("检测到商品已失效或无法购买,即将返回结算界面开始重试!");
  1640.             logWithTime("已返回结算界面,准备重试!");
  1641.             sleep(random(10,30))
  1642.             back();
  1643.             count = count - 1;
  1644.             logWithTime("已重试"+i+"次");
  1645.             i++;
  1646.     }
  1647.     }, 100);
  1648.     });
  1649.     //不测试时才提交订单
  1650.     var 提交订单 = "真"
  1651.     if(测试 =="无"&&连续提交=="有") {
  1652.         threads.start(function(){
  1653.             setInterval(function(){
  1654.     if(className("android.widget.TextView").text("提交订单").exists()&&提交订单 == "真")
  1655.         {
  1656.             var x=1            
  1657.         while(true){
  1658.             if(x<50){
  1659.                 press(提交订单X轴,提交订单Y轴,10)
  1660.                 x++;
  1661.                 logWithTime("正在尝试提交订单");
  1662.             }
  1663.         if(x==50){
  1664.             break
  1665.             }
  1666.          }
  1667.          提交订单 = "假"
  1668.         }
  1669.         },10)
  1670.         })
  1671.         }
  1672.         if(测试 =="无"&&连续提交=="无") {
  1673.             threads.start(function(){
  1674.                 setInterval(function(){
  1675.          if (className("android.widget.TextView").text("提交订单").exists()&&className("android.widget.TextView").text("配送方式").exists()) {
  1676.                 logWithTime("正在尝试提交订单");
  1677.                 className("android.widget.TextView").text("提交订单").findOne().click();
  1678.                 logWithTime("订单已提交");            
  1679.                 }
  1680.             }, 10);
  1681.             });
  1682.             }
  1683.         threads.start(function(){
  1684.             setInterval(function(){
  1685.         if (className("android.widget.TextView").textContains("加载中").exists()) {
  1686.             if (Crowding === 0){
  1687.                 Crowding = 1
  1688.                 logWithTime("页面加载中");
  1689.                 }
  1690.                 found = true;            
  1691.             }
  1692.         }, 10);
  1693.     });


  1694.     threads.start(function(){
  1695.         setInterval(function(){
  1696.     if (className("android.widget.TextView").text("立即付款").exists()) {
  1697.         if(自动付款 == "无"){
  1698.                 logWithTime("抢购成功!请支付!");
  1699.                 found = true;
  1700.                 Success++;
  1701.                 device.cancelKeepingAwake();  
  1702.                 Panic_buying_end();            
  1703.             }}
  1704.             if(自动付款 == "有")
  1705.             {
  1706.                 click("立即付款")
  1707.             }
  1708.         }, 200);
  1709.     });
  1710.     var 密码1 = "真"
  1711.     var 密码2 = "假"
  1712.     var 密码3 = "假"
  1713.     var 密码4 = "假"
  1714.     var 密码5 = "假"
  1715.     var 密码6 = "假"
  1716.     threads.start(function(){
  1717.         setInterval(function(){
  1718.         if (className("android.widget.TextView").text("请输入支付密码").exists()) {
  1719.             if(密码1 == "真"&&className("android.widget.TextView").text(password_1).exists()){click(password_1);密码2 = "真";sleep(10)}
  1720.             if(密码2 == "真"&&className("android.widget.TextView").text(password_2).exists()){click(password_2);密码3 = "真";sleep(10)}
  1721.             if(密码3 == "真"&&className("android.widget.TextView").text(password_3).exists()){click(password_3);密码4 = "真";sleep(10)}
  1722.             if(密码4 == "真"&&className("android.widget.TextView").text(password_4).exists()){click(password_4);密码5 = "真";sleep(10)}
  1723.             if(密码5 == "真"&&className("android.widget.TextView").text(password_5).exists()){click(password_5);密码6 = "真";sleep(10)}
  1724.             if(密码6 == "真"&&className("android.widget.TextView").text(password_6).exists()){click(password_6);Panic_buying_end()}
  1725.         }
  1726.     },300)
  1727.     })
  1728.     threads.start(function(){
  1729.         setInterval(function(){
  1730.         if (className("android.view.View").desc("查看订单").findOne().parent().exists()) {
  1731.             logWithTime("支付成功!");
  1732.             Panic_buying_end()
  1733.         }
  1734.     },10)
  1735.     })  
  1736.     threads.start(function(){
  1737.         setInterval(function(){
  1738.         sleep(endTime)
  1739.         logWithTime("超出预定抢购时长,抢购结束");
  1740.         device.cancelKeepingAwake();
  1741.         Panic_buying_end();           
  1742.     }, 10);
  1743.     });  
  1744. }
  1745. //这是京东主程序
  1746. function main_tree() {
  1747.     var middle = device.width / 2 -400;      
  1748.     console.setPosition(middle, 0);
  1749.     console.setGlobalLogConfig({ "file": "/sdcard/日志.txt" });
  1750.     console.show();
  1751.     var DetailPage =0;
  1752.     var notDetailPage = 0;
  1753.     var notInDetailPage = 0

  1754.     logWithTime("欢迎使用京东秒杀助手");
  1755.     sleep(800);
  1756.     logWithTime("请勿用于非法用途");  
  1757.     sleep(800);
  1758.     logWithTime("请您进入商品详情页,否则无法进行购买!");
  1759.     sleep(800);
  1760.         
  1761.     var startTime2 = new Date(Date.parse(startTime_tree)).getTime();
  1762.     var endTime = new Date(startTime2.valueOf() + lastTime_tree* 1000).getTime();
  1763.     var Panningingtime = startTime2 - delaytime_tree;


  1764.     reviewtime();
  1765.      //判断实际时间是否大于抢购时间
  1766. function reviewtime(){
  1767.     var tt = getNow();
  1768.        if (tt > Panningingtime) {
  1769.             console.warn("您的时间已经错过了哦,请重新输入时间!");
  1770.             sleep(2000);
  1771.             console.clear();
  1772.             console.hide();
  1773.             threads.shutDownAll();
  1774.         }
  1775.        if (tt < Panningingtime){
  1776.             logWithTime("您的抢购时间为:" + formatDate(Panningingtime));
  1777.             logWithTime("距离抢购时间还剩"+(startTime2-tt)/1000+"秒"+"请耐心等待");
  1778.             }
  1779.         }
  1780.          // 检测是否在商品详情页
  1781. x = setInterval(function () {
  1782.     var t = getNow();
  1783.     if (t < Panningingtime) {
  1784.         if (className("android.widget.LinearLayout").clickable(true).depth(9).exists()) {
  1785.             if (DetailPage === 0) {
  1786.                 logWithTime("已进入商品详情页,请耐心等待...");
  1787.                 DetailPage++;
  1788.                 notDetailPage = 0
  1789.             }

  1790.         } else {
  1791.             if (notInDetailPage === 0) {
  1792.                 logWithTime("未进入商品详情页,请前往,否则无法进行购买!");
  1793.                 DetailPage = 0;
  1794.                 notInDetailPage++
  1795.             }
  1796.         }
  1797.     } else {
  1798.         not_in_Detail_Page = 0;  // 商品详情页状态复位
  1799.         clearInterval(x)
  1800.     }
  1801. }, 500);
  1802.      
  1803. z = setInterval(function () {
  1804.     var t = getNow();
  1805.     if(t >= Panningingtime && t < endTime){               
  1806.         logWithTime("开始抢购")
  1807.         京东页面();
  1808.         clearInterval(z);        
  1809.     }  
  1810.   },10)
  1811. };
  1812. function 京东页面()
  1813. {
  1814.     var endTime = lastTime_tree * 1000;
  1815.     var Crowding = 0;
  1816.     threads.start(function(){
  1817.         setInterval(function(){
  1818.             if (text("立即抢购").exists()) {
  1819.                 logWithTime("准备点击抢购");
  1820.                 click("立即抢购")
  1821.                 logWithTime("立即抢购已点击");           
  1822.              }
  1823.             },10)
  1824.         })
  1825.         threads.start(function(){
  1826.             setInterval(function(){
  1827.             if (text("立即购买").exists()) {
  1828.                 logWithTime("准备点击购买");
  1829.                 click("立即购买")
  1830.                 logWithTime("立即购买已点击");           
  1831.                 }
  1832.             },10)
  1833.         })
  1834.         threads.start(function(){
  1835.             setInterval(function(){  
  1836.             if (text("提交订单").exists()) {
  1837.                     logWithTime("页面加载中");
  1838.                     logWithTime("正在尝试提交订单");
  1839.                     click("提交订单");
  1840.                     logWithTime("订单已提交");            
  1841.                 }
  1842.             },10)
  1843.         })
  1844.         threads.start(function(){
  1845.             setInterval(function(){
  1846.             if (text("我知道了").exists()) {
  1847.                     click("我知道了")
  1848.                     Crowding++;
  1849.                     logWithTime("第" + Crowding + "次拥挤了,再试一次吧!");            
  1850.                     }
  1851.                 },10)
  1852.             })
  1853.         threads.start(function(){
  1854.             setInterval(function(){
  1855.             if (text("确定").exists()) {
  1856.                         logWithTime("准备点击确定");
  1857.                         click("确定")
  1858.                         logWithTime("确定已点击");           
  1859.                      }
  1860.                     },10)
  1861.                 })
  1862.         threads.start(function(){
  1863.             setInterval(function(){
  1864.             if (className("android.widget.TextView").text("京东收银台").exists()) {
  1865.                         logWithTime("抢购成功!请支付!");
  1866.                         device.cancelKeepingAwake();
  1867.                         Panic_buying_end();              
  1868.                     }
  1869.                 },10)
  1870.             })  
  1871.         threads.start(function(){
  1872.             setInterval(function(){
  1873.                 sleep(endTime)
  1874.                 logWithTime("超出预定抢购时长,抢购结束");
  1875.                 device.cancelKeepingAwake();
  1876.                 Panic_buying_end();
  1877.             },10)
  1878.         })                          
  1879. }
  1880.       //这是苏宁购物车主程序
  1881.       function sn购物车() {
  1882.         var middle = device.width / 2 -400;      
  1883.         console.setPosition(middle, 0);
  1884.         console.setGlobalLogConfig({ "file": "/sdcard/日志.txt" });
  1885.         console.show();
  1886.         var DetailPage =0;
  1887.         var notDetailPage = 0;
  1888.         var notInDetailPage = 0

  1889.         logWithTime("欢迎使用苏宁秒杀助手");
  1890.         sleep(800);
  1891.         logWithTime("请勿用于非法用途");  
  1892.         sleep(800);
  1893.         logWithTime("请进入购物车");
  1894.         sleep(800);
  1895.             
  1896.         var startTime2 = new Date(Date.parse(startTime)).getTime();
  1897.         var endTime = new Date(startTime2.valueOf() + lastTime * 1000).getTime();
  1898.         var Panningingtime = startTime2 + delaytime;


  1899.         reviewtime();
  1900.          //判断实际时间是否大于抢购时间
  1901.     function reviewtime(){
  1902.         var shijian = getNow();
  1903.            if (shijian > Panningingtime) {
  1904.                 console.warn("您的时间已经错过了哦,请重新输入时间!");
  1905.                 sleep(2000);
  1906.                 console.clear();
  1907.                 console.hide();
  1908.                 threads.shutDownAll();
  1909.             }
  1910.            if(shijian < Panningingtime){
  1911.                 logWithTime("您的抢购时间为:" + formatDate(Panningingtime));
  1912.                 logWithTime("距离抢购时间还剩"+(startTime2-shijian)/1000+"秒"+"请耐心等待");
  1913.                 }
  1914.             }
  1915.              // 检测是否在商品详情页
  1916.     x = setInterval(function () {
  1917.         var t = getNow();
  1918.         if (t < Panningingtime) {
  1919.             if (className("android.widget.TextView").text("购物车").exists()) {
  1920.                 if (DetailPage === 0) {
  1921.                     logWithTime("已进入购物车,请等待");
  1922.                     DetailPage++;
  1923.                     notDetailPage = 0
  1924.                 }

  1925.             } else {
  1926.                 if (notInDetailPage === 0) {
  1927.                     logWithTime("未进入购物车,请前往,否则无法进行购买!");
  1928.                     DetailPage = 0;
  1929.                     notInDetailPage++
  1930.                 }
  1931.             }
  1932.         } else {
  1933.             not_in_Detail_Page = 0;  // 商品详情页状态复位
  1934.             clearInterval(x)
  1935.         }

  1936.     }, 500);

  1937.     z = setInterval(function () {
  1938.         var t = getNow();
  1939.         if(t >= Panningingtime && t < endTime){               
  1940.             logWithTime("开始抢购")
  1941.             SN购物车();
  1942.             clearInterval(z);        
  1943.         }  
  1944.       },100)
  1945.   
  1946. };
  1947. function SN购物车()
  1948. {
  1949.     var  Crowding = 0;
  1950.     var endTime = lastTime * 1000;
  1951.          // 如果在购物车
  1952.          var 勾选 = "有"
  1953.         threads.start(function(){
  1954.         setInterval(function(){
  1955.             if(勾选 =="有"){
  1956.         if(className("android.widget.CheckBox").enabled(true).exists()){
  1957.           className("android.widget.CheckBox").enabled(true).findOne().click()
  1958.             勾选 = "无"
  1959.             click("去结算")
  1960.             click("提交订单")
  1961.         }}
  1962.         },10)
  1963.         })
  1964.        //    如果在提交订单界面
  1965.     threads.start(function(){
  1966.         setInterval(function(){
  1967.         if (className("android.widget.TextView").text("提交订单").exists()) {
  1968.             logWithTime("正在尝试提交订单");
  1969.             click("提交订单");
  1970.             logWithTime("订单已提交");
  1971.         }
  1972.         }, 10);
  1973.     });
  1974.          threads.start(function(){
  1975.             setInterval(function(){
  1976.                 if(className("android.widget.TextView").text("去结算(1)").exists()){
  1977.                     logWithTime("正在尝试结算");
  1978.                     click("去结算")
  1979.                     sleep(random(10,25))
  1980.                     logWithTime("已结算");
  1981.                   }
  1982.                   if(className("android.widget.TextView").text("去结算(2)").exists()){
  1983.                     logWithTime("正在尝试结算");
  1984.                     click("去结算")
  1985.                     sleep(random(10,25))
  1986.                     logWithTime("已结算");
  1987.                    }
  1988.                    if(className("android.widget.TextView").text("去结算(3)").exists()){
  1989.                     logWithTime("正在尝试结算");
  1990.                     click("去结算")
  1991.                     sleep(random(10,25))
  1992.                     logWithTime("已结算");
  1993.                    }
  1994.                 }, 50);
  1995.             });
  1996.             //需要领卷购买
  1997.             threads.start(function(){
  1998.                 setInterval(function(){
  1999.              if(className("android.widget.TextView").text("领券结算(1)").exists()){
  2000.                 logWithTime("正在尝试结算");
  2001.                 click("领券结算(1)")
  2002.                 sleep(random(10,25))
  2003.                 logWithTime("已结算");
  2004.              }
  2005.              if(className("android.widget.TextView").text("领券结算(2)").exists()){
  2006.                logWithTime("正在尝试结算");
  2007.                click("领券结算(2)")
  2008.                sleep(random(10,25))
  2009.                logWithTime("已结算");
  2010.              }
  2011.              if(className("android.widget.TextView").text("领券结算(3)").exists()){
  2012.                 logWithTime("正在尝试结算");
  2013.                 click("领券结算(3)")
  2014.                 sleep(random(10,25))
  2015.                 logWithTime("已结算");
  2016.              }
  2017.              }, 50);
  2018.              });
  2019.     threads.start(function(){
  2020.         setInterval(function(){
  2021.             if (className("android.widget.TextView").text("知道了").exists()) {
  2022.                 className("android.widget.TextView").text("知道了").findOne().click();
  2023.                 Crowding++;
  2024.                 logWithTime("第" + Crowding + "次拥挤了,再试一次吧!");            
  2025.             }
  2026.         }, 200);
  2027.     });   
  2028.             // 抢购成功
  2029.     threads.start(function(){
  2030.         setInterval(function(){
  2031.          if (className("android.widget.TextView").text("苏宁收银台").exists()) {
  2032.             logWithTime("抢购成功!请支付!");
  2033.             device.cancelKeepingAwake();
  2034.             Panic_buying_end()            
  2035.         }
  2036.         }, 200);
  2037.     });   
  2038.     threads.start(function(){
  2039.         setInterval(function(){
  2040.             sleep(endTime)
  2041.             logWithTime("超出预定抢购时长,抢购结束");
  2042.             device.cancelKeepingAwake();
  2043.             Panic_buying_end();
  2044.         },200)
  2045.     });   
  2046. }


  2047. //京东购物车模式
  2048. function 京东购物车() {
  2049.     var middle = device.width / 2 -400;      
  2050.     console.setPosition(middle, 0);
  2051.     console.setGlobalLogConfig({ "file": "/sdcard/日志.txt" });
  2052.     console.show();
  2053.     var DetailPage =0;
  2054.     var notDetailPage = 0;
  2055.     var notInDetailPage = 0
  2056.     var notChecked = 0

  2057.     logWithTime("欢迎使用京东秒杀助手");
  2058.     sleep(800);
  2059.     logWithTime("请勿用于非法用途");  
  2060.     sleep(800);
  2061.     logWithTime("请您进入购物车,否则无法进行购买!");
  2062.     sleep(800);
  2063.         
  2064.     var startTime2 = new Date(Date.parse(startTime_tree)).getTime();
  2065.     var endTime = new Date(startTime2.valueOf() + lastTime_tree* 1000).getTime();
  2066.     var Panningingtime = startTime2 - delaytime_tree;


  2067.     reviewtime();
  2068.      //判断实际时间是否大于抢购时间
  2069. function reviewtime(){
  2070.     var tt = getNow();
  2071.        if (tt > Panningingtime) {
  2072.             console.warn("您的时间已经错过了哦,请重新输入时间!");
  2073.             sleep(2000);
  2074.             console.clear();
  2075.             console.hide();
  2076.             threads.shutDownAll();
  2077.         }
  2078.        if (tt < Panningingtime){
  2079.             logWithTime("您的抢购时间为:" + formatDate(Panningingtime));
  2080.             logWithTime("距离抢购时间还剩"+(startTime2-tt)/1000+"秒"+"请耐心等待");
  2081.             }
  2082.         }
  2083.          // 检测是否在商品详情页
  2084. x = setInterval(function () {
  2085.     var t = getNow();
  2086.     if (t < Panningingtime) {
  2087.         if (className("android.widget.TextView").text("购物车").depth(14).exists()) {
  2088.             if (DetailPage === 0) {
  2089.                 logWithTime("已进入购物车,请耐心等待...");
  2090.                 DetailPage++;
  2091.                 notDetailPage = 0
  2092.             }

  2093.         } else {
  2094.             if (notInDetailPage === 0) {
  2095.                 logWithTime("未进入购物车,请前往,否则无法进行购买!");
  2096.                 DetailPage = 0;
  2097.                 notInDetailPage++
  2098.             }
  2099.         }
  2100.     } else {
  2101.         not_in_Detail_Page = 0;  // 商品详情页状态复位
  2102.         clearInterval(x)
  2103.     }

  2104.     if (className("android.widget.TextView").text("去结算(0)").exists()) {
  2105.         if (notChecked === 0){
  2106.             notChecked = 1
  2107.             logWithTime("检测到您未勾选商品,将自动为您勾选!");
  2108.             click("全选")
  2109.         }
  2110.         }
  2111. }, 500);
  2112.      
  2113. z = setInterval(function () {
  2114.     var t = getNow();
  2115.     if(t >= Panningingtime && t < endTime){               
  2116.         logWithTime("开始抢购")
  2117.         购物车();
  2118.         clearInterval(z);        
  2119.     }  
  2120.   },10)
  2121. };
  2122. function 购物车()
  2123. {
  2124.     var endTime = lastTime_tree * 1000;
  2125.     var Crowding = 0

  2126.     threads.start(function(){
  2127.         setInterval(function(){
  2128.     if (className("android.widget.TextView").textContains("去结算(").exists()) {   
  2129.         logWithTime("准备结算");   
  2130.         className("android.widget.TextView").textContains("去结算(").findOne().click();   
  2131.         logWithTime("已结算,准备进入提交订单页面!");
  2132.      }
  2133.     },10)
  2134.     })
  2135.     threads.start(function(){
  2136.         setInterval(function(){
  2137.     if (className("android.widget.TextView").textContains("填写订单").exists()) {
  2138.         if (Crowding === 0){
  2139.             Crowding = 1
  2140.             logWithTime("页面加载中");
  2141.             }           
  2142.         }
  2143.     }, 10);
  2144.     });
  2145.     threads.start(function(){
  2146.         setInterval(function(){
  2147.             if (className("android.widget.Button").text("提交订单").exists()) {
  2148.                 logWithTime("正在尝试提交订单");
  2149.                 className("android.widget.Button").text("提交订单").findOne().click();
  2150.                 logWithTime("订单已提交!");        
  2151.                 }
  2152.         },10)
  2153.     })

  2154.         threads.start(function(){
  2155.             setInterval(function(){
  2156.             if (className("android.widget.TextView").text("京东收银台").exists()) {
  2157.                         logWithTime("抢购成功!请支付!");
  2158.                         device.cancelKeepingAwake();
  2159.                         Panic_buying_end();              
  2160.                     }
  2161.                 },10)
  2162.             })  
  2163.         threads.start(function(){
  2164.             setInterval(function(){
  2165.                 sleep(endTime)
  2166.                 logWithTime("超出预定抢购时长,抢购结束");
  2167.                 device.cancelKeepingAwake();
  2168.                 Panic_buying_end();
  2169.             },10)
  2170.         })                          
  2171. }


  2172. //京东BP链接
  2173. function 京东BP链接() {
  2174.     var middle = device.width / 2 -400;      
  2175.     console.setPosition(middle, 0);
  2176.     console.setGlobalLogConfig({ "file": "/sdcard/日志.txt" });
  2177.     console.show();
  2178.     var DetailPage =0;
  2179.     var notDetailPage = 0;
  2180.     var notInDetailPage = 0
  2181.     var notChecked = 0

  2182.     logWithTime("欢迎使用京东秒杀助手");
  2183.     sleep(800);
  2184.     logWithTime("请勿用于非法用途");  
  2185.     sleep(800);
  2186.     logWithTime("请您确认已打开BP链接,否则无法进行购买!");
  2187.     sleep(800);
  2188.         
  2189.     var startTime2 = new Date(Date.parse(startTime_tree)).getTime();
  2190.     var endTime = new Date(startTime2.valueOf() + lastTime_tree* 1000).getTime();
  2191.     var Panningingtime = startTime2 - delaytime_tree;


  2192.     reviewtime();
  2193.      //判断实际时间是否大于抢购时间
  2194. function reviewtime(){
  2195.     var tt = getNow();
  2196.        if (tt > Panningingtime) {
  2197.             console.warn("您的时间已经错过了哦,请重新输入时间!");
  2198.             sleep(2000);
  2199.             console.clear();
  2200.             console.hide();
  2201.             threads.shutDownAll();
  2202.         }
  2203.        if (tt < Panningingtime){
  2204.             logWithTime("您的抢购时间为:" + formatDate(Panningingtime));
  2205.             logWithTime("距离抢购时间还剩"+(startTime2-tt)/1000+"秒"+"请耐心等待");
  2206.             }
  2207.         }
  2208.          // 检测是否在商品详情页
  2209. x = setInterval(function () {
  2210.     var t = getNow();
  2211.     if (t < Panningingtime) {
  2212.         if (className("android.widget.TextView").text("确认订单").depth(11).exists()) {
  2213.             if (DetailPage === 0) {
  2214.                 logWithTime("已进入BP链接,请耐心等待...");
  2215.                 DetailPage++;
  2216.                 notDetailPage = 0
  2217.             }

  2218.         } else {
  2219.             if (notInDetailPage === 0) {
  2220.                 logWithTime("未进入BP链接,请前往,否则无法进行购买!");
  2221.                 DetailPage = 0;
  2222.                 notInDetailPage++
  2223.             }
  2224.         }
  2225.     } else {
  2226.         not_in_Detail_Page = 0;  // 商品详情页状态复位
  2227.         clearInterval(x)
  2228.     }
  2229. }, 500);
  2230.      
  2231. z = setInterval(function () {
  2232.     var t = getNow();
  2233.     if(t >= Panningingtime && t < endTime){               
  2234.         logWithTime("开始抢购")
  2235.         bp支付()
  2236.         clearInterval(z);        
  2237.     }  
  2238.   },10)
  2239. };
  2240. function bp支付()
  2241. {
  2242.     var endTime = lastTime_tree * 1000;

  2243.     threads.start(function(){
  2244.         setInterval(function(){
  2245.         if(className("android.view.View").text("微信支付").exists()){
  2246.             logWithTime("准备点击微信支付");
  2247.             className("android.view.View").text("微信支付").findOne().click()
  2248.             logWithTime("已点击微信支付");
  2249.             }
  2250.     },10)
  2251.     })

  2252.         threads.start(function(){
  2253.             setInterval(function(){
  2254.             if (className("android.view.ViewGroup").depth(17).exists()) {
  2255.                         logWithTime("抢购成功!请支付!");
  2256.                         device.cancelKeepingAwake();
  2257.                         Panic_buying_end();              
  2258.                     }
  2259.                 },10)
  2260.         })  
  2261.         threads.start(function(){
  2262.             setInterval(function(){
  2263.                 sleep(endTime)
  2264.                 logWithTime("超出预定抢购时长,抢购结束");
  2265.                 device.cancelKeepingAwake();
  2266.                 Panic_buying_end();
  2267.             },10)
  2268.         })                          
  2269. }

  2270. function 获取坐标(){
  2271.     console.show()
  2272.     console.info("请前往提交订单页面,否则无法获取坐标!")
  2273.     sleep(1000)
  2274.     console.info("30秒内未进入提交订单页面,获取坐标就会自动停止!")
  2275.     var 找按钮 = "有"
  2276.     threads.start(function(){
  2277.     setInterval(function(){
  2278.         if(className("android.widget.TextView").text("提交订单").exists()&&找按钮=="有"){
  2279.         var 提交订单= className("android.widget.TextView").text("提交订单").findOne()
  2280.         console.info("您的X轴坐标是:"+提交订单.bounds().centerX(),"\n您的Y轴坐标是:"+提交订单.bounds().centerY())
  2281.         找按钮="无"
  2282.         console.info("获取坐标成功!")
  2283.         threads.shutDownAll();
  2284.         }
  2285.     }, 100);
  2286.     });

  2287.     threads.start(function(){
  2288.         setInterval(function(){
  2289.             sleep(30000)
  2290.             console.info("获取坐标超时,已停止!")
  2291.             console.clear();
  2292.             console.hide();
  2293.             threads.shutDownAll();
  2294.             device.cancelKeepingAwake();   
  2295.         }, 100);
  2296.         });
  2297.     }
  2298. //=====================================================================================拼多多
  2299. ui.pinduoduo.on("click", () => {
  2300.     "ui";
  2301.     var ColoredButton = (function() {
  2302.         //继承ui.Widget
  2303.         util.extend(ColoredButton, ui.Widget);
  2304.      
  2305.         function ColoredButton() {
  2306.             //调用父类构造函数
  2307.             ui.Widget.call(this);
  2308.             //自定义属性color,定义按钮颜色
  2309.             this.defineAttr("color", (view, name, defaultGetter) => {
  2310.                 return this._color;
  2311.             }, (view, name, value, defaultSetter) => {
  2312.                 this._color = value;
  2313.                 view.attr("backgroundTint", value);
  2314.             });
  2315.      
  2316.         }
  2317.         ColoredButton.prototype.render = function() {
  2318.             return (
  2319.                 <button textSize="16sp" style="Widget.AppCompat.Button.Colored" w="*" h="auto"/>
  2320.             );
  2321.         }
  2322.      
  2323.         ui.registerWidget("colored-button", ColoredButton);
  2324.         return ColoredButton;
  2325.     })();
  2326.     var color = "#009688";
  2327.     ui.statusBarColor("#ff4040")
  2328.     ui.layout(
  2329.         <drawer id="drawer" >
  2330.             <vertical>
  2331.                 <appbar>
  2332.                     <toolbar  id="toolbar"paddingTop="5dp" title="拼多多"  bg="#ff4040" />
  2333.                 </appbar>
  2334.             
  2335.                 <viewpager id="viewpager">
  2336.                     //拼多多界面
  2337.                     <frame> //start
  2338.                     <ScrollView>
  2339.                     <vertical>
  2340.                     <Switch id="autoService" text="无障碍服务" checked="{{auto.service != null}}" padding="8 8 8 8" textSize="13sp"/>
  2341.                     <text textSize="13sp" id="networkTesttwo" textColor="#ff0000" margin="0 5" text="点击校准拼多多时间!"/>
  2342.      
  2343.                     <radiogroup orientation="horizontal">
  2344.                     <radio id="model_pdd" text="抢券模式" checked="true"/>
  2345.                     </radiogroup>
  2346.      
  2347.                     <horizontal>
  2348.                     <text textSize="13sp" textColor="black" text="提前抢购时间"/>
  2349.                     <input id="delaytime_pdd" textColor="gray" inputType="number" text="200" w="80"/>
  2350.                     <text textSize="13sp" textColor="black" text="毫秒"  />
  2351.                     </horizontal>
  2352.      
  2353.                     <horizontal>
  2354.                     <text textSize="13sp" textColor="black" text="页面抢券频率" />
  2355.                     <input id="pinlv_pdd" textColor="gray" inputType="number" text="10" w="80"/>
  2356.                     <text textSize="13sp" textColor="black" text="毫秒"  />
  2357.                     </horizontal>
  2358.      
  2359.                     <horizontal>
  2360.                     <text textSize="13sp" textColor="black" text="抢购持续时间" />
  2361.                     <input id="lastTime_pdd" textColor="gray" inputType="number" text="10" w="80"/>
  2362.                     <text textSize="13sp" textColor="black" text="秒"  />
  2363.                     </horizontal>
  2364.      
  2365.                     <text  textSize="13sp" textColor="black" text="请输入抢购时间,格式为:2020/04/14 12:00:00"/>
  2366.                     <input hint="请输入抢购时间,格式必须正确" textColor="gray" id="startTime_pdd" />
  2367.                     //定义按钮的大小颜色和文本
  2368.                     <colored-button  id="ok_pdd"      layout_gravity="center"      color="#ff5500"  text="开始运行"/>                                
  2369.                     </vertical>                                                                                
  2370.                     </ScrollView>
  2371.                     </frame> //end
  2372.      
  2373.                 </viewpager>        
  2374.             </vertical>
  2375.         </drawer>
  2376.     );
  2377.      
  2378.     //这里是无障碍触发方式
  2379.     ui.autoService.on("check", function(checked) {
  2380.         // 用户勾选无障碍服务的选项时,跳转到页面让用户去开启
  2381.         if(checked && auto.service == null) {
  2382.          app.startActivity({
  2383.          action: "android.settings.ACCESSIBILITY_SETTINGS"  }); }
  2384.           if(!checked && auto.service != null){
  2385.          auto.service.disableSelf();    }    });
  2386.        // 当用户回到本界面时,resume事件会被触发
  2387.          ui.emitter.on("resume", function() {
  2388.         // 此时根据无障碍服务的开启情况,同步开关的状态
  2389.         ui.autoService.checked = auto.service != null;    });
  2390.      
  2391.          // 获取时分秒用于记录日志
  2392.          function logWithTime(msg) {
  2393.             console.info(formatDate(getNow()) + " " + msg);
  2394.            }
  2395.         
  2396.            // 获取时分秒用于记录日志
  2397.         function logWithTime(msg) {
  2398.             console.info(formatDate(getNow()) + " " + msg);
  2399.            }
  2400.         
  2401.            // 检测淘宝网络延迟和时间偏差
  2402.            var NTP = {
  2403.            requiredResponses: 3,
  2404.            serverTimes: [],//服务器时间
  2405.            serverDelay: [],//服务器延迟
  2406.            serverUrl: "http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp",
  2407.            resyncTime: 0, // minutes
  2408.            sync: function () {
  2409.                var offset = storage.get("NTPClockOffset");//获取时钟偏移
  2410.                if (offset) {
  2411.                    try {
  2412.                        var t = offset.split("|")[1];
  2413.                        var d = NTP.fixTime() - parseInt(t, 10);
  2414.                        if (d < (1000 * 60 * NTP.resyncTime)) {
  2415.                            return false;
  2416.                        }
  2417.                    } catch (e) {
  2418.                    }
  2419.                }
  2420.                NTP.getServerTime();
  2421.            },
  2422.            getNow: function () {
  2423.                var date = new Date();
  2424.                return date.getTime();
  2425.            },
  2426.            //分析服务器响应
  2427.            parseServerResponse: function (data) {
  2428.                var NtpStartTime = storage.get("NtpStartTime");
  2429.                var NtpStopTime = NTP.getNow();
  2430.                var origtime = parseInt(data.data.t);//起始时间
  2431.                var delay = ((NtpStopTime - NtpStartTime) / 2);//延迟
  2432.                var offset = NtpStopTime - origtime - delay;//抵消
  2433.                NTP.serverTimes.push(offset);
  2434.                NTP.serverDelay.push(delay);
  2435.         
  2436.                // 因为网络问题,需要多次获取偏移值,获取平均值
  2437.                if (NTP.serverTimes.length >= NTP.requiredResponses) {
  2438.                    var sumOffset = 0;
  2439.                    var sumDelay = 0;
  2440.                    var i = 0;
  2441.                    for (i = 0; i < NTP.serverTimes.length; i++) {
  2442.                        sumOffset += NTP.serverTimes[i];
  2443.                        sumDelay += NTP.serverDelay[i];
  2444.                    }
  2445.                    var averageOffset = Math.round(sumOffset / i);
  2446.                    var averageDelay = Math.round(sumDelay / i);
  2447.                    storage.put("NTPClockOffset", averageOffset + '|' + NTP.fixTime()); // 保存获得offset时的时间戳
  2448.                    storage.put("NTPClockDelay", averageDelay); // 保存获得offset时的时间戳
  2449.                } else {
  2450.                    NTP.getServerTime();
  2451.                }
  2452.            },
  2453.            //获取服务器时间并判断是否获取成功
  2454.            getServerTime: function () {
  2455.                var NtpStartTime = NTP.getNow();
  2456.                storage.put("NtpStartTime", NtpStartTime);
  2457.                var res = http.get(NTP.serverUrl);
  2458.                if (res.statusCode !== 200) {
  2459.                    toast("获取网络时间失败: " + res.statusCode + " " + res.statusMessage);
  2460.                    return false;
  2461.                } else {
  2462.                    NTP.parseServerResponse(res.body.json());
  2463.                }
  2464.            },
  2465.            //固定时间
  2466.            fixTime: function (timeStamp) {
  2467.                if (!timeStamp) {
  2468.                    timeStamp = NTP.getNow();
  2469.                }
  2470.                var offset = storage.get("NTPClockOffset");
  2471.                try {
  2472.                    if (!offset) {
  2473.                        offset = 0;
  2474.                    } else {
  2475.                        offset = offset.split("|")[0];
  2476.                    }
  2477.                    if (isNaN(parseInt(offset, 10))) {
  2478.                        return timeStamp;
  2479.                    }
  2480.                    return timeStamp + parseInt(offset, 10);
  2481.                } catch (e) {
  2482.                    return timeStamp;
  2483.                }
  2484.            }
  2485.        };
  2486.         
  2487.         
  2488.         
  2489.         
  2490.            // 获取默认开始时间
  2491.            function getTime() {
  2492.                var fmt = "YYYY-MM-dd hh:mm:ss";
  2493.                var d = new Date();
  2494.                var hh = d.getHours();
  2495.                var mm = d.getMinutes();
  2496.                var ss = d.getSeconds();
  2497.                if (mm < 30) {
  2498.                 mm = 30
  2499.                 ss = 00
  2500.                }
  2501.                else{
  2502.                 hh+=1
  2503.                 mm = 00
  2504.                 ss = 00      
  2505.                }
  2506.                
  2507.                var o = {
  2508.                    "Y+": d.getYear() + 1900,
  2509.                    "M+": d.getMonth() + 1,
  2510.                    "d+": d.getDate(),
  2511.                    "h+": hh,
  2512.                    // "m+": d.getMinutes(),
  2513.                    // "s+": d.getSeconds()
  2514.                    "m+": mm,
  2515.                    "s+": ss
  2516.                };
  2517.                for (var k in o) {
  2518.                    if (new RegExp("(" + k + ")").test(fmt)) {
  2519.                        fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 4) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  2520.                    }
  2521.                }
  2522.                fmt = fmt.replace(/-/g, '/');
  2523.                return fmt;
  2524.              };
  2525.         
  2526.                 //定义初始化界面数据
  2527.                 var storage = storages.create("拼多多");
  2528.                 threads.start(NTP.sync);
  2529.      
  2530.                  //初始化淘宝界面
  2531.            setTimeout(initConfig_pdd, 500);
  2532.            function initConfig_pdd() {     
  2533.             NTPClockOffset = storage.get("NTPClockOffset", "0");
  2534.             NTPClockDelay = storage.get("NTPClockDelay", "0");
  2535.             if (!NTPClockOffset) {
  2536.             NTPClockOffset = 0;
  2537.             } else {
  2538.             NTPClockOffset = parseInt(NTPClockOffset.split("|")[0]);
  2539.             }  
  2540.                ui.startTime_pdd.setText(getTime());
  2541.                ui.pinlv_pdd.setText(storage.get("pinlv_pdd", "100").toString());
  2542.                ui.lastTime_pdd.setText(storage.get("lastTime_pdd", "10").toString());   
  2543.                ui.delaytime_pdd.setText(storage.get("delaytime_pdd", "200").toString());  
  2544.              }
  2545.               
  2546.                 // 时间戳转时间字符串
  2547.                 function add0(m) {
  2548.                     return m < 10 ? '0' + m : m
  2549.                 }
  2550.                 function getNow() {
  2551.                     var now = new Date().getTime();
  2552.                     return now - NTPClockOffset;
  2553.                 }
  2554.             
  2555.                 function formatDate(needTime) {
  2556.                     //needTime是整数,否则要parseInt转换
  2557.                     var time = new Date(parseInt(needTime));
  2558.                     var h = time.getHours();
  2559.                     var mm = time.getMinutes();
  2560.                     var s = time.getSeconds();
  2561.                     var S = time.getMilliseconds();
  2562.                     return add0(h) + ':' + add0(mm) + ':' + add0(s)+":"+add0(S);
  2563.                 }
  2564.             
  2565.             
  2566.                   // 检测时间字符串是否有效
  2567.                 function strDateTime(str) {
  2568.                     var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;
  2569.                     var r = str.match(reg);
  2570.                     if (r == null) return false;
  2571.                     var d = new Date(r[1], r[3] - 1, r[4], r[5], r[6], r[7]);
  2572.                     return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4] && d.getHours() == r[5] && d.getMinutes() == r[6] && d.getSeconds() == r[7]);
  2573.                 }
  2574.             
  2575.                // 淘宝程序主要逻辑
  2576.           ui.ok_pdd.click(function () {
  2577.             // 检查无障碍服务
  2578.             if (auto.service == null) {
  2579.                    toast("请先开启无障碍服务!");
  2580.                    return;
  2581.                }
  2582.                //接收界面数据
  2583.                    startTime_pdd = ui.startTime_pdd.getText().toString();
  2584.                    pinlv_pdd = parseInt(ui.pinlv_pdd.getText());
  2585.                    lastTime_pdd = parseInt(ui.lastTime_pdd.getText());
  2586.                    delaytime_pdd = parseInt(ui.delaytime_pdd.getText());
  2587.                    if (!strDateTime(startTime_pdd)) {
  2588.                        ui.startTime_pdd.setError("日期错误,请重新输入!");
  2589.                        return;
  2590.                    }
  2591.                    //传递界面数据      
  2592.                    storage.put("pinlv_pdd", pinlv_pdd);
  2593.                    storage.put("lastTime_pdd", lastTime_pdd);
  2594.                    storage.put("delaytime_pdd", delaytime_pdd);
  2595.             
  2596.                    //按下开始运行
  2597.                      if(ui.ok_pdd.getText()=="开始运行") {
  2598.                        ui.ok_pdd.setText("停止运行");   
  2599.                        threads.start(拼多多);
  2600.                        device.keepScreenOn()//保持屏幕常亮
  2601.                    }else{
  2602.                        ui.ok_pdd.setText("开始运行");
  2603.                        console.clear();
  2604.                        console.hide();
  2605.                        threads.shutDownAll();
  2606.                        device.cancelKeepingAwake();   
  2607.                        }         
  2608.            });
  2609.     function 拼多多(){
  2610.         var middle = device.width / 2 -400;      
  2611.         console.setPosition(middle, 0);
  2612.         console.setGlobalLogConfig({ "file": "/sdcard/日志.txt" });
  2613.         console.show();
  2614.         var DetailPage =0;
  2615.         var notDetailPage = 0;
  2616.         var notInDetailPage = 0
  2617.      
  2618.         logWithTime("欢迎使用拼多多抢券模式!");
  2619.         sleep(800);
  2620.         logWithTime("请勿用于非法用途");  
  2621.         sleep(800);
  2622.         logWithTime("请打开拼多多,并进入需要抢购商品的详情页!");
  2623.         sleep(800);
  2624.         var startTime_pdd1 = new Date(Date.parse(startTime_pdd)).getTime();
  2625.         var endTime = new Date(startTime_pdd1.valueOf() + lastTime_pdd * 1000).getTime();
  2626.         var Panningingtime = startTime_pdd1 - delaytime_pdd;
  2627.          
  2628.          
  2629.         reviewtime();
  2630.          //判断实际时间是否大于抢购时间
  2631.     function reviewtime(){
  2632.         var tt = getNow();
  2633.            if (tt > Panningingtime) {
  2634.                 console.warn("您的时间已经错过了哦,请重新输入时间!");
  2635.                 sleep(2000);
  2636.                 console.clear();
  2637.                 console.hide();
  2638.                 threads.shutDownAll();
  2639.             }
  2640.            if (tt < Panningingtime){
  2641.                 logWithTime("您的抢券时间为:" + formatDate(Panningingtime));
  2642.                 logWithTime("距离抢券时间还剩"+(startTime_pdd1-tt)/1000+"秒"+"请耐心等待");
  2643.                 }
  2644.             }
  2645.              // 检测是否在商品详情页
  2646.     x = setInterval(function () {
  2647.         var t = getNow();
  2648.         if (t < Panningingtime) {
  2649.             if (className("android.widget.RelativeLayout").depth(6).drawingOrder(9).exists()) {
  2650.                 if (DetailPage === 0) {
  2651.                     logWithTime("已进入商品详情页,请等待......");
  2652.                     DetailPage++;
  2653.                     notDetailPage = 0
  2654.                 }
  2655.      
  2656.             } else {
  2657.                 if (notInDetailPage === 0) {
  2658.                     logWithTime("未进入商品详情页,请进入,否则进行抢券!");
  2659.                     DetailPage = 0;
  2660.                     notInDetailPage++
  2661.                 }
  2662.             }
  2663.         } else {
  2664.             not_in_Detail_Page = 0;  // 商品详情页状态复位
  2665.             clearInterval(x)
  2666.         }
  2667.     }, 500);
  2668.      
  2669.     z = setInterval(function () {
  2670.         var t = getNow();
  2671.         if(t >= Panningingtime && t < endTime){               
  2672.             logWithTime("开始抢券")
  2673.             开始抢券()
  2674.             clearInterval(z);        
  2675.         }  
  2676.       },10)      
  2677.     }
  2678.      
  2679.     function 开始抢券()
  2680.     {
  2681.         var 频率 = ui.pinlv_pdd.text()
  2682.         var endTime = lastTime_pdd * 1000;
  2683.          
  2684.      
  2685.         threads.start(function(){
  2686.             setInterval(function(){
  2687.         if(className("android.widget.TextView").text("领取").depth(8).drawingOrder(3).exists())
  2688.         {
  2689.             className("android.widget.TextView").text("领取").depth(8).drawingOrder(3).click()
  2690.         }
  2691.         },频率);
  2692.         });
  2693.      
  2694.         threads.start(function(){
  2695.             setInterval(function(){
  2696.                 sleep(endTime)
  2697.                 logWithTime("超出预定抢购时长,抢购结束");
  2698.                 device.cancelKeepingAwake();
  2699.                 Panic_buying_end();                  
  2700.         },频率)
  2701.     })
  2702.     }
  2703.     });
  2704.      
  2705.     function Panic_buying_end(){   
  2706.         device.cancelKeepingAwake()//关闭屏幕常亮
  2707.         logWithTime("本次抢购结束");
  2708.         threads.shutDownAll()
  2709.     }
复制代码
1

上一篇:TTL刷机那位朋友知道这是什么意思
下一篇:目前最好的4k电视品牌有哪些 真4K电视品牌推荐
推荐
发表于 2020-11-5 20:58 来自ZNDS手机版 | 只看该作者
自古二楼出傻B。
回复 支持 1 反对 0

使用道具 举报

推荐
发表于 2020-11-4 15:55 | 只看该作者
感谢楼主分享~
回复 支持 1 反对 0

使用道具 举报

沙发
发表于 2020-11-4 14:57 | 只看该作者
偷偷留着自己用吧,不敢给败家娘们
回复 支持 反对

使用道具 举报

地板
发表于 2020-11-4 21:17 来自ZNDS手机版 | 只看该作者
好东西,值得信赖啊啊啊啊啊啊啊
回复 支持 反对

使用道具 举报

5#
发表于 2020-11-5 01:47 来自ZNDS手机版 | 只看该作者
看看
回复 支持 反对

使用道具 举报

6#
发表于 2020-11-5 09:31 来自ZNDS手机版 | 只看该作者
感谢楼主分享,双十一抢福利了。
回复 支持 反对

使用道具 举报

7#
发表于 2020-11-5 19:24 | 只看该作者
谢谢分享
回复 支持 反对

使用道具 举报

8#
发表于 2020-11-5 20:18 | 只看该作者
改好价格监管计划计划
回复 支持 反对

使用道具 举报

10#
发表于 2020-11-5 21:56 来自ZNDS手机版 | 只看该作者
试试
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|新帖|标签|软件|Sitemap|ZNDS智能电视网 ( 苏ICP备2023012627号 )

网络信息服务信用承诺书 | 增值电信业务经营许可证:苏B2-20221768 丨 苏公网安备 32011402011373号

GMT+8, 2024-4-26 17:07 , Processed in 0.151287 second(s), 16 queries , Redis On.

Powered by Discuz!

监督举报:report#znds.com (请将#替换为@)

© 2007-2024 ZNDS.Com

快速回复 返回顶部 返回列表