主頁 > 軟體設計 > 活動js代碼[擼貓]

活動js代碼[擼貓]

2020-11-04 17:04:20 軟體設計

//=================================================================================
var 連續提交 = “無”
ui.lianxutijiao.on(“check”, (checked)=>{
if(checked){
連續提交= “有”
toast(“已開啟連續提交功能,此功能必須填寫坐標!”);
}
else
{
連續提交 = “無”
}
});
ui.zuobiao.click(function () {
if(ui.zuobiao.getText()==“點擊獲取坐標”) {
ui.zuobiao.setText(“取消獲取坐標”);
threads.start(獲取坐標);
device.keepScreenOn()//保持螢屏常亮
}else{
ui.zuobiao.setText(“點擊獲取坐標”);
console.clear();
console.hide();
threads.shutDownAll();
device.cancelKeepingAwake();
}
})

ui.taobao.on(“click”,function(){
app.openUrl(“https://docs.qq.com/doc/DU0pSZ3BTWXl4U1pk”)
})
ui.jingdong.on(“click”,function(){
app.openUrl(“https://docs.qq.com/doc/DU0pSZ3BTWXl4U1pk”)
})
var 開啟重繪 = “無”
var 提前重繪 = “無”
ui.shuaxin.on(“check”, (checked)=>{
if(checked){
開啟重繪= “有”
提前重繪 = “有”
toast(“已開啟購物車自動重繪功能!”);
}
else
{
開啟重繪 = “無”
提前重繪 = “無”
}
});
var 自動付款 = “無”
ui.pay1.on(“check”, (checked)=>{
if(checked){
自動付款= “有”
toast(“已開啟自動付款”);
}
else
{
自動付款 = “無”
}
});

var 自動勾選 = “無”
var 手動勾選 = “有”
ui.jiance.on(“check”, (checked)=>{
if(checked){
自動勾選= “有”
toast(“已開啟自動勾選商品,并檢測價格進行結算!”);
手動勾選 = “無”
}
else
{
自動勾選 = “無”
}
});
//淘寶密碼隱藏
ui.bt1.on(“check”, (checked)=>{
if (ui.bt1.getText() == “隱藏密碼”) {
ui.bt1.setText(“顯示密碼”);
ui.h.visibility = 8;
toast(“密碼已隱藏!”);
} else {
ui.bt1.setText(“隱藏密碼”);
ui.h.visibility = 0;
toast(“密碼已顯示!”);
}
});

var 平臺類別2=“蘇寧頁面”
ui.model_one.on(“check”, (checked)=>{
if(checked){
平臺類別2=“蘇寧頁面”
toast(“已切換到蘇寧頁面搶購模式”)
}
});
ui.model_two.on(“check”, (checked)=>{
if(checked){
平臺類別2=“蘇寧購物車”
toast(“已切換到蘇寧購物車搶購模式”)
}
});

var 平臺類別=“京東頁面”
ui.model_tree.on(“check”, (checked)=>{
if(checked){
平臺類別=“京東頁面”
toast(“已切換到京東頁面搶購模式”)
}
});
ui.model_four.on(“check”, (checked)=>{
if(checked){
平臺類別=“京東購物車”
toast(“已切換到京東購物車搶購模式”)
}
});
ui.model_five.on(“check”, (checked)=>{
if(checked){
平臺類別=“京東BP鏈接”
toast(“已切換到京東BP鏈接搶購模式”)
}
});

var 測驗 = “無”
ui.ceshi.on(“check”, (checked)=>{
if(checked){
測驗 = “有”
}
else
{
測驗 = “無”
}
});
//創建選項選單(右上角)
ui.emitter.on(“create_options_menu”, menu=>{
menu.add(“日志”);
menu.add(“關于”);
});
//監聽選項選單點擊
ui.emitter.on(“options_item_selected”, (e, item)=>{
switch(item.getTitle()){
case “關于”:
alert(“關于”, “使用方法、問題反饋、版本更新,請咨詢微信客服:baohuikf”);
break;
case “日志”:
app.startActivity(“console”);
break;
}
e.consumed = true;
});
activity.setSupportActionBar(ui.toolbar);

//設定滑動頁面的標題
ui.viewpager.setTitles(["淘寶","京東","蘇寧","其他"]);
//讓滑動頁面和標簽欄聯動
ui.tabs.setupWithViewPager(ui.viewpager);
//讓工具列左上角可以打開側拉選單
ui.toolbar.setupWithDrawer(ui.drawer);

ui.menu.setDataSource([
    {
     title: "咨詢微信客服:baohuikf",
        icon: "@drawable/ic_favorite_black_48dp"
},
     
{
     title: "使用教程",
        icon: "@drawable/ic_description_black_48dp"
},


{
     title: "退出",
     icon: "@drawable/ic_exit_to_app_black_48dp"
},

]);

    ui.menu.on("item_click", item =>{
     switch(item.title){
        case"咨詢微信客服:baohuikf":
        app.openUrl("https://resoumen.com/a/qg/wx.png"); 
 }
});
     
ui.menu.on("item_click", item =>{
    switch(item.title){
        case"使用教程":
        app.openUrl("https://docs.qq.com/doc/DU0pSZ3BTWXl4U1pk");
}
});


ui.menu.on("item_click", item => {
    switch(item.title){
        case "退出":
        ui.finish();
        break;
}
});


//這里是無障礙觸發方式
ui.autoService.on("check", function(checked) {
// 用戶勾選無障礙服務的選項時,跳轉到頁面讓用戶去開啟 
if(checked && auto.service == null) { 
 app.startActivity({
 action: "android.settings.ACCESSIBILITY_SETTINGS"  }); } 
  if(!checked && auto.service != null){ 
 auto.service.disableSelf();    }    }); 

// 當用戶回到本界面時,resume事件會被觸發
ui.emitter.on(“resume”, function() {
// 此時根據無障礙服務的開啟情況,同步開關的狀態
ui.autoService.checked = auto.service != null; });
//開啟懸浮窗權限
ui.overlayService.on(“check”, function (checked) {
// 用戶勾選無障礙服務的選項時,跳轉到頁面讓用戶去開啟
if (checked) {
int = app.startActivity({
packageName: “com.android.settings”,
className: “com.android.settings.Settings$AppDrawOverlaySettingsActivity”,
data: “package:” + auto.service.getPackageName().toString()
});
toast(“請打開懸浮窗開關”);
}

 if (!checked && auto.service != null) {
     auto.service.disableSelf();
     toast("已關閉懸浮窗權限");
     }
});


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

var color = “#009688”;
ui.statusBarColor("#ff4040")
ui.layout(



<toolbar id=“toolbar"paddingTop=“5dp” title=“聚劃算百億補貼模式” bg=”#ff4040" />

        <viewpager id="viewpager">
            //這是聚劃算百億補貼界面
            <frame> //start
            <ScrollView>
            <vertical>
            <Switch id="autoService" text="無障礙服務" checked="{{auto.service != null}}" padding="8 8 8 8" textSize="13sp"/>
            {/* <Switch id="overlayService" text="懸浮窗權限" checked="{{auto.service != null}}" padding="8 8 8 8"textSize="13sp" />  */}
            <text textSize="13sp" id="networkTesttwo" textColor="#ff0000" margin="0 5" text="點擊校準淘寶時間!"/>

            <radiogroup orientation="horizontal">
            <checkbox id ="pay1" text="自動付款"/>
                            <checkbox id ="bt1" text="隱藏密碼" checked="false"/>
            <checkbox id ="tijiao" text="檢測提交價格"/>
            </radiogroup>
            
            <horizontal>
            <text id="lianjie" text="請輸入聚劃算商品BP鏈接!支持聚劃算百億補貼!如何獲取BP鏈接請點擊我!" textColor="#ff0000" w="auto" />
            </horizontal>


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

        
            <horizontal>
            <text textSize="13sp" textColor="black" text="提前搶購時間"/>
            <input id="delaytime_two" textColor="gray" inputType="number" text="700" w="80"/>
            <text textSize="13sp" textColor="black" text="毫秒"  />
            </horizontal>

            <horizontal>
            <text textSize="13sp" textColor="black" text="提交訂單頻率"  />
            <input id="interval" textColor="gray" inputType="number" text="100" w="80"/>
            <text textSize="13sp" textColor="black" text="毫秒"  />
            </horizontal>

            <horizontal>
            <text textSize="13sp" textColor="black" text="搶購持續時間" />
            <input id="lastTime_two" textColor="gray" inputType="number" text="10" w="80"/>
            <text textSize="13sp" textColor="black" text="秒"  />
            </horizontal>

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

            <linear id="h" layout_gravity="center">                         
            <horizontal>
            <text textSize="13sp" textColor="black" text="支付密碼:" />
            <input id="password_1" textColor="gray"  text="*" w="45"/>
            <input id="password_2" textColor="gray"  text="*" w="45"/>
            <input id="password_3" textColor="gray"  text="*" w="45"/>
            <input id="password_4" textColor="gray"  text="*" w="45"/>
            <input id="password_5" textColor="gray"  text="*" w="45"/>
            <input id="password_6" textColor="gray"  text="*" w="45"/>
            </horizontal>
            </linear>

            <text  textSize="13sp" textColor="black" text="請輸入搶購時間,格式為:2020/04/14 12:00:00"/> 
            <input hint="請輸入搶購時間,格式必須正確" textColor="gray" id="startTime_two" /> 
            //定義按鈕的大小顏色和文本
            <colored-button  id="ok_two"      layout_gravity="center"      color="#ff5500"  text="開始運行"/>
            <colored-button  id="fastTbUrlOpen"       layout_gravity="center"     color="#ff5500"  text="點擊跳轉"/>
            </vertical>
            </ScrollView>
            </frame> //end

        </viewpager>        
    </vertical>
</drawer>

);

ui.lianjie.on(“click”,function(){
app.openUrl(“https://docs.qq.com/doc/DU0pSZ3BTWXl4U1pk”)
})
//BP跳轉
ui.fastTbUrlOpen.on(“click”, () => {
if(ui.id1.text() ==""){
toast(“請輸入聚劃算商品的BP鏈接!”)
}
else {
var url = ui.id1.text();
app.startActivity({
action: “android.intent.action.VIEW”,
data: “taobao://” + url,
packageName: “com.taobao.taobao”,
});
}
});
var 不提交訂單 = “無”
var 提交訂單 = “有”
ui.tijiao.on(“check”, (checked)=>{
if(checked){
不提交訂單 = “有”
提交訂單 = “無”
toast(“檢測商品提交價格,大于預定價格不提交!”);
}
else
{
不提交訂單 = “無”
提交訂單 = “有”
}
});
//密碼隱藏
ui.bt1.on(“check”, (checked)=>{
if (ui.bt1.getText() == “隱藏密碼”) {
ui.bt1.setText(“顯示密碼”);
ui.h.visibility = 8;
toast(“密碼已隱藏!”);
} else {
ui.bt1.setText(“隱藏密碼”);
ui.h.visibility = 0;
toast(“密碼已顯示!”);
}
});
//自動付款
var 自動付款 = “無”
ui.pay1.on(“check”, (checked)=>{
if(checked){
自動付款= “有”
toast(“已開啟自動付款”);
}
else
{
自動付款 = “無”
}
});

//這里是無障礙觸發方式
ui.autoService.on(“check”, function(checked) {
// 用戶勾選無障礙服務的選項時,跳轉到頁面讓用戶去開啟
if(checked && auto.service == null) {
app.startActivity({
action: “android.settings.ACCESSIBILITY_SETTINGS” }); }
if(!checked && auto.service != null){
auto.service.disableSelf(); } });
// 當用戶回到本界面時,resume事件會被觸發
ui.emitter.on(“resume”, function() {
// 此時根據無障礙服務的開啟情況,同步開關的狀態
ui.autoService.checked = auto.service != null; });
// //開啟懸浮窗權限
// ui.overlayService.on(“check”, function (checked) {
// // 用戶勾選無障礙服務的選項時,跳轉到頁面讓用戶去開啟
// if (checked) {
// int = app.startActivity({
// packageName: “com.android.settings”,
// className: “com.android.settings.Settings$AppDrawOverlaySettingsActivity”,
// data: “package:” + auto.service.getPackageName().toString()
// });
// toast(“請打開懸浮窗開關”);
// }

// if (!checked && auto.service != null) {
// auto.service.disableSelf();
// toast(“已關閉懸浮窗權限”);
// }
// });

// 獲取時分秒用于記錄日志
function logWithTime(msg) {
    console.info(formatDate(getNow()) + " " + msg);
   }

   // 檢測淘寶網路延遲和時間偏差
   var NTP = {
   requiredResponses: 3,
   serverTimes: [],//服務器時間
   serverDelay: [],//服務器延遲
   serverUrl: "http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp",
   resyncTime: 0, // minutes
   sync: function () {
       var offset = storage.get("NTPClockOffset");//獲取時鐘偏移
       if (offset) {
           try {
               var t = offset.split("|")[1];
               var d = NTP.fixTime() - parseInt(t, 10);
               if (d < (1000 * 60 * NTP.resyncTime)) {
                   return false;
               }
           } catch (e) {
           }
       }
       NTP.getServerTime();
   },
   getNow: function () {
       var date = new Date();
       return date.getTime();
   },
   //分析服務器回應
   parseServerResponse: function (data) {
       var NtpStartTime = storage.get("NtpStartTime");
       var NtpStopTime = NTP.getNow();
       var origtime = parseInt(data.data.t);//起始時間
       var delay = ((NtpStopTime - NtpStartTime) / 2);//延遲
       var offset = NtpStopTime - origtime - delay;//抵消
       NTP.serverTimes.push(offset);
       NTP.serverDelay.push(delay);

       // 因為網路問題,需要多次獲取偏移值,獲取平均值
       if (NTP.serverTimes.length >= NTP.requiredResponses) {
           var sumOffset = 0;
           var sumDelay = 0;
           var i = 0;
           for (i = 0; i < NTP.serverTimes.length; i++) {
               sumOffset += NTP.serverTimes[i];
               sumDelay += NTP.serverDelay[i];
           }
           var averageOffset = Math.round(sumOffset / i);
           var averageDelay = Math.round(sumDelay / i);
           storage.put("NTPClockOffset", averageOffset + '|' + NTP.fixTime()); // 保存獲得offset時的時間戳
           storage.put("NTPClockDelay", averageDelay); // 保存獲得offset時的時間戳
       } else {
           NTP.getServerTime();
       }
   },
   //獲取服務器時間并判斷是否獲取成功
   getServerTime: function () {
       var NtpStartTime = NTP.getNow();
       storage.put("NtpStartTime", NtpStartTime);
       var res = http.get(NTP.serverUrl);
       if (res.statusCode !== 200) {
           toast("獲取網路時間失敗: " + res.statusCode + " " + res.statusMessage);
           return false;
       } else {
           NTP.parseServerResponse(res.body.json());
       }
   },
   //固定時間
   fixTime: function (timeStamp) {
       if (!timeStamp) {
           timeStamp = NTP.getNow();
       }
       var offset = storage.get("NTPClockOffset");
       try {
           if (!offset) {
               offset = 0;
           } else {
               offset = offset.split("|")[0];
           }
           if (isNaN(parseInt(offset, 10))) {
               return timeStamp;
           }
           return timeStamp + parseInt(offset, 10);
       } catch (e) {
           return timeStamp;
       }
   }

};

   // 獲取默認開始時間
   function getTime() {
       var fmt = "YYYY-MM-dd hh:mm:ss";
       var d = new Date();
       var hh = d.getHours();
       var mm = d.getMinutes();
       var ss = d.getSeconds();
       if (mm < 30) {
        mm = 30
        ss = 00
       }
       else{
        hh+=1
        mm = 00
        ss = 00       
       }
        
       var o = {
           "Y+": d.getYear() + 1900,
           "M+": d.getMonth() + 1,
           "d+": d.getDate(),
           "h+": hh,
           // "m+": d.getMinutes(),
           // "s+": d.getSeconds()
           "m+": mm,
           "s+": ss
       };
       for (var k in o) {
           if (new RegExp("(" + k + ")").test(fmt)) {
               fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 4) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
           }
       }
       fmt = fmt.replace(/-/g, '/');
       return fmt;
     };

     //定義初始化界面資料
     var storage = storages.create("tmalltaobaohelper.byfly");
     threads.start(NTP.sync);

     //初始化淘寶界面
   setTimeout(initConfig_two, 500);
   function initConfig_two() {
       NTPClockOffset = storage.get("NTPClockOffset", "0");
       NTPClockDelay = storage.get("NTPClockDelay", "0");
   if (!NTPClockOffset) {
       NTPClockOffset = 0;
   } else {
       NTPClockOffset = parseInt(NTPClockOffset.split("|")[0]);
   }
   if (NTPClockOffset < 0) {
       var offset_str = "慢了" + -NTPClockOffset + 'ms,'
   } else {
       offset_str = "快了" + NTPClockOffset + 'ms,'
   }
   if (NTPClockDelay < 50) {
       var good_str = "網速評估:"+"您的網路延遲低于50ms,非常優秀!"
   } 
   else if (NTPClockDelay < 100) {
       var good_str = "網速評估:"+"您的網路延遲低于100ms,優秀!"
   } 
   else if (NTPClockDelay>100 && NTPClockDelay<200) {
       var good_str = "網速評估:"+"您的網路延遲高于100ms,搶購可能會有影響!"
   } 
   else {
       good_str = "網速評估:"+"您的網路質量不佳,建議切換網路!"
   }

   ui.networkTesttwo.on("click",function(){
       ui.networkTesttwo.setText("時間校準:"+"本地時間比淘寶" + offset_str +"已經為您校準了淘寶時間!"+'\n'+ "網路延遲:" + NTPClockDelay+'\n'+good_str );
       });       

       ui.startTime_two.setText(getTime());
       ui.interval.setText(storage.get("interval", "100").toString());
       ui.lastTime_two.setText(storage.get("lastTime_two", "10").toString());   
       ui.delaytime_two.setText(storage.get("delaytime_two", "700").toString());  
     }

          // 時間戳轉時間字串
function add0(m) {
    return m < 10 ? '0' + m : m
}
function getNow() {
    var now = new Date().getTime();
    return now - NTPClockOffset; 
}

function formatDate(needTime) {
    //needTime是整數,否則要parseInt轉換
    var time = new Date(parseInt(needTime));
    var h = time.getHours();
    var mm = time.getMinutes();
    var s = time.getSeconds();
    var S = time.getMilliseconds();
    return add0(h) + ':' + add0(mm) + ':' + add0(s)+":"+add0(S);
}


  // 檢測時間字串是否有效
function strDateTime(str) {
    var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;
    var r = str.match(reg);
    if (r == null) return false;
    var d = new Date(r[1], r[3] - 1, r[4], r[5], r[6], r[7]);
    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]);
}

