微信朋友圈自動點贊

  我一直都不太喜歡給別人點贊,某一年(貌似是17年)微信出了一次朋友圈年報,那一全年我就點出去了幾個贊,要知道當時我微信好友應該有300+。我以爲這是我不喜歡參與社交活動在網絡世界的一種體現吧。不給別人點贊也沒啥壞處,但你不評不讚,不免會讓你和好友之間有些疏遠,給別人點贊吧我又嫌麻煩,因而一直想着作個自動點讚的東西,今天基本實現了,雖然諸多不完整和諸多限制,但仍是決定分享出來,主要是我以爲還挺好玩的。git

Autojs

  先來介紹下Autojs,看github id貌似是個95後,真是年輕有爲了。我這個朋友圈自動點贊就是基於Autojs開發的,Autojs個人理解就是在Android用來操控手機的平臺,它提供了不少Android 系統API能夠供你用Js調用,就是依賴Autojs這些Api我才能實現朋友圈自動點贊,這裏我只用到了不多幾個Api,其實還有好多很強大的Api能夠參考下文檔。由於Autojs只在Android平臺能夠用,因此意味着個人自動點贊也在Android手機用。github

思路

  在我知道Autojs並大概翻看了它的Api文檔以後,就差很少知道這東西能實現了。首先我咱們來分析下若是人想給全部的朋友圈點贊會怎麼作,爲了直觀我直接上流程圖。
微信

在這裏插入圖片描述

  看起來很簡單,若是你想給你全部的朋友圈都點上贊,定時好比每隔一小時執行下上面這個流程就能夠了。 可是如何用程序自動執行,我在調試時遇到到了不少的問題,好比如下幾個問題。   問題1:在第一步中,雖然能夠Autojs能夠直接打開某個App,也能夠模擬點擊,並且朋友圈入口在微信主界面的位置很固定,可是你每次打開微信並不必定停留在主界面啊!!   問題2:你如何定位點贊/評論按鈕?   問題3:你如何斷定一條朋友圈是否已經被點贊過了?   問題4:你每次滑動要滑多少?   針對這些問題來看看個人解決方案。 

實現

  啓動微信後可能微信停留在上次使用後的頁面,沒有朋友圈入口,因此咱們得先返回朋友圈主界面。這時候咱們只須要連續點左上角的返回鍵,點按屢次後必定返回微信主界面。        ![在這裏插入圖片描述](img-blog.csdnimg.cn/20190310104… =300x)網絡

  進入朋友圈後能夠適當將屏幕上滑一部分,移開本身的封面,讓第一條朋友圈的點贊/評論按鈕必定能露出來,就像這樣(爲了避免泄露我朋友圈的隱私,剛好有條廣告作示例)。   ![在這裏插入圖片描述](img-blog.csdnimg.cn/20190310095… =300x)   接下來就是找點贊/評論按鈕的位置了,Autojs提供了截屏並獲取圖片中某個點ARGB值的Api,利用這兩個Api,咱們就能夠很輕易定位到按鈕的位置了。
  ![在這裏插入圖片描述](img-blog.csdnimg.cn/20190310095… =300x)   就拿評論點贊按鈕的第一個點作定位,上圖中的定位點,其X座標是991,Y座標須要掃描,定位依據是該點的ARGB顏色值是-11048043,這個值是我調試很久才抓出來的。 接下來點擊這個點的座標就能夠調出點贊和評論了。
  接下來就是如何區分出一條朋友圈是否已經被點過讚了。
![在這裏插入圖片描述](img-blog.csdnimg.cn/20190310100… =600x)   我直接說吧,點贊後這個愛心的位置會左移,只要判斷X座標是465那個位置的像素點是不是白色就能區分出是否點過贊。 還有個關於向上滑動多少的問題,咱們只須要互動使上一個點過讚的朋友圈剛好不顯示就好了。    考慮到全部的細節後,代碼流程圖就這這樣了,是否是比人工點贊複雜多了。     app

在這裏插入圖片描述
  圖裏有個循環上文沒說到,由於有些特殊狀況會致使點贊失敗,明明還有好多沒點贊就退出,因此我加了個重試機制,只有連續三次點贊失敗才退出。 

代碼

  源代碼我放在github.com/xindoo/auto…,會持續更新。這裏我也貼一份出來。函數

