前言:
雙11來了,我也是一個剁手黨,當然要想辦法能省點錢算一點,雙11的活動是攢喵幣,和往年一樣,點擊各種商家頁面來獲取,這個過程是一個重複的過程,往年我都是手動點完的,但是今年真不想再繼續做這些重複的事了,於是就有了下面這個自動腳本.
技術調研:
在網上也搜索了好多的方式方法,最終還是使用了autojs這個腳本工具,正所謂物理外掛最爲致命,這個也有點類似物理外佳了.
實現效果:
還有自動瀏覽店鋪的功能,由於太大就沒上傳完整的效果圖了
實現代碼:
這次雙11,在淘寶與支付寶中都有活動,所以寫了兩個項目,不過代碼邏輯大體都差不多,主要是點擊到活動頁面=>等待15秒 => 返回上一層頁面... 然後循環
代碼貼上:
var baseWidth = 1080,baseHeight = 2400; var height = device.height; var width = device.width; setScreenMetrics(baseWidth,baseHeight); threads.start(function(){ events.observeKey(); events.on("key_down", function(keyCode, events){ if(keyCode == keys.volume_up){ toastLog('停止腳本使用') exit(); } }); }); var canCapture = requestScreenCapture(); if(!canCapture){ toast('請授權截圖!') exit() } launchApp('手機淘寶') sleep(3000); click(800,1218); sleep(6000); let catImg = images.read('/sdcard/catImg.jpg'); if(catImg === null){ catImg = images.load('https://pic1.zhimg.com/80/v2-8a9af44ba48b553fbbdafd96475ad47c_1440w.jpeg'); // 圖片不能爲png格式的 無法加載到 catImg.saveTo('/sdcard/catImg.jpg'); } // let screenCaptureImg2 = images.grayscale(screenCaptureImg) // images.save(screenCaptureImg2,'/sdcard/screenCaptureImg2.jpg') sleep(2000); // 如果有11月11日見彈出框 則關閉 var eleven = text('好的,11月11日見').findOnce(); if(eleven){ click('好的,11月11日見'); sleep(2000) } click(942,1973); // 點擊 賺喵幣 sleep(1500) while(true){ var goText = text('去瀏覽').findOnce(); if(goText){ click(goText.bounds().centerX(),goText.bounds().centerY()); sleep(5000) swipe(baseWidth/3,baseHeight - 200,baseWidth/2,200,2000); sleep(13000); back(); sleep(2000); click('領取獎勵'); sleep(1000) }else{ var goSearch = text('去搜索').findOnce(); if(goSearch){ click(goSearch.bounds().centerX(),goSearch.bounds().centerY()); sleep(5000) swipe(baseWidth/3,baseHeight - 200,baseWidth/2,200,2000); sleep(13000); back(); sleep(2000); click('領取獎勵'); sleep(1000); }else{ // 需要更多的變量 var array = ['逛一逛"潮酷新品"(0/2)','逛一逛"潮酷新品"(1/2)','逛一逛"潮流趨勢"(0/2)','逛一逛"潮流趨勢"(1/2)','逛一逛"時尚配飾"(0/2)','逛一逛"時尚配飾"(1/2)','逛一逛"家居百貨"(0/2)','逛一逛"家居百貨"(1/2)']; var goTo = null; for(var i = 0;i<array.length;i++){ var a = text(array[i]).findOnce(); if(a){ goTo = a; break; } } if(goTo){ click(goTo.bounds().centerX(),goTo.bounds().centerY()); sleep(2000) swipe(baseWidth/3,baseHeight - 200,baseWidth/2,200,2000); sleep(15500); back(); sleep(2000); click('領取獎勵'); sleep(1000); }else{ break } } } } toastLog('結束!'); click(974,650); // 點擊右上角關閉 exit(); function readImg(name,url){ let catImg = images.read('/sdcard/'+name); if(catImg === null){ catImg = images.load(url); // 圖片不能爲png格式的 無法加載到 catImg.saveTo('/sdcard/'+name); }; return catImg }
這段代碼是用於淘寶收取喵幣的,前後僅花了2小時不到,這一塊內容還是比較簡單的,主要之前寫過類似的代碼,有些經驗了.
遇到的問題:
1.點擊文字,由於不確定一些字體是圖片還是純文本,所以在調試的時候,都是憑感覺去試
2.活動的文本較多,有些地方情況無法用找圖片的方式來定位要點擊的位置,但是文字內容又不確定,所以只能把可能的文本內容情況給加上,比如這一塊 var array = ['逛一逛"潮酷新品"(0/2)','逛一逛"潮酷新品"(1/2)','逛一逛"潮流趨勢"(0/2)','逛一逛"潮流趨勢"(1/2)','逛一逛"時尚配飾"(0/2)','逛一逛"時尚配飾"(1/2)','逛一逛"家居百貨"(0/2)','逛一逛"家居百貨"(1/2)']; 現在是把我可能遇到的情況都加上了,如果後面支付寶有增刪改查的話,也需要跟着改一下邏輯...
3.手機兼容,由於自己只有一個手機,只能使用自己的手機來測試,雖然官網有說可以通過方法setScreenMetrics(baseWidth,baseHeight)來保持比例,但是自己沒試過 也許還是不行呢.
4.還有各類的點擊可能性,並沒有完成覆蓋,有些去完成的任務只能通過手點來獲取喵幣.
5.autojs是好早之前的框架,現在已經不維護了,有一些es6的語法是不支持的,比如const,let,儘量不用到新語法來寫業務邏輯.
6.各種sleep 需要等待app內容加載完成,如果頁面有不確定因素也是需要延長下一步的執行邏輯的.
總結:
小東西有大用處,在接下來的幾天時間能夠幫助我節省好多的時間,讓自己感覺高大上一些,多探究一些小玩意,對自己以後的職業生涯也有幫助..
原文鏈接: https://www.xiaye0.com/?p=78