var storage3 = storages.create("這個是一個檔案名2");
for (i = 0; i < 7; i++) {
var content2 = storage3.get("password_" + (i + 1));
 
if (content2) {
    ui["password_" + (i + 1)].setText(content2);
}}

var storage4 = storages.create("這個是一個檔案");
for (i = 0; i < 1; i++) {
var content4 = storage4.get("id" + (i + 1));
 
if (content4) {
    ui["id" + (i + 1)].setText(content4);
}
}

  // 淘寶程式主要邏輯
  ui.ok_two.click(function () {
    // 檢查無障礙服務
    if (auto.service == null) {
           toast("請先開啟無障礙服務!");
           return;
       }
       arr = new Array();
       for (i = 0; i < 7; i++) {
       var content2 = ui["password_" + (i + 1)].getText() + "";
       storage3.put("password_" + (i + 1), content2);
       arr.push(content2);
       };


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


   //接收界面資料
       startTime_two = ui.startTime_two.getText().toString();
       interval = parseInt(ui.interval.getText());
       lastTime_two = parseInt(ui.lastTime_two.getText());
       delaytime_two = parseInt(ui.delaytime_two.getText());
       if (!strDateTime(startTime_two)) {
           ui.startTime_two.setError("日期錯誤,請重新輸入!");
           return;
       }
       //傳遞界面資料      
       storage.put("interval", interval);
       storage.put("lastTime_two", lastTime_two);
       storage.put("delaytime_two", delaytime_two);

       //按下開始運行
         if(ui.ok_two.getText()=="開始運行") {
           ui.ok_two.setText("停止運行");    
           threads.start(main_two);
           device.keepScreenOn()//保持螢屏常亮
       }else{
           ui.ok_two.setText("開始運行");
           console.clear();
           console.hide();
           threads.shutDownAll();
           device.cancelKeepingAwake();   
           }

});
//這是淘寶主程式
function main_two() {
var middle = device.width / 2 -400;
console.setPosition(middle, 0);
console.setGlobalLogConfig({ “file”: “/sdcard/日志.txt” });
console.show();
var DetailPage =0;
var notDetailPage = 0;
var notInDetailPage = 0

logWithTime("歡迎使用淘寶BP鏈接模式!"); 
sleep(800); 
logWithTime("請勿用于非法用途");  
sleep(800); 
logWithTime("請打開手機淘寶,并重新切換到點擊跳轉頁面!");
sleep(800); 
var startTime2 = new Date(Date.parse(startTime_two)).getTime();
var endTime = new Date(startTime2.valueOf() + lastTime_two * 1000).getTime();
var Panningingtime = startTime2 - delaytime_two;

reviewtime();
 //判斷實際時間是否大于搶購時間

function reviewtime(){
var tt = getNow();
if (tt > Panningingtime) {
console.warn(“您的時間已經錯過了哦,請重新輸入時間!”);
sleep(2000);
console.clear();
console.hide();
threads.shutDownAll();
}
if (tt < Panningingtime){
logWithTime(“您的搶購時間為:” + formatDate(Panningingtime));
logWithTime(“距離搶購時間還剩”+(startTime2-tt)/1000+“秒”+“請耐心等待”);
}
}
// 檢測是否在商品詳情頁
x = setInterval(function () {
var t = getNow();
if (t < Panningingtime) {
if (className(“android.widget.Button”).text(“點擊跳轉”).exists()) {
if (DetailPage === 0) {
logWithTime(“已找到跳轉按鈕,請等待…”);
DetailPage++;
notDetailPage = 0
}

    } else {
        if (notInDetailPage === 0) {
            logWithTime("未找到跳轉按鈕,否則無法進行跳轉!");
            DetailPage = 0;
            notInDetailPage++
        }
    }
} else {
    not_in_Detail_Page = 0;  // 商品詳情頁狀態復位
    clearInterval(x)
}

}, 500);

z = setInterval(function () {
var t = getNow();
if(t >= Panningingtime && t < endTime){
logWithTime(“開始搶購”)
BP鏈接();
clearInterval(z);
}
},10)
};
function BP鏈接()
{
var 價格值 = ui.password_7.text()
var 跳轉 = “有”
var Crowding = 0;
var cishu = 0;
var endTime = lastTime_two * 1000;
var password_1 = ui.password_1.text()*1;
var password_2 = ui.password_2.text()*1;
var password_3 = ui.password_3.text()*1;
var password_4 = ui.password_4.text()*1;
var password_5 = ui.password_5.text()*1;
var password_6 = ui.password_6.text()*1;
//如果在購物車
threads.start(function(){
setInterval(function(){
if(跳轉 == “有”){
if (className(“android.widget.Button”).text(“點擊跳轉”).exists()) {
logWithTime(“準備跳轉”);
className(“android.widget.Button”).text(“點擊跳轉”).findOne().click()
logWithTime(“已跳轉”);
跳轉 = “無”
}}
},100)
})
threads.start(function(){
setInterval(function(){
if (className(“android.widget.TextView”).text(“加入購物車”).exists()) {
var 領卷購買=id(“com.taobao.taobao:id/detail_main_sys_button”).findOne()
press(領卷購買.bounds().centerX()+344,領卷購買.bounds().centerY(),1)
id(“confirm”).findOne().click()
}
}, 100);
});

    threads.start(function(){
        setInterval(function(){ 
    if (id("confirm").exists()) {
        id("confirm").findOne().click()
    }
    }, 100);
    });    

    if(不提交訂單 == "有"){
        var 校驗價格 = "真"
        if(校驗價格 == "真"){
            threads.start(function(){
                setInterval(function(){  
                if(className("android.widget.TextView").text("¥"+價格值).depth(12).exists()&&className("android.widget.TextView").text("提交訂單").exists())
                {
                    logWithTime("已找到符合預定價格的商品,開始提交訂單!");
                    className("android.widget.TextView").text("提交訂單").findOne().click();
                    找到了 = "真"
                }   
                else if(className("android.widget.TextView").text("提交訂單").exists())
                {
                    logWithTime("沒有找到符合預定價格的商品,不提交訂單!");
                    Panic_buying_end()
                }                 
        },200)
        })
        }
        }


    if(提交訂單 == "有"){
    threads.start(function(){
        setInterval(function(){
        if (className("android.widget.TextView").text("提交訂單").exists()) {
                logWithTime("正在嘗試提交訂單");
                className("android.widget.TextView").text("提交訂單").findOne().click();
                logWithTime("訂單已提交");             
                }
            },10)
        })}
    threads.start(function(){
        setInterval(function(){
        if (className("android.widget.TextView").textContains("加載中").exists()) {
                if (Crowding === 0){
                    Crowding = 1
                    logWithTime("頁面加載中");
                    }          
                }
            },10)
        })
        threads.start(function(){
            setInterval(function(){
        if (className("android.widget.TextView").text("我知道了").exists()) {
                    className("android.widget.TextView").text("我知道了").findOne().click();
                    found = true;
                    cishu++;
                    logWithTime("第" + cishu + "次擁擠了,再試一次吧!");             
                }
            },10)
        })
    threads.start(function(){
        setInterval(function(){
        if (className("android.widget.TextView").text("立即付款").exists()) {
            if(自動付款 == "無"){
                    logWithTime("搶購成功!請支付!");
                    device.cancelKeepingAwake(); 
                    Panic_buying_end()             
                }}
                if(自動付款 == "有")
                {
                    click("立即付款")                            
                } 
            },200)
        })  
        var 密碼1 = "真"
        var 密碼2 = "假"
        var 密碼3 = "假"
        var 密碼4 = "假"
        var 密碼5 = "假"
        var 密碼6 = "假"
        threads.start(function(){
            setInterval(function(){ 
            if (className("android.widget.TextView").text("請輸入支付密碼").exists()) { 
                if(密碼1 == "真"&&className("android.widget.TextView").text(password_1).exists()){click(password_1);密碼2 = "真";sleep(10)}
                if(密碼2 == "真"&&className("android.widget.TextView").text(password_2).exists()){click(password_2);密碼3 = "真";sleep(10)}
                if(密碼3 == "真"&&className("android.widget.TextView").text(password_3).exists()){click(password_3);密碼4 = "真";sleep(10)}
                if(密碼4 == "真"&&className("android.widget.TextView").text(password_4).exists()){click(password_4);密碼5 = "真";sleep(10)}
                if(密碼5 == "真"&&className("android.widget.TextView").text(password_5).exists()){click(password_5);密碼6 = "真";sleep(10)}
                if(密碼6 == "真"&&className("android.widget.TextView").text(password_6).exists()){click(password_6);Panic_buying_end()}
            } 
        },300)
        })
    threads.start(function(){
        setInterval(function(){ 
        if (className("android.view.View").desc("查看訂單").findOne().parent().exists()) { 
            logWithTime("支付成功!");
            Panic_buying_end()
        }
    },10)
    })  
    threads.start(function(){
        setInterval(function(){ 
            sleep(endTime)
            logWithTime("超出預定搶購時長,搶購結束");
            device.cancelKeepingAwake();
            Panic_buying_end();           
         
    },10)
})  

}