function enterWechatMoment() {
    app.launch("com.tencent.mm");
    //確保返回到微信主界面
    sleep(200);
    click(692,2073);

    // 連續按屢次返回,確保回到網協主界面 
    for (var i = 0; i < 5; i++) {
        click(50,140);
        sleep(100);
    }

    sleep(50);
    // 點微信 發現
    click(692,2073);
    sleep(50);

    // 點朋友圈入口
    click(500,300);
    sleep(1000);
}

function registEvent() {
    //啓用按鍵監聽
    events.observeKey();
    //監聽音量上鍵按下
    events.onKeyDown("volume_down", function(event){
        toast("腳本手動退出");
        exit();
    });
}

function prepare() {
    // 雙擊頂部更新朋友圈 
    click(500, 150);
    sleep(100);
    click(500, 150); 

    // 等2s 微信朋友圈更新完成 
    sleep(3000);

    // 向下滑至第一條朋友圈 
    swipe(550, 1200, 550, 200, 200);

    if(!requestScreenCapture()){
        tLog("請求截圖失敗");
        exit();
    }
    var image = captureScreen();
    sleep(2000);
}

function clickLike() {
    sleep(1000);
    var image = captureScreen();
    var arrs = [-1];
    var x = 991;
    var buttonColor = -11048043;

    // 函數返回這次點贊是否成功,若是沒找到點贊按鈕或者已點贊返回false,作法是否繼續的判斷
    var isSucceed = true;

    // 掃描出點贊評論按鈕的位置,兩個點的ARGB顏色爲-11048043 
    for(var y = 250; y < 1920; y++) {
        var color = images.pixel(image, x, y);

        // 白色 背景色,跳過
        if (color == -1) {
            continue;
        }
        if (color == buttonColor) {
            // 按下評論點贊按鈕 
            click(x, y)
            sleep(1000);

            // 從新截圖,找到點贊心形按鈕的位置
            var clickimage = captureScreen();

            // 若是這個點的顏色是-1,表示這條朋友圈已經點過讚了,返回點贊失敗false
            if (images.pixel(clickimage, 465, y) != -1) {
                // 點贊
                click(523, y);
            } else {
                isSucceed = false;
            }
            sleep(2000);
            // 往下滑動到下一條朋友圈的位置 
            swipe(550, y+200, 550, 150, 200);
            return isSucceed;
        }
    }

    // 若是執行到這,多是某條朋友圈評論太多,一屏裏沒有點贊評論按鈕,就滑動大半屏再試一次
    swipe(550, 1600, 550, 150, 200);
    return false;
}

//程序主入口
function start(){
    //註冊音量鍵上被按下時退出腳本的執行 
    registEvent();

    // 確保進入微信朋友圈
    enterWechatMoment();
    prepare();
    
    var retry = 3;
    var cnt = 0;
    // 連續失敗三次就退出 
    while(retry > 0) {
        // 若是是false,表示已經點過讚了 
        if (clickLike() == false) {
            retry--;
        } else {
            retry = 3;
            cnt++;
        }
    }
    
    toast("本次總共點贊" + cnt + "條");
    // 返回微信主界面
    click(50,140);
    exit();
}
start();
複製代碼

問題

  雖然大致上實現了朋友圈點讚的自動化,但其實仍是存在不少問題,有些是能夠很簡單解決的,可是我沒啥動力解決。也有些是我沒想好怎麼解決的,也有些是這種點贊方式下無解的。spa

  1. 上文所說,只限Android,部分同窗是iOS就沒啥辦法了,我並不清楚iOS是否有相似Api。
  2. 由於我手頭只有一臺1080*2160分辨率的手機,因此實現是以此爲標準的,其餘分辨率的手機並不必定能用。
  3. 非全自動化,目前須要手動觸發,也須要手動賦予截屏權限(額外點幾下),應該是能夠設置定時執行的,我沒再繼續嘗試。
  4. 點贊過程當中不能干擾,也不能暫停(但可中斷),建議點贊過程當中不要使用手機(點贊操做和用戶操做會相互干擾),實在要用就按音量上鍵中斷點贊。
  5. 最重要一條,不是全部的朋友圈都能點讚的,不是全部的人都能忍受你給他每條朋友圈都點讚的。舉個例子,有天我看見朋友圈有人發他親人去世………

  微信朋友圈自動點讚的實現大體都是這樣了,有問題能夠在下面留言或者在github.com/xindoo/auto…提issue,github上代碼仍是方便更新的。 下一個相似的腳本我打算作個 支付寶自動偷能量 雖然網上已經有相似的實現。調試

相關文章
相關標籤/搜索