用Github上的高星專案,告訴你程式設計師過雙十一的正確姿勢
馬上到“雙十一”了,今年天貓推出了瓜分紅包的活動,可以通過瀏覽店鋪等方式賺取喵幣,為記得更多獲取紅包的機會,而筆者做為程式設計師不願意在京東、天貓上浪費時間。就到Github上去逛了逛,沒想到發現一個可以自動刷喵幣的專案,筆者親測成功,現在把攻略推薦給大家。這個專案整體上說和我之前那個《如何用爬蟲技術幫助孩子秒到心儀的幼兒園》https://blog.csdn.net/BEYONDMA/article/details/87902276的思路類似,都是使用自動按鍵的方式來達到與人工點選相同的效果,並且防止底層的注入帶來的風險。雖然實現不難,但是思路很好。
1.使用攻略
1.下載安裝包
到github上把相關的安裝包下載到手機上https://github.com/sleepybear1113/taobaoVisitingVenues/blob/master/%E6%B7%98%E5%AE%9D%E5%96%B5%E5%B8%81_v1.1.0.apk,
2.嵌入懸浮視窗許可權,這個各個手機不一樣,程式安裝完成後一般都有正確揭示。
3.選擇功能方式:啟動程式,這時會有懸浮視窗出現,先在選擇功能項中選擇“去瀏覽+去逛店”的方式。
4.開啟淘寶,進入喵幣頁面:一般每天首次登陸淘寶APP的“雙十一合夥人”也就是攢喵幣的頁面時,都會有彈出有以下頁面。這個頁面需要大家手工關閉後APP才能正常開始。
4.點選啟動:在懸浮窖上點選開始,就能自動逛淘寶得喵幣了。
5.程式結束:程式執行完成後就自動退出了。
2.程式碼初探
本身這個專案是基於auto.js pro 7.0,其實就是手機版本的按鍵精靈。其中主邏輯都在https://github.com/sleepybear1113/taobaoVisitingVenues/blob/master/src_code/script.js這個指令碼中實現,擷取主要部分說明如下:
toastLog("開始");
/**
* 點選領喵幣的按鈕
* @param delay 點選之後延遲多久進行下一個函式
* @returns {number}
*/
function openBeginningBtnItem(delay) {
let items = textStartsWith("gif;base64").depth(19).find();
console.log("尋找--領喵幣");
if (items.length > 0) {
let item = items[items.length - 1];
console.log("點選--領喵幣");
clickItemInCenter(item);
sleep(delay);
return 1;
}
if (items.length === 0) {
let go = text("領喵幣").findOne(1000);
if (go != null) {
console.log("點選--領喵幣");
clickItemInCenter(go);
sleep(delay);
return 1;
}
}
return -1;
}
/**
* 判斷是否開啟領取中心
* @returns {number}
*/
function isOpenBeginning() {
let signIn = textContains("簽到").findOnce();
if (signIn != null) {
console.log("成功--開啟領取中心");
return 1;
}
return -1;
}
/**
* 確保開啟領取中心
* @param waitDelay
* @returns {number}
*/
function ensureOpenBeginning(waitDelay) {
if (isOpenBeginning() === -1) {
openBeginningBtnItem(waitDelay);
}
if (isOpenBeginning() === 1) return 1;
console.error("失敗--開啟領取中心");
toast("失敗--開啟領取中心");
return -1;
}
function checkIn(flag) {
console.log("判斷店鋪簽到");
if (flag === true) {
let getMoney = desc("簽到領喵幣").findOne(500);
if (getMoney != null) {
clickItemInCenter(getMoney);
console.log("點選簽到");
sleep(2000);
let happyToGet = desc("開心收下").findOnce();
clickItemInCenter(happyToGet);
console.log("店鋪簽到獲得喵幣");
sleep(500);
}
}
}
/**
* 向上滑動
*/
function swipeUp() {
let x = parseInt(deviceWidth / 2);
let duration = 500;
let y = [parseInt(deviceHeight * 0.75), parseInt(deviceHeight * 0.25)];
swipe(x, y[0], x, y[1], duration);
swipe(x, y[0], x, y[1], duration);
}
/**
* 逛店有沒有滿
* @returns {number}
*/
function isFull() {
for (let i = 0; i < 10; i++) {
if (descContains("已達上限").findOnce() || textContains("已達上限").findOnce()) {
console.log("今日已達上限");
return 1;
}
sleep(200);
}
return 0
}
/**
* 執行瀏覽結束的判斷操作
* @returns {number}
*/
function browseFinish() {
for (let i = 0; i < 10; i++) {
let normalFinishDesc = descContains("已獲得").findOnce();
let normalFinishText = textContains("已獲得").findOnce();
let swipeFinishDesc = descContains("任務完成").findOnce();
let swipeFinishText = textContains("任務完成").findOnce();
if (normalFinishDesc != null || swipeFinishDesc != null || normalFinishText != null || swipeFinishText != null) {
console.log("瀏覽結束");
return 0;
}
sleep(250);
}
console.log("瀏覽未知");
return -1;
}
/**
* 判斷進入瀏覽的時候是否需要滑動
* @returns {number}
*/
function judgeWay() {
let timeOut = 1000 * 7;
let delay = 250;
let loops = parseInt(timeOut / delay);
for (let i = 0; i < loops; i++) {
let swipeAppearDesc = descContains("滑動瀏覽得").findOnce();
let swipeAppearText = textContains("滑動瀏覽得").findOnce();
if (swipeAppearDesc != null || swipeAppearText != null) {
console.log("已獲取到滑動瀏覽模式");
return 0;
}
let directBrowseDesc = desc("瀏覽").findOnce();
let directBrowseText = text("瀏覽").findOnce();
if (directBrowseDesc != null || directBrowseText != null) {
if (descContains("00喵幣").findOnce() != null || textContains("00喵幣").findOnce() != null) {
console.log("已獲取到正常瀏覽模式");
return 1;
}
}
sleep(delay);
}
console.log("超時");
return -1;
}
/**
* 關閉領取中心再開啟
* @returns {number}
*/
function reopenAgain() {
console.log("reopen");
let tbs = id("taskBottomSheet").findOnce();
if (tbs == null) return -1;
let close = tbs.child(1);
if (close != null) {
console.log("關閉");
clickItemInCenter(close);
sleep(1000);
return ensureOpenBeginning(2000);
}
return -1;
}
/**
* 點選-去瀏覽 按鈕
* @returns {number}
*/
function clickGoBrowse() {
let browse = text("去瀏覽").findOne(1000);
if (browse != null) {
let guessYouLike = textContains("猜你喜歡").findOnce();
if (guessYouLike != null) {
console.log("出現猜你喜歡");
let pp = browse.parent().bounds().top;
let ppp = guessYouLike.parent().parent().bounds().top;
if (ppp === pp) {
console.log("跳過--猜你喜歡");
let allBrowse = text("去瀏覽").find();
for (let i = 0; i < allBrowse.length; i++) {
let item = allBrowse[i];
if (item.bounds().top !== browse.bounds().top) {
browse = item;
}
}
}
}
console.log("點選--去瀏覽");
clickItemInCenter(browse);
return 1;
}
return -1;
}
/**
* 迴圈執行瀏覽操作
*/
function runGoBrowse() {
let isSuccess = 1;
// 進行迴圈瀏覽
for (let i = 0; i < 50; i++) {
isSuccess = ensureOpenBeginning(2000); // 開啟領取中心
if (isSuccess !== 1) break; //開啟失敗就 -1
// 每 5 次重新開關領取中心進行重新整理
if (i % 5 === 0) {
reopenAgain();
}
// 點選去瀏覽,如果沒找到 去瀏覽 的按鈕,那就關閉領取中心再開啟,三次
for (let j = 0; j < 3; j++) {
isSuccess = clickGoBrowse();
if (isSuccess !== 1) {
reopenAgain();
} else break;
}
if (isSuccess === -1) break; //如果 3 次之後還是不行,那就 -1
toastLog(i);
let jw = judgeWay(); //去瀏覽之後,判斷是不是滑動瀏覽。這裡最多延時 7s
sleep(1000);
// 進行滑動。如果是滑動的話,就是店鋪,判斷是否有店鋪簽到的操作。
if (jw === 0) {
checkIn(isCheckIn);
swipeUp();
} else if (jw === -1) { //如果沒有滑動瀏覽,那就可能不需要,或者瀏覽到上限了
if (isFull() === 1) { // 這裡的最多延時 2s
console.log("已達上限");
backToBefore();
reopenAgain();
continue;
}
}
// 這裡通過不同的情況區分不同的延時
if (jw === -1) {
sleep(1000 * 10);
console.log("10s");
} else {
sleep(1000 * 14);
console.log("14s");
}
let isF = browseFinish(); //右下角是否出現瀏覽完成類似的字樣。最多延時 2.5s
if (isF === 0) {
console.log("瀏覽結束,返回");
} else if (isF === -1) {
console.log("瀏覽未正常結束,返回");
}
backToBefore();
}
}
以上就是我今天在Github上看到的驚喜,不知道對於各位讀者能否有幫助。
相關文章
- 大資料告訴你買車的正確姿勢!大資料
- 程式設計師玩連連看的正確姿勢程式設計師
- Android Studio 專案匯入的正確姿勢Android
- Git和GitHub的正確開啟姿勢Github
- Goland 開啟一個專案的正確姿勢GoLand
- 閱讀前端專案原始碼的正確姿勢前端原始碼
- SpringBoot專案中使用快取Cache的正確姿勢!!!Spring Boot快取
- 翻譯 | 新手開始學習程式設計的正確姿勢程式設計
- 3分鐘短文:十年窖藏,Laravel告訴你表單驗證的“正確姿勢”Laravel
- Git Bash 提交程式碼的正確姿勢Git
- git commit 的正確姿勢GitMIT
- TiDB 的正確使用姿勢TiDB
- Redis的正確使用姿勢Redis
- 國內銷量持續領跑,榮耀告訴你切入AI手機的正確姿勢AI
- 從技術思維角度聊一聊『程式設計師』擺地攤的正確姿勢程式設計師
- DDD建模後寫程式碼的正確姿勢(Java、dotnet雙平臺)Java
- 正確姿勢使用vue cli3建立專案Vue
- Spring Boot 3.2專案中使用快取Cache的正確姿勢!!!Spring Boot快取
- 用 JavaScript 刷 LeetCode 的正確姿勢【進階】JavaScriptLeetCode
- 轉行轉崗的正確姿勢,你知道嗎?
- laravel 使用 es 的正確姿勢Laravel
- 使用列舉的正確姿勢
- 玩轉 Ceph 的正確姿勢
- 提意見的正確"姿勢"
- 開啟Git的正確姿勢Git
- 使用快取的正確姿勢快取
- 擼.NET Core的正確姿勢
- 「Vue實踐」專案升級vue-cli3的正確姿勢Vue
- 讀取ClassPath下resource檔案的正確姿勢
- 這才是程式碼簽名管理的正確姿勢,你Pick了嗎?
- 程式設計師正確看程式碼的方式程式設計師
- Postman 正確使用姿勢Postman
- 學習Linux命令的正確姿勢Linux
- Spring Boot使用AOP的正確姿勢Spring Boot
- npm run dev 的正確使用姿勢NPMdev
- 原始碼|使用FutureTask的正確姿勢原始碼
- 使用 react Context API 的正確姿勢ReactContextAPI
- 在vscode使用editorconfig的正確姿勢VSCode