function Panic_buying_end(){
device.cancelKeepingAwake()//關閉螢屏常亮
logWithTime(“本次搶購結束”);
threads.shutDownAll()
}

});
// 獲取時分秒用于記錄日志
function logWithTime(msg) {
 console.info(formatDate(getNow()) + " " + msg);
}

// 檢測淘寶網路延遲和時間偏差
var NTP = {
requiredResponses: 3,
serverTimes: [],//服務器時間
serverDelay: [],//服務器延遲
serverUrl: "http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp",
resyncTime: 0, // minutes
sync: function () {
    var offset = storage.get("NTPClockOffset");//獲取時鐘偏移
    if (offset) {
        try {
            var t = offset.split("|")[1];
            var d = NTP.fixTime() - parseInt(t, 10);
            if (d < (1000 * 60 * NTP.resyncTime)) {
                return false;
            }
        } catch (e) {
        }
    }
    NTP.getServerTime();
},
getNow: function () {
    var date = new Date();
    return date.getTime();
},
//分析服務器回應
parseServerResponse: function (data) {
    var NtpStartTime = storage.get("NtpStartTime");
    var NtpStopTime = NTP.getNow();
    var origtime = parseInt(data.data.t);//起始時間
    var delay = ((NtpStopTime - NtpStartTime) / 2);//延遲
    var offset = NtpStopTime - origtime - delay;//抵消
    NTP.serverTimes.push(offset);
    NTP.serverDelay.push(delay);

    // 因為網路問題,需要多次獲取偏移值,獲取平均值
    if (NTP.serverTimes.length >= NTP.requiredResponses) {
        var sumOffset = 0;
        var sumDelay = 0;
        var i = 0;
        for (i = 0; i < NTP.serverTimes.length; i++) {
            sumOffset += NTP.serverTimes[i];
            sumDelay += NTP.serverDelay[i];
        }
        var averageOffset = Math.round(sumOffset / i);
        var averageDelay = Math.round(sumDelay / i);
        storage.put("NTPClockOffset", averageOffset + '|' + NTP.fixTime()); // 保存獲得offset時的時間戳
        storage.put("NTPClockDelay", averageDelay); // 保存獲得offset時的時間戳
    } else {
        NTP.getServerTime();
    }
},
//獲取服務器時間并判斷是否獲取成功
getServerTime: function () {
    var NtpStartTime = NTP.getNow();
    storage.put("NtpStartTime", NtpStartTime);
    var res = http.get(NTP.serverUrl);
    if (res.statusCode !== 200) {
        toast("獲取網路時間失敗: " + res.statusCode + " " + res.statusMessage);
        return false;
    } else {
        NTP.parseServerResponse(res.body.json());
    }
},
//固定時間
fixTime: function (timeStamp) {
    if (!timeStamp) {
        timeStamp = NTP.getNow();
    }
    var offset = storage.get("NTPClockOffset");
    try {
        if (!offset) {
            offset = 0;
        } else {
            offset = offset.split("|")[0];
        }
        if (isNaN(parseInt(offset, 10))) {
            return timeStamp;
        }
        return timeStamp + parseInt(offset, 10);
    } catch (e) {
        return timeStamp;
    }
}

};

// 獲取默認開始時間
function getTime() {
    var fmt = "YYYY-MM-dd hh:mm:ss";
    var d = new Date();
    var hh = d.getHours();
    var mm = d.getMinutes();
    var ss = d.getSeconds();
    if (mm < 30) {
        mm = 30
        ss = 00
    }
    else{
        hh+=1
        mm = 00
        ss = 00    
    }
     
    var o = {
        "Y+": d.getYear() + 1900,
        "M+": d.getMonth() + 1,
        "d+": d.getDate(),
        "h+": hh,
        // "m+": d.getMinutes(),
        // "s+": d.getSeconds()
        "m+": mm,
        "s+": ss
    };
    for (var k in o) {
        if (new RegExp("(" + k + ")").test(fmt)) {
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 4) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
        }
    }
    fmt = fmt.replace(/-/g, '/');
    return fmt;
  };

  //定義初始化界面資料
  var storage = storages.create("tmalltaobaohelper.byfly");
  threads.start(NTP.sync);

  //初始化蘇寧界面資料
setTimeout(initConfig, 500);

function initConfig() {  

    ui.startTime.setText(getTime());      
    ui.interval.setText(storage.get("interval", "100").toString());
    ui.lastTime.setText(storage.get("lastTime", "10").toString());      
    ui.delaytime.setText(storage.get("delaytime", "800").toString());       
  }
  //初始化淘寶界面
setTimeout(initConfig_two, 500);
function initConfig_two() {
    NTPClockOffset = storage.get("NTPClockOffset", "0");
    NTPClockDelay = storage.get("NTPClockDelay", "0");
if (!NTPClockOffset) {
    NTPClockOffset = 0;
} else {
    NTPClockOffset = parseInt(NTPClockOffset.split("|")[0]);
}
if (NTPClockOffset < 0) {
    var offset_str = "慢了" + -NTPClockOffset + 'ms,'
} else {
    offset_str = "快了" + NTPClockOffset + 'ms,'
}
if (NTPClockDelay < 50) {
    var good_str = "網速評估:"+"您的網路延遲低于50ms,非常優秀!"
} 
else if (NTPClockDelay < 100) {
    var good_str = "網速評估:"+"您的網路延遲低于100ms,優秀!"
} 
else if (NTPClockDelay>100 && NTPClockDelay<200) {
    var good_str = "網速評估:"+"您的網路延遲高于100ms,搶購可能會有影響!"
} 
else {
    good_str = "網速評估:"+"您的網路質量不佳,建議切換網路!"
}

ui.networkTesttwo.on("click",function(){
    ui.networkTesttwo.setText("時間校準:"+"本地時間比淘寶" + offset_str +"已經為您校準了淘寶時間!"+'\n'+ "網路延遲:" + NTPClockDelay+'\n'+good_str );
    });       

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

  }
   
