抖音極速版邀請碼: 896357244 看文章加關注點分享都不用...加下邀請碼就好。android
史上最全面得抖音極速版實戰代碼分享:緩存
一、自動滑動app
二、自動簽到dom
三、自動點贊ide
四、自動評論測試
五、曲線直線滑動區分日誌
六、自動機率設定code
七、滑動次數限制視頻
八、時間間隔限制並隨機4Sip
九、增長各種行日誌如toastlError等
十、依據機率隨機上滑
十一、依據機率隨機下滑
十二、關閉青少年窗口
1三、關閉廣告
1四、自動清理內存
auto.waitFor();//判斷和等待開啓無障礙 let see_count = 1000;// rawInput('請輸入滑動次數','1000');//手動輸入滑動次數默認是1000次。 let appName = "抖音極速版" app.launchApp(appName);//只有一個快手極速版因此直接Launch就能夠,不用包名 console.show(); //開啓日誌(懸浮窗權限) console.info(appName); sleep(12000);//等待splash時間手機很差長點 probability=10;//機率自動點贊、評論、關注的機率 timesInterval=8;//間隔時間 CurveBrushScreen=false;//是否曲線滑動true取消滑動false直線滑動 adolescentWindows();//關閉青少年窗口 douYiSign(appName); for (var i = 1; i < see_count; i++) { toastLog(appName + "滑動" + i + "次" + "總計:" + see_count + "次");//系統自帶目前我huweinova不顯示還不知道爲啥 let x1 = device.width / 2; let y1 = device.height - (device.height * 0.2) let x2 = device.width / 2; let y2 = device.height * 0.1 let pressTime = 300; douYinCloseFriendTip(); douYinAutoComment(parseInt(probability)); douYinRandomHeart(probability);//隨機關注百分之一的機率 douYinRandomFollow(probability);//隨機關注百分之一的機率 randomUpSildeScreen(x1, y2, x1, y1, pressTime, probability); randomDownSildeScreen(x1, y1, x2, y2, pressTime, timesInterval, probability); slideScreenDown(x1, y1, x2, y2, pressTime, timesInterval, CurveBrushScreen); } //關閉當前程序 home();//回到首頁 var CommentKeyWord = [ '我是App小助手關注了你你要關注我哦!', '山高路遠坑深,大軍縱橫馳奔,誰敢橫刀立馬?唯有點贊加關注大軍!', '個人將來不是夢我相信你也是!', '身同感覺', '風雨送春歸,飛雪迎春到。', '俏也不爭春,只把春來報。', '天如有情天亦老...', '...人間正道是滄桑', '...喜歡的人喜歡的事亦不能表達喜歡的心...', '三分春色二分愁,更一分風雨', ]; /** * 青少年窗口 */ function adolescentWindows() { if (text("我知道了").exists()) { text("我知道了").findOnce().click(); } if (text("知道了").exists()) { text("知道了").findOnce().click(); } } /** * 關閉好友紅包提示 */ function douYinCloseFriendTip() { if (className("android.widget.ImageViewid").id("baq").exists()) { className("android.widget.ImageViewid").id("baq").findOnce().click(); } } /** * 抖音簽到 */ function douYiSign(appName) { try { let ImageView = className("android.widget.ImageView").depth(3).find(); if (ImageView.length == 3) { ImageView[0].click(); sleep(3000); swipe(device.width / 2, device.height - 200, device.width / 2, 500, 700); sleep(3000); if (text("明日簽到").exists()) { console.log("抖音明日簽到"); let b = text("明日簽到").findOnce().bounds(); if (click(b.centerX(), b.centerY())) { sleep(1000); back();//返回到視頻頁面 } else { back();//返回到視頻頁面 } } if (desc("明日簽到").exists()) { console.log("desc抖音明日簽到"); let b = desc("明日簽到").findOnce().bounds(); if (click(b.centerX(), b.centerY())) { sleep(1000); back();//返回到視頻頁面 } else { back();//返回到視頻頁面 } } } sleep(500); } catch (error) { console.error(error); } } /** * 清理緩存 */ function douYinClearAppCache() { if (className("android.widget.TextView").text("我").exists()) { let b = className("android.widget.TextView").text("我").findOnce().bounds(); let clickResult = click(b.centerX(), b.centerY()); sleep(3000); if (clickResult) { if (className("android.widget.ImageView").desc("更多").exists()) { let b = className("android.widget.ImageView").desc("更多").findOnce().bounds(); let clickResult = click(b.centerX(), b.centerY()); if (clickResult) { sleep(5000); if (className("android.widget.TextView").text("設置").exists()) { toastLog("Click設置"); let b = className("android.widget.TextView").text("設置").findOnce().bounds(); click(b.centerX(), b.centerY()); } sleep(3000); swipe(303, 1328, 335, 71, 300); if (className("android.widget.TextView").text("清理緩存").exists()) { let b = className("android.widget.TextView").text("清理緩存").findOnce().bounds(); click(b.centerX(), b.centerY()); } sleep(3000); if (className("android.widget.TextView").text("清理").exists()) { let b = className("android.widget.TextView").text("清理").findOnce().bounds(); let result = click(b.centerX(), b.centerY()); if (result) { toastLog("清理成功"); if (className("android.widget.ImageView").exists()) { className("android.widget.ImageView").findOnce().click(); } else { back(); } } } } } } else { toastLog("點擊個人失敗"); } } } /** * 自動評論 * 這個費勁 * 一、首先回答按鈕很差點擊,用ID常常找不到(因此採用遍歷的方法) * 二、答覆框點擊不上由於Autojs分析的一團亂根本點不上輸入庫的區域,只能在周圍作文章,覺得@和表情的父親是輸入框結果也不行。 * 後來發現點擊表情也彈出評論輸入框,就是多了表情,因而乎賦值。賦值直接setText也不行,最後加了個順序號解決。 * 三、目前用的是提交按鈕的ID,這個ID多是個坑。 */ function douYinAutoComment(probability) { try { let randomIndex = random(1, parseInt(probability)); if (randomIndex == 1) { let comment = CommentKeyWord[Math.floor(Math.random() * CommentKeyWord.length)]; if (className("android.widget.FrameLayout").id("pn").exists()) { let clickResult = className("android.widget.FrameLayout").id("pn").findOnce().click(); if (clickResult) { sleep(3000); if (className("android.widget.ImageView").desc("表情").exists()) { let b = className("android.widget.ImageView").desc("表情").findOnce().bounds();//獲取評論按鈕的rect if (click(b.centerX(), b.centerY())) { sleep(1000); setText(0, comment); if (className("android.widget.ImageView").id("q1").exists()) { className("android.widget.ImageView").id("q1").findOnce().click(); 3 } back(); sleep(1000); } } } } } } catch (error) { console.error(error); } } function douYinRandomHeart(probability) { index = random(1, parseInt(probability)); if (index == 1) { let frameLayouts = className("android.widget.FrameLayout").depth(7).selected(false).clickable(true).find(); toastLog("FrameLayout" + frameLayouts.length); if (frameLayouts.length == 9) { frameLayouts[frameLayouts.length - 6].click(); } } } function douYinRandomFollow(probability) { try { index = random(1, parseInt(probability)); if (index == 1) { let followMes = className("android.widget.Button").desc("關注").find(); if (followMes.length > 0) { followMes[followMes.length - 1].click(); } } } catch (error) { console.error(error); } } function autoCashOut() { if (className("android.view.View").text("元").exists()) { toastLog("現金收益"); let b = className("android.view.View").text("元").findOne().parent().bounds(); let clickResult = click(b.centerX(), b.centerY()); sleep(3000); if (clickResult) { if (className("android.view.View").text("去提現").exists()) { let b = className("android.view.View").text("去提現").findOne().bounds(); let clickResult = click(b.centerX(), b.centerY()); sleep(3000); if (clickResult) { if (className("android.view.View").text("提現30.00元").exists()) { toastLog("提現30"); let b = className("android.view.View").text("提現30.00元").findOnce().parent().bounds(); let clickResult = click(b.centerX(), b.centerY()); if (clickResult) { if (text("當即提現").exists()) { toastLog("當即提現"); let clickResult = text("當即提現").findOnce().click(); toastLog(clickResult); } } } } } } } } /** * 貝塞爾曲線 * @param {座標點} ScreenPoint * @param {偏移量} Offset */ function bezier_curves(ScreenPoint, Offset) { cx = 3.0 * (ScreenPoint[1].x - ScreenPoint[0].x); bx = 3.0 * (ScreenPoint[2].x - ScreenPoint[1].x) - cx; ax = ScreenPoint[3].x - ScreenPoint[0].x - cx - bx; cy = 3.0 * (ScreenPoint[1].y - ScreenPoint[0].y); by = 3.0 * (ScreenPoint[2].y - ScreenPoint[1].y) - cy; ay = ScreenPoint[3].y - ScreenPoint[0].y - cy - by; tSquared =Offset * Offset; tCubed = tSquared * Offset; result = { "x": 0, "y": 0 }; result.x = (ax * tCubed) + (bx * tSquared) + (cx * Offset) + ScreenPoint[0].x; result.y = (ay * tCubed) + (by * tSquared) + (cy * Offset) + ScreenPoint[0].y; return result; } /** * 滑動(默認機率是百分之三十) * @param {*} qx * @param {*} qy * @param {*} zx * @param {*} zy * @param {*} time * @param {*} timesInterval */ function slideScreenDown(qx, qy, zx, zy, time, timesInterval,CurveBrushScreen) { if (CurveBrushScreen) { curveDown(qx, qy, zx, zy, time, timesInterval); //曲線機率 } else { lineDown(qx, qy, zx, zy, time, timesInterval); //直線機率 } } /** * 機率0-9 大於3的時候採用曲線機率 小於3的時候直線機率 */ function randomFunction(){ return Math.floor(Math.random() * 10); } function curveDown(qx, qy, zx, zy, time,timesInterval){ toastInfo("曲線滑動"); var xxy = [time]; var point = []; var dx0 = { "x": qx, "y": qy }; var dx1 = { "x": random(qx - 100, qx + 100), "y": random(qy, qy + 50) }; var dx2 = { "x": random(zx - 100, zx + 100), "y": random(zy, zy + 50), }; var dx3 = { "x": zx, "y": zy }; for (var i = 0; i < 4; i++) { eval("point.push(dx" + i + ")"); }; for (let i = 0; i < 1; i += 0.08) { let newPoint=bezier_curves(point, i); xxyy = [parseInt(newPoint.x), parseInt(newPoint.y)] xxy.push(xxyy); } gesture.apply(null, xxy); let randomMin = timesInterval * 1000; let randomMax = (parseInt(timesInterval) + 2) * 1000; let delayTime = random(randomMin, randomMax); sleep(delayTime); } /** * 屏幕向下滑動並延遲8至12秒 */ function lineDown(startX, startY, endX, endY, pressTime, timesInterval) { toastInfo("屏幕向下滑動"); swipe(startX, startY, endX, endY, pressTime); let randomMin = timesInterval * 1000; let randomMax = (parseInt(timesInterval) + 2) * 1000; let delayTime = random(randomMin, randomMax); sleep(delayTime); } /** * 按照指定機率隨機上滑 * @param {*} startX * @param {*} startY * @param {*} endX * @param {*} endY * @param {*} pressTime * @param {*} probability */ function randomUpSildeScreen(startX, startY, endX, endY, pressTime, probability) { let randomIndex = random(1, parseInt(probability)); if (randomIndex == 1) { swipe(startX, startY, endX, endY, pressTime); delayTime = random(12000, 15000); sleep(delayTime); } } /** * 連續下滑對上一個無興趣 * 其實得和上滑作個排他,既然無興趣不要在上滑 */ function randomDownSildeScreen(startX, startY, endX, endY, pressTime, timesInterval, probability) { let randomIndex = random(1, parseInt(probability)); if (randomIndex == 1) { swipe(startX, startY, endX, endY, pressTime); sleep(2000); swipe(startX, startY, endX, endY, pressTime); sleep(timesInterval); } } /** * 輸出Tosat和Info日誌 * @param {日誌消息} messagge */ function toastInfo(message) { toast(message) console.info(message) } /** * 輸出Tosat和Error日誌 * @param {日誌消息} messagge */ function toastError(message) { toast(message) console.error(message) } function toastLog(message) { toast(message) console.log(message) } function toastWarn(message) { toast(message) console.warn(message) }
測試機型華爲Mate10和華爲榮耀V8.
鄭重聲明技術交流,腳本如何使用本人概不負責。
另外AutoJs腳本不兼容全部機型,不兼容的別在評論區和私信裏面說我是騙子,但願各位道友成熟點。