//=================================================================================
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/qita/201498.html
標籤:其他
上一篇:Android撰寫電話撥號器
下一篇:RadioButton