//初始化京東界面資料
  setTimeout(initConfig_tree, 500);
  function initConfig_tree() {

    ui.startTime_tree.setText(getTime());
    ui.interval.setText(storage.get("interval", "100").toString());
    ui.lastTime_tree.setText(storage.get("lastTime_tree", "10").toString());      
    ui.delaytime_tree.setText(storage.get("delaytime_tree", "800").toString());
     
  }

//獲取京東時間
var thread = threads.start(function(){ //頁面網路延時提示
timestamp1 = new Date().getTime();
r = http.get(“https://a.jd.com//ajax/queryServerData.html”);
timestamp2 = new Date().getTime()
JDnetwork_delay = timestamp2-timestamp1 //網路延時
var objj = r.body.json();
JDtime_difference = timestamp1-objj.serverTime//網路時間差
if (JDtime_difference < 0) {
var JDoffset_str = “慢了” + -JDtime_difference + ‘ms,’
} else {
JDoffset_str = “快了” + JDtime_difference + ‘ms,’
}
if (JDnetwork_delay < 50) {
var JDgood_str = “網速評估:”+“您的網路延遲低于50ms,非常優秀!”
}
else if (JDnetwork_delay < 100) {
var JDgood_str = “網速評估:”+“您的網路延遲低于100ms,優秀!”
}
else if (JDnetwork_delay>100 && JDnetwork_delay<200) {
var JDgood_str = “網速評估:”+“您的網路延遲高于100ms,搶購可能會有影響!”
}
else {
JDgood_str= “網速評估:”+“您的網路質量不佳,建議切換網路!”
}
ui.networkTest_tree.on(“click”,function(){
ui.networkTest_tree.setText(“時間校準:”+“本地時間比京東” + JDoffset_str+“已經為您校準了京東時間!”+’\n’+“網路延時:”+JDnetwork_delay+’\n’+JDgood_str);
});

});

//獲取蘇寧時間
var thread2 = threads.start(function(){
timestamp1 = new Date().getTime();
recode_suning = http.get(“http://quan.suning.com/getSysTime.do”);
timestamp2 = new Date().getTime();
SNnetwork_delay = timestamp2-timestamp1
var suningTime = recode_suning.body.json();
var nowdate = suningTime.sysTime2;
var nowdate2 = nowdate.replace(/-/g,’/’);
var nowtime = new Date(nowdate2).getTime();
SNtime_difference =timestamp1 - nowtime ;
if (SNtime_difference < 0) {
var SNoffset_str = “慢了” + -SNtime_difference + ‘ms,’
} else {
SNoffset_str = “快了” + SNtime_difference + ‘ms,’
}
if (SNnetwork_delay< 50) {
var SNgood_str = “網速評估:”+“您的網路延遲低于50ms,非常優秀!”
}
else if (SNnetwork_delay < 100) {
var SNgood_str = “網速評估:”+“您的網路延遲低于100ms,優秀!”
}
else if (SNnetwork_delay>100 && SNnetwork_delay<200) {
var SNgood_str = “網速評估:”+“您的網路延遲高于100ms,搶購可能會有影響!”
}
else {
SNgood_str= “網速評估:”+“您的網路質量不佳,建議切換網路!”
}
ui.networkTest.on(“click”,function(){
ui.networkTest.setText(“時間校準:”+“本地時間比蘇寧” + SNoffset_str+“已經為您校準了蘇寧時間!”+’\n’+“網路延時:”+SNnetwork_delay+’\n’+SNgood_str);
});
});

  // 時間戳轉時間字串
function add0(m) {
    return m < 10 ? '0' + m : m
}
function getNow() {
    var now = new Date().getTime();
    return now - NTPClockOffset; 
}

function formatDate(needTime) {
    //needTime是整數,否則要parseInt轉換
    var time = new Date(parseInt(needTime));
    var h = time.getHours();
    var mm = time.getMinutes();
    var s = time.getSeconds();
    var S = time.getMilliseconds();
    return add0(h) + ':' + add0(mm) + ':' + add0(s)+":"+add0(S);
}


  // 檢測時間字串是否有效
function strDateTime(str) {
    var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;
    var r = str.match(reg);
    if (r == null) return false;
    var d = new Date(r[1], r[3] - 1, r[4], r[5], r[6], r[7]);
    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]);
}
 
// 蘇寧程式主要邏輯
ui.ok.click(function () {
    // 檢查無障礙服務
    if (auto.service == null) {
        toast("請先開啟無障礙服務!");
        return;
    }
//接收界面資料
startTime = ui.startTime.getText().toString();

interval = parseInt(ui.interval.getText());
lastTime = parseInt(ui.lastTime.getText());
delaytime = parseInt(ui.delaytime.getText());
if (!strDateTime(startTime)) {
    ui.startTime.setError("日期錯誤,請重新輸入!");
    return;
}
//傳遞界面資料      
storage.put("interval", interval);
storage.put("lastTime", lastTime);
storage.put("delaytime", delaytime);

if(ui.ok.getText()=="開始運行") {
    ui.ok.setText("停止運行");    
    model_change();
    device.keepScreenOn()//保持螢屏常亮
}else{
    ui.ok.setText("開始運行");
    console.clear();
    console.hide();
    threads.shutDownAll();
    device.cancelKeepingAwake();   
    }

});
function model_change()
{
if(平臺類別2==“蘇寧頁面”){
device.keepScreenOn();
threads.start(main);
}
if(平臺類別2==“蘇寧購物車”){
device.keepScreenOn();
threads.start(sn購物車);
}
}

var storage3 = storages.create("這個是一個檔案名2");
for (i = 0; i < 7; i++) {
var content2 = storage3.get("password_" + (i + 1));
 
if (content2) {
    ui["password_" + (i + 1)].setText(content2);
}
}

var storage6 = storages.create("這個是一個檔案名6");
for (i = 0; i < 2; i++) {
var content6 = storage6.get("X" + (i + 1));
 
if (content6) {
    ui["X" + (i + 1)].setText(content6);
}}

// 淘寶程式主要邏輯
ui.ok_two.click(function () {
 // 檢查無障礙服務
 if (auto.service == null) {
        toast("請先開啟無障礙服務!");
        return;
    }
    arr = new Array();
    for (i = 0; i < 7; i++) {
    var content2 = ui["password_" + (i + 1)].getText() + "";
    storage3.put("password_" + (i + 1), content2);
    arr.push(content2);
    };

    arr6 = new Array();
    for (i = 0; i < 2; i++) {
    var content6 = ui["X" + (i + 1)].getText() + "";
    storage6.put("X" + (i + 1), content6);
    arr6.push(content6);
    };
//接收界面資料
    startTime_two = ui.startTime_two.getText().toString();
    interval = parseInt(ui.interval.getText());
    count= parseInt(ui.count.getText());
    lastTime_two = parseInt(ui.lastTime_two.getText());
    delaytime_two = parseInt(ui.delaytime_two.getText());
    if (!strDateTime(startTime_two)) {
        ui.startTime_two.setError("日期錯誤,請重新輸入!");
        return;
    }
    //傳遞界面資料      
    storage.put("interval", interval);
    storage.put("count", count);
    storage.put("lastTime_two", lastTime_two);
    storage.put("delaytime_two", delaytime_two);

    //按下開始運行

      if(ui.ok_two.getText()=="開始運行") {
        var X軸判斷 = ui.X1.text();
        var Y軸判斷 = ui.X2.text();        
        if(X軸判斷.length==0&&連續提交=="有")
        {
            toast("您選擇了連續提交模式,但未輸入X軸坐標!")
            ui.X1.setError("您選擇了連續提交模式,但未輸入X軸坐標!")
            return;
        }
        if(Y軸判斷.length==0&&連續提交=="有")
        {
            toast("您選擇了連續提交模式,但未輸入Y軸坐標!")
            ui.X2.setError("您選擇了連續提交模式,但未輸入Y軸坐標!")
            return;
        }
        if(X軸判斷.length>=5&&連續提交=="有") {
            ui.X1.setError("您的坐標有誤,請重新輸入!");
            return;
        }     
        if(Y軸判斷.length>=5&&連續提交=="有") {
            ui.X2.setError("您的坐標有誤,請重新輸入!");
            return;              
        } 
    if(連續提交=="無"||連續提交=="有"){
            ui.ok_two.setText("停止運行");    
            threads.start(main_two);
            device.keepScreenOn()//保持螢屏常亮
    }}else{
        ui.ok_two.setText("開始運行");
        console.clear();
        console.hide();
        threads.shutDownAll();
        device.cancelKeepingAwake();   
        }   

});

 // 京東程式主要邏輯
 ui.ok_tree.click(function () {
    // 檢查無障礙服務
    if (auto.service == null) {
        toast("請先開啟無障礙服務!");
        return;
}

//接收界面資料
startTime_tree = ui.startTime_tree.getText().toString();
interval = parseInt(ui.interval.getText());
lastTime_tree = parseInt(ui.lastTime_tree.getText());
delaytime_tree = parseInt(ui.delaytime_tree.getText());
if (!strDateTime(startTime_tree)) {
    ui.startTime.setError("日期錯誤,請重新輸入!");
    return;
}
//傳遞界面資料      
storage.put("interval", interval);
storage.put("lastTime_tree", lastTime_tree);
storage.put("delaytime_tree", delaytime_tree);

   //按下開始運行
if (ui.ok_tree.getText().toString() === '開始運行') {
    // 一直保持螢屏常亮
    device.keepScreenOn();
    model_change2();
    ui.ok_tree.setText('停止運行');
} else {
    console.clear();
    console.hide();
    threads.shutDownAll();
    device.cancelKeepingAwake();
    ui.ok_tree.setText('開始運行');
}

});

function model_change2()
{
if(平臺類別==“京東頁面”){
device.keepScreenOn();
threads.start(main_tree);
}
if(平臺類別==“京東購物車”){
device.keepScreenOn();
threads.start(京東購物車);
}
if(平臺類別==“京東BP鏈接”){
device.keepScreenOn();
threads.start(京東BP鏈接);
}
}

  //這是蘇寧主程式 
  function main() {
    var middle = device.width / 2 -400;      
    console.setPosition(middle, 0);
    console.setGlobalLogConfig({ "file": "/sdcard/日志.txt" });
    console.show();
    var DetailPage =0;
    var notDetailPage = 0;
    var notInDetailPage = 0

    logWithTime("歡迎使用蘇寧秒殺助手"); 
    sleep(800); 
    logWithTime("請勿用于非法用途");  
    sleep(800); 
    logWithTime("請進入所要搶購商品的詳情頁");
    sleep(800); 
        
    var startTime2 = new Date(Date.parse(startTime)).getTime();
    var endTime = new Date(startTime2.valueOf() + lastTime * 1000).getTime();
    var Panningingtime = startTime2 - delaytime;


    reviewtime();
     //判斷實際時間是否大于搶購時間
function reviewtime(){
    var shijian = getNow();
       if (shijian > Panningingtime) {
            console.warn("您的時間已經錯過了哦,請重新輸入時間!");
            sleep(2000);
            console.clear();
            console.hide();
            threads.shutDownAll();
        }
       if(shijian < Panningingtime){
            logWithTime("您的搶購時間為:" + formatDate(Panningingtime));
            logWithTime("距離搶購時間還剩"+(startTime2-shijian)/1000+"秒"+"請耐心等待");
            }
        }
         // 檢測是否在商品詳情頁
x = setInterval(function () {
    var t = getNow();
    if (t < Panningingtime) {
        if (className("android.widget.TextView").text("已選").exists()) {
            if (DetailPage === 0) {
                logWithTime("已進入商品詳情頁,請等待");
                DetailPage++;
                notDetailPage = 0
            }

        } else {
            if (notInDetailPage === 0) {
                logWithTime("未進入商品詳情頁,請前往,否則無法進行購買!");
                DetailPage = 0;
                notInDetailPage++
            }
        }
    } else {
        not_in_Detail_Page = 0;  // 商品詳情頁狀態復位
        clearInterval(x)
    }

}, 500);

z = setInterval(function () {
var t = getNow();
if(t >= Panningingtime && t < endTime){
logWithTime(“開始搶購”)
蘇寧頁面();
clearInterval(z);
}
},10)
};
function 蘇寧頁面()
{
var Crowding = 0;
var endTime = lastTime*1000;
// 如果在搶購商品詳情頁面
threads.start(function(){
setInterval(function(){
if(className(“android.widget.Button”).text(“立即搶購”).exists()){
logWithTime(“準備點擊搶購中”);
click(“立即搶購”);
click(“確定”);
click(“提交訂單”);
logWithTime(“準備點擊確定”);
}
}, 10);
});

    threads.start(function(){
        setInterval(function(){
        if(className("android.widget.TextView").text("立即搶購").exists())
        {
            logWithTime("準備點擊搶購中");
            click("立即搶購"); 
            click("提交訂單"); 
            logWithTime("準備提交訂單");   
        }   
    }, 10);
    });  

    threads.start(function(){
        setInterval(function(){  
    if(className("android.widget.TextView").textContains("立即購買").exists()){
        logWithTime("準備點擊購買中");
        click("立即購買");
        click("確定");
        click("提交訂單"); 
        logWithTime("準備點擊確定");
    }
    }, 10);
    });  
    threads.start(function(){
        setInterval(function(){
    if(className("android.widget.TextView").textContains("馬上搶").exists()){
        logWithTime("準備點擊馬上搶");
        click("馬上搶")
        logWithTime("馬上搶已點擊");
        }
    }, 10);
    });  
         // 如果在確定界面
    threads.start(function(){
        setInterval(function(){
    if (className("android.widget.TextView").text("確定").exists()) {
        click("確定");
        logWithTime("確定已點擊");
    }
    }, 10);
    });
        // 如果在提交訂單界面
    threads.start(function(){
        setInterval(function(){
     if (className("android.widget.TextView").text("提交訂單").exists()) {
        logWithTime("正在嘗試提交訂單");
        click("提交訂單");
        logWithTime("訂單已提交");
    }
    }, 10);
    });
    threads.start(function(){
        setInterval(function(){
    if (className("android.widget.TextView").text("知道了").exists()) {
        className("android.widget.TextView").text("知道了").findOne().click();
        Crowding++;
        logWithTime("第" + Crowding + "次擁擠了,再試一次吧!");             
    }
    }, 10);
    });
        // 搶購成功
    threads.start(function(){
            setInterval(function(){
    if (className("android.widget.TextView").text("蘇寧收銀臺").exists()) {
        logWithTime("搶購成功!請支付!");
        device.cancelKeepingAwake(); 
        Panic_buying_end();             
    }
    }, 10);
    });
    threads.start(function(){
        setInterval(function(){
        sleep(endTime)
        logWithTime("超出預定搶購時長,搶購結束");
        device.cancelKeepingAwake();
        Panic_buying_end();
    }, 10);
    });

}
//這是淘寶主程式
function main_two() {
var middle = device.width / 2 -400;
console.setPosition(middle, 0);
console.setGlobalLogConfig({ “file”: “/sdcard/日志.txt” });
console.show();
var DetailPage =0;
var notDetailPage = 0;
var notInDetailPage = 0
var notChecked = 0;

logWithTime("歡迎使用淘寶秒殺助手"); 
sleep(800); 
logWithTime("請勿用于非法用途");  
sleep(800); 
logWithTime("本模式屬于淘寶購物車搶購模式");  
sleep(800);
logWithTime("請您進入購物車,否則無法進行購買!");
sleep(800); 
    
var startTime2 = new Date(Date.parse(startTime_two)).getTime();
var endTime = new Date(startTime2.valueOf() + lastTime_two * 1000).getTime();
var Panningingtime = startTime2 - delaytime_two;

reviewtime();
 //判斷實際時間是否大于搶購時間

function reviewtime(){
var tt = getNow();
if (tt > Panningingtime) {
console.warn(“您的時間已經錯過了哦,請重新輸入時間!”);
sleep(2000);
console.clear();
console.hide();
threads.shutDownAll();
}
if (tt < Panningingtime){
logWithTime(“您的搶購時間為:” + formatDate(Panningingtime));
logWithTime(“距離搶購時間還剩”+(startTime2-tt)/1000+“秒”+“請耐心等待”);
}
}
// 檢測是否在商品詳情頁
x = setInterval(function () {
var t = getNow();
if (t < Panningingtime) {
if (id(“button_cart_charge”).exists() || className(“android.widget.TextView”).text(“全選”).exists()) {
if (DetailPage === 0) {
logWithTime(“已進入購物車,請耐心等待…”);
DetailPage++;
notDetailPage = 0
}

    } else {
        if (notInDetailPage === 0) {
            logWithTime("未進入購物車,請前往,否則無法進行購買!");
            DetailPage = 0;
            notInDetailPage++
        }
    }
} else {
    not_in_Detail_Page = 0;  // 商品詳情頁狀態復位
    clearInterval(x)
}
//判斷是否勾選商品
if(提前重繪=="有")
{
    if (notChecked === 0){
        notChecked = 1
    logWithTime("請您勿勾選商品!");
    sleep(1000)
    logWithTime("需要提前重繪,將自動隱藏控制臺!");
    console.hide()
    }
} 
if(手動勾選 == "有"){
    if (className("android.widget.TextView").text("結算").exists()) {
            found = true;
        if (notChecked === 0){
            notChecked = 1
            desc("全選").findOne().click()
            logWithTime("檢測到您未勾選商品,以為您自動勾選!");
        }
    }
}  
else{
    if (notChecked === 0){
        notChecked = 1
    logWithTime("請您勿勾選商品!");
    }
}

}, 500);
z = setInterval(function () {
var t = getNow();
if(t >= Panningingtime && t < endTime){
logWithTime(“開始搶購”)
淘寶購物車();
clearInterval(z);
}
},10)
};
function 淘寶購物車()
{
var i = 1;
var Crowding = 0;
var Success = 0;
var found = false;
var endTime = lastTime_two * 1000
var password_1 = ui.password_1.text()*1;
var password_2 = ui.password_2.text()*1;
var password_3 = ui.password_3.text()*1;
var password_4 = ui.password_4.text()*1;
var password_5 = ui.password_5.text()*1;
var password_6 = ui.password_6.text()*1;
var 提交訂單X軸 = ui.X1.text()*1;
var 提交訂單Y軸 = ui.X2.text()*1;
var 價格值 = ui.password_7.text()
var count = ui.count.text()*1
if(提前重繪==“有”){
threads.start(function(){
setInterval(function(){
if(開啟重繪==“有”){
if(className(“android.widget.TextView”).text(“結算”))
{
logWithTime(“開始重繪”);
gesture(400, [500, 500], [500, 900])
logWithTime(“已重繪”);
開啟重繪 = “無”
}
}
},10)
})

    threads.start(function(){
        setInterval(function(){
     if(className("android.widget.TextView").text("加載完成").exists()){
        logWithTime("準備勾選");
        className("android.view.View").desc("勾選按鈕,商品未選中,雙擊選中商品").findOne().click()
        logWithTime("已勾選");
        }
    },10)
    })
    }      

if(自動勾選 == "有"){
    var 全選 = "有"
    threads.start(function(){
        setInterval(function(){ 
        if(全選 == "有"){
    if (className("android.widget.CheckBox").desc("全選").exists()&&className("android.widget.TextView").textContains("結算").exists()) { 
        desc("全選").findOne().click() 
        全選 = "無"
    }}
    },100)
    })

    var 校驗價格 = "真"
    if(校驗價格 == "真"){
        threads.start(function(){
            setInterval(function(){ 
            if(className("android.widget.TextView").text("¥"+價格值).depth(15).exists()&&className("android.widget.TextView").textContains("結算(").exists())
            {
                logWithTime("已找到符合預定價格的商品,開始結算!");
                className("android.widget.TextView").textContains("結算(1)").findOne().click();
            }        
            else if(className("android.widget.TextView").textContains("結算(").exists())
            {
                全選 = "有"
                logWithTime("未找到符合預定價格的商品,不結算,取消再次勾選!");
                desc("取消全選").findOne().click()
            }          
    },200)
    })
    }
    }else
    {
        threads.start(function(){
            setInterval(function(){
        if (className("android.widget.TextView").textContains("結算(").exists()) {      
               logWithTime("準備點擊結算");
               className("android.widget.TextView").textContains("結算(").findOne().click();
               found = true; 
               logWithTime("結算已點擊"); 
               if(測驗 =="有") 
               {    sleep(100) 
                   logWithTime("測驗模式不提交訂單!");
                   Panic_buying_end();
               }      
            }
        },10)
        })
    }

threads.start(function(){
    setInterval(function(){ 
if (className("android.widget.TextView").text("失效寶貝").exists() && className("android.widget.TextView").text("商品不能購買").exists()&&count>0) {
    logWithTime("檢測到商品已失效或無法購買,即將回傳結算界面開始重試!");
        logWithTime("已回傳結算界面,準備重試!");
        sleep(random(10,30))
        back();
        count = count - 1;
        logWithTime("已重試"+i+"次");
        i++;
}
}, 100);
});
//不測驗時才提交訂單
var 提交訂單 = "真"
if(測驗 =="無"&&連續提交=="有") { 
    threads.start(function(){
        setInterval(function(){
if(className("android.widget.TextView").text("提交訂單").exists()&&提交訂單 == "真")
    {
        var x=1             
    while(true){
        if(x<50){
            press(提交訂單X軸,提交訂單Y軸,10)
            x++;
            logWithTime("正在嘗試提交訂單");
        }
    if(x==50){
        break
        }
     }
     提交訂單 = "假"
    }
    },10)
    })
    }
    if(測驗 =="無"&&連續提交=="無") { 
        threads.start(function(){
            setInterval(function(){ 
     if (className("android.widget.TextView").text("提交訂單").exists()&&className("android.widget.TextView").text("配送方式").exists()) {
            logWithTime("正在嘗試提交訂單");
            className("android.widget.TextView").text("提交訂單").findOne().click();
            logWithTime("訂單已提交");             
            }
        }, 10);
        });
        }
    threads.start(function(){
        setInterval(function(){
    if (className("android.widget.TextView").textContains("加載中").exists()) {
        if (Crowding === 0){
            Crowding = 1
            logWithTime("頁面加載中");
            }
            found = true;            
        }
    }, 10);
});


threads.start(function(){
    setInterval(function(){ 
if (className("android.widget.TextView").text("立即付款").exists()) {
    if(自動付款 == "無"){
            logWithTime("搶購成功!請支付!");
            found = true;
            Success++;
            device.cancelKeepingAwake();  
            Panic_buying_end();             
        }}
        if(自動付款 == "有")
        {
            click("立即付款") 
        }
    }, 200);
});
var 密碼1 = "真"
var 密碼2 = "假"
var 密碼3 = "假"
var 密碼4 = "假"
var 密碼5 = "假"
var 密碼6 = "假"
threads.start(function(){
    setInterval(function(){ 
    if (className("android.widget.TextView").text("請輸入支付密碼").exists()) { 
        if(密碼1 == "真"&&className("android.widget.TextView").text(password_1).exists()){click(password_1);密碼2 = "真";sleep(10)}
        if(密碼2 == "真"&&className("android.widget.TextView").text(password_2).exists()){click(password_2);密碼3 = "真";sleep(10)}
        if(密碼3 == "真"&&className("android.widget.TextView").text(password_3).exists()){click(password_3);密碼4 = "真";sleep(10)}
        if(密碼4 == "真"&&className("android.widget.TextView").text(password_4).exists()){click(password_4);密碼5 = "真";sleep(10)}
        if(密碼5 == "真"&&className("android.widget.TextView").text(password_5).exists()){click(password_5);密碼6 = "真";sleep(10)}
        if(密碼6 == "真"&&className("android.widget.TextView").text(password_6).exists()){click(password_6);Panic_buying_end()}
    } 
},300)
})
threads.start(function(){
    setInterval(function(){ 
    if (className("android.view.View").desc("查看訂單").findOne().parent().exists()) { 
        logWithTime("支付成功!");
        Panic_buying_end()
    }
},10)
})  
threads.start(function(){
    setInterval(function(){ 
    sleep(endTime)
    logWithTime("超出預定搶購時長,搶購結束");
    device.cancelKeepingAwake();
    Panic_buying_end();           
}, 10);
});  

}
//這是京東主程式
function main_tree() {
var middle = device.width / 2 -400;
console.setPosition(middle, 0);
console.setGlobalLogConfig({ “file”: “/sdcard/日志.txt” });
console.show();
var DetailPage =0;
var notDetailPage = 0;
var notInDetailPage = 0

logWithTime("歡迎使用京東秒殺助手"); 
sleep(800); 
logWithTime("請勿用于非法用途");  
sleep(800); 
logWithTime("請您進入商品詳情頁,否則無法進行購買!");
sleep(800); 
    
var startTime2 = new Date(Date.parse(startTime_tree)).getTime();
var endTime = new Date(startTime2.valueOf() + lastTime_tree* 1000).getTime();
var Panningingtime = startTime2 - delaytime_tree;


reviewtime();
 //判斷實際時間是否大于搶購時間

function reviewtime(){
var tt = getNow();
if (tt > Panningingtime) {
console.warn(“您的時間已經錯過了哦,請重新輸入時間!”);
sleep(2000);
console.clear();
console.hide();
threads.shutDownAll();
}
if (tt < Panningingtime){
logWithTime(“您的搶購時間為:” + formatDate(Panningingtime));
logWithTime(“距離搶購時間還剩”+(startTime2-tt)/1000+“秒”+“請耐心等待”);
}
}
// 檢測是否在商品詳情頁
x = setInterval(function () {
var t = getNow();
if (t < Panningingtime) {
if (className(“android.widget.LinearLayout”).clickable(true).depth(9).exists()) {
if (DetailPage === 0) {
logWithTime(“已進入商品詳情頁,請耐心等待…”);
DetailPage++;
notDetailPage = 0
}

    } else {
        if (notInDetailPage === 0) {
            logWithTime("未進入商品詳情頁,請前往,否則無法進行購買!");
            DetailPage = 0;
            notInDetailPage++
        }
    }
} else {
    not_in_Detail_Page = 0;  // 商品詳情頁狀態復位
    clearInterval(x)
}

}, 500);

z = setInterval(function () {
var t = getNow();
if(t >= Panningingtime && t < endTime){
logWithTime(“開始搶購”)
京東頁面();
clearInterval(z);
}
},10)
};
function 京東頁面()
{
var endTime = lastTime_tree * 1000;
var Crowding = 0;
threads.start(function(){
setInterval(function(){
if (text(“立即搶購”).exists()) {
logWithTime(“準備點擊搶購”);
click(“立即搶購”)
logWithTime(“立即搶購已點擊”);
}
},10)
})
threads.start(function(){
setInterval(function(){
if (text(“立即購買”).exists()) {
logWithTime(“準備點擊購買”);
click(“立即購買”)
logWithTime(“立即購買已點擊”);
}
},10)
})
threads.start(function(){
setInterval(function(){
if (text(“提交訂單”).exists()) {
logWithTime(“頁面加載中”);
logWithTime(“正在嘗試提交訂單”);
click(“提交訂單”);
logWithTime(“訂單已提交”);
}
},10)
})
threads.start(function(){
setInterval(function(){
if (text(“我知道了”).exists()) {
click(“我知道了”)
Crowding++;
logWithTime(“第” + Crowding + “次擁擠了,再試一次吧!”);
}
},10)
})
threads.start(function(){
setInterval(function(){
if (text(“確定”).exists()) {
logWithTime(“準備點擊確定”);
click(“確定”)
logWithTime(“確定已點擊”);
}
},10)
})
threads.start(function(){
setInterval(function(){
if (className(“android.widget.TextView”).text(“京東收銀臺”).exists()) {
logWithTime(“搶購成功!請支付!”);
device.cancelKeepingAwake();
Panic_buying_end();
}
},10)
})
threads.start(function(){
setInterval(function(){
sleep(endTime)
logWithTime(“超出預定搶購時長,搶購結束”);
device.cancelKeepingAwake();
Panic_buying_end();
},10)
})
}
//這是蘇寧購物車主程式
function sn購物車() {
var middle = device.width / 2 -400;
console.setPosition(middle, 0);
console.setGlobalLogConfig({ “file”: “/sdcard/日志.txt” });
console.show();
var DetailPage =0;
var notDetailPage = 0;
var notInDetailPage = 0

    logWithTime("歡迎使用蘇寧秒殺助手"); 
    sleep(800); 
    logWithTime("請勿用于非法用途");  
    sleep(800); 
    logWithTime("請進入購物車");
    sleep(800); 
        
    var startTime2 = new Date(Date.parse(startTime)).getTime();
    var endTime = new Date(startTime2.valueOf() + lastTime * 1000).getTime();
    var Panningingtime = startTime2 + delaytime;


    reviewtime();
     //判斷實際時間是否大于搶購時間
function reviewtime(){
    var shijian = getNow();
       if (shijian > Panningingtime) {
            console.warn("您的時間已經錯過了哦,請重新輸入時間!");
            sleep(2000);
            console.clear();
            console.hide();
            threads.shutDownAll();
        }
       if(shijian < Panningingtime){
            logWithTime("您的搶購時間為:" + formatDate(Panningingtime));
            logWithTime("距離搶購時間還剩"+(startTime2-shijian)/1000+"秒"+"請耐心等待");
            }
        }
         // 檢測是否在商品詳情頁
x = setInterval(function () {
    var t = getNow();
    if (t < Panningingtime) {
        if (className("android.widget.TextView").text("購物車").exists()) {
            if (DetailPage === 0) {
                logWithTime("已進入購物車,請等待");
                DetailPage++;
                notDetailPage = 0
            }

        } else {
            if (notInDetailPage === 0) {
                logWithTime("未進入購物車,請前往,否則無法進行購買!");
                DetailPage = 0;
                notInDetailPage++
            }
        }
    } else {
        not_in_Detail_Page = 0;  // 商品詳情頁狀態復位
        clearInterval(x)
    }

}, 500);

z = setInterval(function () {
    var t = getNow();
    if(t >= Panningingtime && t < endTime){                
        logWithTime("開始搶購")
        SN購物車();
        clearInterval(z);        
    }  
  },100)

};
function SN購物車()
{
var Crowding = 0;
var endTime = lastTime * 1000;
// 如果在購物車
var 勾選 = “有”
threads.start(function(){
setInterval(function(){
if(勾選 ==“有”){
if(className(“android.widget.CheckBox”).enabled(true).exists()){
className(“android.widget.CheckBox”).enabled(true).findOne().click()
勾選 = “無”
click(“去結算”)
click(“提交訂單”)
}}
},10)
})
// 如果在提交訂單界面
threads.start(function(){
setInterval(function(){
if (className(“android.widget.TextView”).text(“提交訂單”).exists()) {
logWithTime(“正在嘗試提交訂單”);
click(“提交訂單”);
logWithTime(“訂單已提交”);
}
}, 10);
});
threads.start(function(){
setInterval(function(){
if(className(“android.widget.TextView”).text(“去結算(1)”).exists()){
logWithTime(“正在嘗試結算”);
click(“去結算”)
sleep(random(10,25))
logWithTime(“已結算”);
}
if(className(“android.widget.TextView”).text(“去結算(2)”).exists()){
logWithTime(“正在嘗試結算”);
click(“去結算”)
sleep(random(10,25))
logWithTime(“已結算”);
}
if(className(“android.widget.TextView”).text(“去結算(3)”).exists()){
logWithTime(“正在嘗試結算”);
click(“去結算”)
sleep(random(10,25))
logWithTime(“已結算”);
}
}, 50);
});
//需要領卷購買
threads.start(function(){
setInterval(function(){
if(className(“android.widget.TextView”).text(“領券結算(1)”).exists()){
logWithTime(“正在嘗試結算”);
click(“領券結算(1)”)
sleep(random(10,25))
logWithTime(“已結算”);
}
if(className(“android.widget.TextView”).text(“領券結算(2)”).exists()){
logWithTime(“正在嘗試結算”);
click(“領券結算(2)”)
sleep(random(10,25))
logWithTime(“已結算”);
}
if(className(“android.widget.TextView”).text(“領券結算(3)”).exists()){
logWithTime(“正在嘗試結算”);
click(“領券結算(3)”)
sleep(random(10,25))
logWithTime(“已結算”);
}
}, 50);
});
threads.start(function(){
setInterval(function(){
if (className(“android.widget.TextView”).text(“知道了”).exists()) {
className(“android.widget.TextView”).text(“知道了”).findOne().click();
Crowding++;
logWithTime(“第” + Crowding + “次擁擠了,再試一次吧!”);
}
}, 200);
});
// 搶購成功
threads.start(function(){
setInterval(function(){
if (className(“android.widget.TextView”).text(“蘇寧收銀臺”).exists()) {
logWithTime(“搶購成功!請支付!”);
device.cancelKeepingAwake();
Panic_buying_end()
}
}, 200);
});
threads.start(function(){
setInterval(function(){
sleep(endTime)
logWithTime(“超出預定搶購時長,搶購結束”);
device.cancelKeepingAwake();
Panic_buying_end();
},200)
});
}

//京東購物車模式
function 京東購物車() {
var middle = device.width / 2 -400;
console.setPosition(middle, 0);
console.setGlobalLogConfig({ “file”: “/sdcard/日志.txt” });
console.show();
var DetailPage =0;
var notDetailPage = 0;
var notInDetailPage = 0
var notChecked = 0

logWithTime("歡迎使用京東秒殺助手"); 
sleep(800); 
logWithTime("請勿用于非法用途");  
sleep(800); 
logWithTime("請您進入購物車,否則無法進行購買!");
sleep(800); 
    
var startTime2 = new Date(Date.parse(startTime_tree)).getTime();
var endTime = new Date(startTime2.valueOf() + lastTime_tree* 1000).getTime();
var Panningingtime = startTime2 - delaytime_tree;


reviewtime();
 //判斷實際時間是否大于搶購時間

function reviewtime(){
var tt = getNow();
if (tt > Panningingtime) {
console.warn(“您的時間已經錯過了哦,請重新輸入時間!”);
sleep(2000);
console.clear();
console.hide();
threads.shutDownAll();
}
if (tt < Panningingtime){
logWithTime(“您的搶購時間為:” + formatDate(Panningingtime));
logWithTime(“距離搶購時間還剩”+(startTime2-tt)/1000+“秒”+“請耐心等待”);
}
}
// 檢測是否在商品詳情頁
x = setInterval(function () {
var t = getNow();
if (t < Panningingtime) {
if (className(“android.widget.TextView”).text(“購物車”).depth(14).exists()) {
if (DetailPage === 0) {
logWithTime(“已進入購物車,請耐心等待…”);
DetailPage++;
notDetailPage = 0
}

    } else {
        if (notInDetailPage === 0) {
            logWithTime("未進入購物車,請前往,否則無法進行購買!");
            DetailPage = 0;
            notInDetailPage++
        }
    }
} else {
    not_in_Detail_Page = 0;  // 商品詳情頁狀態復位
    clearInterval(x)
}

if (className("android.widget.TextView").text("去結算(0)").exists()) {
    if (notChecked === 0){
        notChecked = 1
        logWithTime("檢測到您未勾選商品,將自動為您勾選!");
        click("全選")
    }
    }

}, 500);

z = setInterval(function () {
var t = getNow();
if(t >= Panningingtime && t < endTime){
logWithTime(“開始搶購”)
購物車();
clearInterval(z);
}
},10)
};
function 購物車()
{
var endTime = lastTime_tree * 1000;
var Crowding = 0

threads.start(function(){
    setInterval(function(){
if (className("android.widget.TextView").textContains("去結算(").exists()) {   
    logWithTime("準備結算");   
    className("android.widget.TextView").textContains("去結算(").findOne().click();   
    logWithTime("已結算,準備進入提交訂單頁面!");
 }
},10)
}) 
threads.start(function(){
    setInterval(function(){ 
if (className("android.widget.TextView").textContains("填寫訂單").exists()) {
    if (Crowding === 0){
        Crowding = 1
        logWithTime("頁面加載中");
        }           
    }
}, 10);
});
threads.start(function(){
    setInterval(function(){
        if (className("android.widget.Button").text("提交訂單").exists()) {
            logWithTime("正在嘗試提交訂單");
            className("android.widget.Button").text("提交訂單").findOne().click();
            logWithTime("訂單已提交!");        
            }
    },10)
}) 

    threads.start(function(){
        setInterval(function(){ 
        if (className("android.widget.TextView").text("京東收銀臺").exists()) {
                    logWithTime("搶購成功!請支付!");
                    device.cancelKeepingAwake(); 
                    Panic_buying_end();              
                }
            },10)
        })  
    threads.start(function(){
        setInterval(function(){ 
            sleep(endTime) 
            logWithTime("超出預定搶購時長,搶購結束");
            device.cancelKeepingAwake();
            Panic_buying_end(); 
        },10)
    })                          

}

//京東BP鏈接
function 京東BP鏈接() {
var middle = device.width / 2 -400;
console.setPosition(middle, 0);
console.setGlobalLogConfig({ “file”: “/sdcard/日志.txt” });
console.show();
var DetailPage =0;
var notDetailPage = 0;
var notInDetailPage = 0
var notChecked = 0

logWithTime("歡迎使用京東秒殺助手"); 
sleep(800); 
logWithTime("請勿用于非法用途");  
sleep(800); 
logWithTime("請您確認已打開BP鏈接,否則無法進行購買!");
sleep(800); 
    
var startTime2 = new Date(Date.parse(startTime_tree)).getTime();
var endTime = new Date(startTime2.valueOf() + lastTime_tree* 1000).getTime();
var Panningingtime = startTime2 - delaytime_tree;


reviewtime();
 //判斷實際時間是否大于搶購時間

function reviewtime(){
var tt = getNow();
if (tt > Panningingtime) {
console.warn(“您的時間已經錯過了哦,請重新輸入時間!”);
sleep(2000);
console.clear();
console.hide();
threads.shutDownAll();
}
if (tt < Panningingtime){
logWithTime(“您的搶購時間為:” + formatDate(Panningingtime));
logWithTime(“距離搶購時間還剩”+(startTime2-tt)/1000+“秒”+“請耐心等待”);
}
}
// 檢測是否在商品詳情頁
x = setInterval(function () {
var t = getNow();
if (t < Panningingtime) {
if (className(“android.widget.TextView”).text(“確認訂單”).depth(11).exists()) {
if (DetailPage === 0) {
logWithTime(“已進入BP鏈接,請耐心等待…”);
DetailPage++;
notDetailPage = 0
}

    } else {
        if (notInDetailPage === 0) {
            logWithTime("未進入BP鏈接,請前往,否則無法進行購買!");
            DetailPage = 0;
            notInDetailPage++
        }
    }
} else {
    not_in_Detail_Page = 0;  // 商品詳情頁狀態復位
    clearInterval(x)
}

}, 500);

z = setInterval(function () {
var t = getNow();
if(t >= Panningingtime && t < endTime){
logWithTime(“開始搶購”)
bp支付()
clearInterval(z);
}
},10)
};
function bp支付()
{
var endTime = lastTime_tree * 1000;

threads.start(function(){
    setInterval(function(){
    if(className("android.view.View").text("微信支付").exists()){
        logWithTime("準備點擊微信支付");
        className("android.view.View").text("微信支付").findOne().click()
        logWithTime("已點擊微信支付");
        }
},10)
}) 

    threads.start(function(){
        setInterval(function(){ 
        if (className("android.view.ViewGroup").depth(17).exists()) {
                    logWithTime("搶購成功!請支付!");
                    device.cancelKeepingAwake(); 
                    Panic_buying_end();              
                }
            },10)
    })  
    threads.start(function(){
        setInterval(function(){ 
            sleep(endTime) 
            logWithTime("超出預定搶購時長,搶購結束");
            device.cancelKeepingAwake();
            Panic_buying_end(); 
        },10)
    })                          

}

function 獲取坐標(){
console.show()
console.info(“請前往提交訂單頁面,否則無法獲取坐標!”)
sleep(1000)
console.info(“30秒內未進入提交訂單頁面,獲取坐標就會自動停止!”)
var 找按鈕 = “有”
threads.start(function(){
setInterval(function(){
if(className(“android.widget.TextView”).text(“提交訂單”).exists()&&找按鈕==“有”){
var 提交訂單= className(“android.widget.TextView”).text(“提交訂單”).findOne()
console.info(“您的X軸坐標是:”+提交訂單.bounds().centerX(),"\n您的Y軸坐標是:"+提交訂單.bounds().centerY())
找按鈕=“無”
console.info(“獲取坐標成功!”)
threads.shutDownAll();
}
}, 100);
});

threads.start(function(){
    setInterval(function(){ 
        sleep(30000)
        console.info("獲取坐標超時,已停止!")
        console.clear();
        console.hide();
        threads.shutDownAll();
        device.cancelKeepingAwake();   
    }, 100);
    }); 
}

//=====================================================================================拼多多
ui.pinduoduo.on(“click”, () => {
“ui”;
var ColoredButton = (function() {
//繼承ui.Widget
util.extend(ColoredButton, ui.Widget);

    function ColoredButton() {
        //呼叫父類建構式
        ui.Widget.call(this);
        //自定義屬性color,定義按鈕顏色
        this.defineAttr("color", (view, name, defaultGetter) => {
            return this._color;
        }, (view, name, value, defaultSetter) => {
            this._color = value;
            view.attr("backgroundTint", value);
        });
 
    }
    ColoredButton.prototype.render = function() {
        return (
            <button textSize="16sp" style="Widget.AppCompat.Button.Colored" w="*" h="auto"/>
        );
    }
 
    ui.registerWidget("colored-button", ColoredButton);
    return ColoredButton;
})();
var color = "#009688";
ui.statusBarColor("#ff4040")
ui.layout(
    <drawer id="drawer" >
        <vertical>
            <appbar>
                <toolbar  id="toolbar"paddingTop="5dp" title="拼多多"  bg="#ff4040" />
            </appbar>
        
            <viewpager id="viewpager">
                //拼多多界面
                <frame> //start
                <ScrollView>
                <vertical>
                <Switch id="autoService" text="無障礙服務" checked="{{auto.service != null}}" padding="8 8 8 8" textSize="13sp"/>
                <text textSize="13sp" id="networkTesttwo" textColor="#ff0000" margin="0 5" text="點擊校準拼多多時間!"/>
 
                <radiogroup orientation="horizontal">
                <radio id="model_pdd" text="搶券模式" checked="true"/>
                </radiogroup>
 
                <horizontal>
                <text textSize="13sp" textColor="black" text="提前搶購時間"/>
                <input id="delaytime_pdd" textColor="gray" inputType="number" text="200" w="80"/>
                <text textSize="13sp" textColor="black" text="毫秒"  />
                </horizontal>
 
                <horizontal>
                <text textSize="13sp" textColor="black" text="頁面搶券頻率" />
                <input id="pinlv_pdd" textColor="gray" inputType="number" text="10" w="80"/>
                <text textSize="13sp" textColor="black" text="毫秒"  />
                </horizontal>
 
                <horizontal>
                <text textSize="13sp" textColor="black" text="搶購持續時間" />
                <input id="lastTime_pdd" textColor="gray" inputType="number" text="10" w="80"/>
                <text textSize="13sp" textColor="black" text="秒"  />
                </horizontal>
 
                <text  textSize="13sp" textColor="black" text="請輸入搶購時間,格式為:2020/04/14 12:00:00"/> 
                <input hint="請輸入搶購時間,格式必須正確" textColor="gray" id="startTime_pdd" /> 
                //定義按鈕的大小顏色和文本
                <colored-button  id="ok_pdd"      layout_gravity="center"      color="#ff5500"  text="開始運行"/>                                
                </vertical>                                                                                
                </ScrollView>
                </frame> //end
 
            </viewpager>        
        </vertical>
    </drawer>
);
 
//這里是無障礙觸發方式
ui.autoService.on("check", function(checked) {
    // 用戶勾選無障礙服務的選項時,跳轉到頁面讓用戶去開啟 
    if(checked && auto.service == null) { 
     app.startActivity({
     action: "android.settings.ACCESSIBILITY_SETTINGS"  }); } 
      if(!checked && auto.service != null){ 
     auto.service.disableSelf();    }    }); 
   // 當用戶回到本界面時,resume事件會被觸發
     ui.emitter.on("resume", function() {
    // 此時根據無障礙服務的開啟情況,同步開關的狀態 
    ui.autoService.checked = auto.service != null;    }); 
 
     // 獲取時分秒用于記錄日志
     function logWithTime(msg) {
        console.info(formatDate(getNow()) + " " + msg);
       }
    
       // 獲取時分秒用于記錄日志
    function logWithTime(msg) {
        console.info(formatDate(getNow()) + " " + msg);
       }
    
       // 檢測淘寶網路延遲和時間偏差
       var NTP = {
       requiredResponses: 3,
       serverTimes: [],//服務器時間
       serverDelay: [],//服務器延遲
       serverUrl: "http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp",
       resyncTime: 0, // minutes
       sync: function () {
           var offset = storage.get("NTPClockOffset");//獲取時鐘偏移
           if (offset) {
               try {
                   var t = offset.split("|")[1];
                   var d = NTP.fixTime() - parseInt(t, 10);
                   if (d < (1000 * 60 * NTP.resyncTime)) {
                       return false;
                   }
               } catch (e) {
               }
           }
           NTP.getServerTime();
       },
       getNow: function () {
           var date = new Date();
           return date.getTime();
       },
       //分析服務器回應
       parseServerResponse: function (data) {
           var NtpStartTime = storage.get("NtpStartTime");
           var NtpStopTime = NTP.getNow();
           var origtime = parseInt(data.data.t);//起始時間
           var delay = ((NtpStopTime - NtpStartTime) / 2);//延遲
           var offset = NtpStopTime - origtime - delay;//抵消
           NTP.serverTimes.push(offset);
           NTP.serverDelay.push(delay);
    
           // 因為網路問題,需要多次獲取偏移值,獲取平均值
           if (NTP.serverTimes.length >= NTP.requiredResponses) {
               var sumOffset = 0;
               var sumDelay = 0;
               var i = 0;
               for (i = 0; i < NTP.serverTimes.length; i++) {
                   sumOffset += NTP.serverTimes[i];
                   sumDelay += NTP.serverDelay[i];
               }
               var averageOffset = Math.round(sumOffset / i);
               var averageDelay = Math.round(sumDelay / i);
               storage.put("NTPClockOffset", averageOffset + '|' + NTP.fixTime()); // 保存獲得offset時的時間戳
               storage.put("NTPClockDelay", averageDelay); // 保存獲得offset時的時間戳
           } else {
               NTP.getServerTime();
           }
       },
       //獲取服務器時間并判斷是否獲取成功
       getServerTime: function () {
           var NtpStartTime = NTP.getNow();
           storage.put("NtpStartTime", NtpStartTime);
           var res = http.get(NTP.serverUrl);
           if (res.statusCode !== 200) {
               toast("獲取網路時間失敗: " + res.statusCode + " " + res.statusMessage);
               return false;
           } else {
               NTP.parseServerResponse(res.body.json());
           }
       },
       //固定時間
       fixTime: function (timeStamp) {
           if (!timeStamp) {
               timeStamp = NTP.getNow();
           }
           var offset = storage.get("NTPClockOffset");
           try {
               if (!offset) {
                   offset = 0;
               } else {
                   offset = offset.split("|")[0];
               }
               if (isNaN(parseInt(offset, 10))) {
                   return timeStamp;
               }
               return timeStamp + parseInt(offset, 10);
           } catch (e) {
               return timeStamp;
           }
       }
   };
    
    
    
    
       // 獲取默認開始時間
       function getTime() {
           var fmt = "YYYY-MM-dd hh:mm:ss";
           var d = new Date();
           var hh = d.getHours();
           var mm = d.getMinutes();
           var ss = d.getSeconds();
           if (mm < 30) {
            mm = 30
            ss = 00
           }
           else{
            hh+=1
            mm = 00
            ss = 00       
           }
            
           var o = {
               "Y+": d.getYear() + 1900,
               "M+": d.getMonth() + 1,
               "d+": d.getDate(),
               "h+": hh,
               // "m+": d.getMinutes(),
               // "s+": d.getSeconds()
               "m+": mm,
               "s+": ss
           };
           for (var k in o) {
               if (new RegExp("(" + k + ")").test(fmt)) {
                   fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 4) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
               }
           }
           fmt = fmt.replace(/-/g, '/');
           return fmt;
         };
    
            //定義初始化界面資料
            var storage = storages.create("拼多多");
            threads.start(NTP.sync);
 
             //初始化淘寶界面
       setTimeout(initConfig_pdd, 500);
       function initConfig_pdd() {     
        NTPClockOffset = storage.get("NTPClockOffset", "0");
        NTPClockDelay = storage.get("NTPClockDelay", "0");
        if (!NTPClockOffset) {
        NTPClockOffset = 0;
        } else {
        NTPClockOffset = parseInt(NTPClockOffset.split("|")[0]);
        }  
           ui.startTime_pdd.setText(getTime());
           ui.pinlv_pdd.setText(storage.get("pinlv_pdd", "100").toString());
           ui.lastTime_pdd.setText(storage.get("lastTime_pdd", "10").toString());   
           ui.delaytime_pdd.setText(storage.get("delaytime_pdd", "200").toString());  
         }
          
            // 時間戳轉時間字串
            function add0(m) {
                return m < 10 ? '0' + m : m
            }
            function getNow() {
                var now = new Date().getTime();
                return now - NTPClockOffset; 
            }
         
            function formatDate(needTime) {
                //needTime是整數,否則要parseInt轉換
                var time = new Date(parseInt(needTime));
                var h = time.getHours();
                var mm = time.getMinutes();
                var s = time.getSeconds();
                var S = time.getMilliseconds();
                return add0(h) + ':' + add0(mm) + ':' + add0(s)+":"+add0(S);
            }
         
         
              // 檢測時間字串是否有效
            function strDateTime(str) {
                var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;
                var r = str.match(reg);
                if (r == null) return false;
                var d = new Date(r[1], r[3] - 1, r[4], r[5], r[6], r[7]);
                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]);
            }
         
           // 淘寶程式主要邏輯
      ui.ok_pdd.click(function () {
        // 檢查無障礙服務
        if (auto.service == null) {
               toast("請先開啟無障礙服務!");
               return;
           }
           //接收界面資料
               startTime_pdd = ui.startTime_pdd.getText().toString();
               pinlv_pdd = parseInt(ui.pinlv_pdd.getText());
               lastTime_pdd = parseInt(ui.lastTime_pdd.getText());
               delaytime_pdd = parseInt(ui.delaytime_pdd.getText());
               if (!strDateTime(startTime_pdd)) {
                   ui.startTime_pdd.setError("日期錯誤,請重新輸入!");
                   return;
               }
               //傳遞界面資料      
               storage.put("pinlv_pdd", pinlv_pdd);
               storage.put("lastTime_pdd", lastTime_pdd);
               storage.put("delaytime_pdd", delaytime_pdd);
        
               //按下開始運行
                 if(ui.ok_pdd.getText()=="開始運行") {
                   ui.ok_pdd.setText("停止運行");    
                   threads.start(拼多多);
                   device.keepScreenOn()//保持螢屏常亮
               }else{
                   ui.ok_pdd.setText("開始運行");
                   console.clear();
                   console.hide();
                   threads.shutDownAll();
                   device.cancelKeepingAwake();   
                   }          
       }); 
function 拼多多(){
    var middle = device.width / 2 -400;      
    console.setPosition(middle, 0);
    console.setGlobalLogConfig({ "file": "/sdcard/日志.txt" });
    console.show();
    var DetailPage =0;
    var notDetailPage = 0;
    var notInDetailPage = 0
 
    logWithTime("歡迎使用拼多多搶券模式!"); 
    sleep(800); 
    logWithTime("請勿用于非法用途");  
    sleep(800); 
    logWithTime("請打開拼多多,并進入需要搶購商品的詳情頁!");
    sleep(800); 
    var startTime_pdd1 = new Date(Date.parse(startTime_pdd)).getTime();
    var endTime = new Date(startTime_pdd1.valueOf() + lastTime_pdd * 1000).getTime();
    var Panningingtime = startTime_pdd1 - delaytime_pdd; 
     
     
    reviewtime();
     //判斷實際時間是否大于搶購時間
function reviewtime(){
    var tt = getNow();
       if (tt > Panningingtime) {
            console.warn("您的時間已經錯過了哦,請重新輸入時間!");
            sleep(2000);
            console.clear();
            console.hide();
            threads.shutDownAll();
        }
       if (tt < Panningingtime){
            logWithTime("您的搶券時間為:" + formatDate(Panningingtime));
            logWithTime("距離搶券時間還剩"+(startTime_pdd1-tt)/1000+"秒"+"請耐心等待");
            }
        }
         // 檢測是否在商品詳情頁
x = setInterval(function () {
    var t = getNow();
    if (t < Panningingtime) {
        if (className("android.widget.RelativeLayout").depth(6).drawingOrder(9).exists()) {
            if (DetailPage === 0) {
                logWithTime("已進入商品詳情頁,請等待......");
                DetailPage++;
                notDetailPage = 0
            }
 
        } else {
            if (notInDetailPage === 0) {
                logWithTime("未進入商品詳情頁,請進入,否則進行搶券!");
                DetailPage = 0;
                notInDetailPage++
            }
        }
    } else {
        not_in_Detail_Page = 0;  // 商品詳情頁狀態復位
        clearInterval(x)
    }
}, 500);
 
z = setInterval(function () {
    var t = getNow();
    if(t >= Panningingtime && t < endTime){                
        logWithTime("開始搶券")
        開始搶券()
        clearInterval(z);        
    }  
  },10)      
}
 
function 開始搶券()
{
    var 頻率 = ui.pinlv_pdd.text()
    var endTime = lastTime_pdd * 1000;
     
 
    threads.start(function(){
        setInterval(function(){ 
    if(className("android.widget.TextView").text("領取").depth(8).drawingOrder(3).exists())
    {
        className("android.widget.TextView").text("領取").depth(8).drawingOrder(3).click()
    }
    },頻率);
    });
 
    threads.start(function(){
        setInterval(function(){ 
            sleep(endTime)
            logWithTime("超出預定搶購時長,搶購結束");
            device.cancelKeepingAwake();
            Panic_buying_end();                  
    },頻率)
}) 
}
});
 
function Panic_buying_end(){    
    device.cancelKeepingAwake()//關閉螢屏常亮
    logWithTime("本次搶購結束");
    threads.shutDownAll()
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/202341.html

標籤:其他

上一篇:【appium】appium自動化入門之基本引數完整版(67個appium基本引數和關鍵字)

下一篇:Codeforces Round #680 (Div. 2, based on Moscow Team Olympiad)A~D

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more