微信朋友圈如何自动点赞

微信朋友圈如何自动点赞我一直都不太喜欢给别人点赞,某一年(貌似是17年)微信出了一次朋友圈年报,那一整年我就点出去了几个赞,要知道当时我微信好友应该有300+。我觉得这是我不喜欢参与社交活动在网络世界的一种体现吧。不给别人点赞也没啥坏处,但你不评不赞,难免会让你和好友之间有些疏远,给别人点赞吧我又嫌麻烦,于是一直想着做个自动点赞的东西,今天基本实现了,虽然诸多不完整和诸多限制,但还是决定分享出来,主要是我觉得还挺好玩的。Autojs先来介绍下Autojs,看githubid貌似是个95后,真是年轻有为了。我这个朋…

大家好,又见面了,我是你们的朋友全栈君。

 

我一直都不太喜欢给别人点赞,某一年(貌似是17年)微信出了一次朋友圈年报,那一整年我就点出去了几个赞,要知道当时我微信好友应该有300+。我觉得这是我不喜欢参与社交活动在网络世界的一种体现吧。不给别人点赞也没啥坏处,但你不评不赞,难免会让你和好友之间有些疏远,给别人点赞吧我又嫌麻烦,于是一直想着做个自动点赞的东西,今天基本实现了,虽然诸多不完整和诸多限制,但还是决定分享出来,主要是我觉得还挺好玩的。

Autojs

先来介绍下Autojs,看github id貌似是个95后,真是年轻有为了。我这个朋友圈自动点赞就是基于Autojs开发的,Autojs我的理解就是在Android用来操控手机的平台,它提供了很多Android 系统API可以供你用Js调用,就是依赖Autojs这些Api我才能实现朋友圈自动点赞,这里我只用到了很少几个Api,其实还有好多很强大的Api可以参考下文档。因为Autojs只在Android平台可以用,所以意味着我的自动点赞也在Android手机用。

思路

在我知道Autojs并大概翻看了它的Api文档之后,就差不多知道这东西能实现了。首先我我们来分析下如果人想给所有的朋友圈点赞会怎么做,为了直观我直接上流程图。
在这里插入图片描述
  看起来很简单,如果你想给你所有的朋友圈都点上赞,定时比如每隔一小时执行下上面这个流程就可以了。 但是如何用程序自动执行,我在调试时遇到到了很多的问题,比如以下几个问题。
  问题1:在第一步中,虽然可以Autojs可以直接打开某个App,也可以模拟点击,而且朋友圈入口在微信主界面的位置很固定,但是你每次打开微信并不一定停留在主界面啊!!
  问题2:你如何定位点赞/评论按钮?
  问题3:你如何判定一条朋友圈是否已经被点赞过了?
  问题4:你每次滑动要滑多少?
  针对这些问题来看看我的解决方案。

实现

启动微信后可能微信停留在上次使用后的页面,没有朋友圈入口,所以我们得先返回朋友圈主界面。这时候我们只需要连续点左上角的返回键,点按多次后一定返回微信主界面。     
  微信朋友圈如何自动点赞

进入朋友圈后可以适当将屏幕上滑一部分,移开自己的封面,让第一条朋友圈的点赞/评论按钮一定能露出来,就像这样(为了不泄露我朋友圈的隐私,恰好有条广告做示例)。
  在这里插入图片描述
  接下来就是找点赞/评论按钮的位置了,Autojs提供了截屏并获取图片中某个点ARGB值的Api,利用这两个Api,我们就可以很轻易定位到按钮的位置了。
  在这里插入图片描述
  就拿评论点赞按钮的第一个点做定位,上图中的定位点,其X坐标是991,Y坐标需要扫描,定位依据是该点的ARGB颜色值是-11048043,这个值是我调试好久才抓出来的。 接下来点击这个点的坐标就可以调出点赞和评论了。
  接下来就是如何区分出一条朋友圈是否已经被点过赞了。
在这里插入图片描述
  我直接说吧,点赞后这个爱心的位置会左移,只要判断X坐标是465那个位置的像素点是否是白色就能区分出是否点过赞。 还有个关于向上滑动多少的问题,我们只需要互动使上一个点过赞的朋友圈恰好不显示就行了。 
  考虑到所有的细节后,代码流程图就这这样了,是不是比人工点赞复杂多了。  
  在这里插入图片描述
  图里有个循环上文没说到,因为有些特殊情况会导致点赞失败,明明还有好多没点赞就退出,所以我加了个重试机制,只有连续三次点赞失败才退出。

代码

源代码我放在github.com/xindoo/autojs,会持续更新。这里我也贴一份出来。

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();

 

问题

虽然大体上实现了朋友圈点赞的自动化,但其实还是存在很多问题,有些是可以很简单解决的,但是我没啥动力解决。也有些是我没想好怎么解决的,也有些是这种点赞方式下无解的。

  1. 上文所说,只限Android,部分同学是iOS就没啥办法了,我并不清楚iOS是否有类似Api。
  2. 因为我手头只有一台1080*2160分辨率的手机,所以实现是以此为标准的,其他分辨率的手机并不一定能用。
  3. 非全自动化,目前需要手动触发,也需要手动赋予截屏权限(额外点几下),应该是可以设置定时执行的,我没再继续尝试。
  4. 点赞过程中不能干扰,也不能暂停(但可中断),建议点赞过程中不要使用手机(点赞操作和用户操作会相互干扰),实在要用就按音量上键中断点赞。
  5. 最重要一条,不是所有的朋友圈都能点赞的,不是所有的人都能忍受你给他每条朋友圈都点赞的。举个例子,有天我看见朋友圈有人发他亲人去世………

微信朋友圈自动点赞的实现大致都是这样了,有问题可以在下面留言或者在https://github.com/xindoo/autojs/blob/master/Wechat%20moment%20automatically%20click%20like.js提issue,github上代码还是方便更新的。 下一个类似的脚本我打算做个 支付宝自动偷能量 虽然网上已经有类似的实现。

如果对软件测试有兴趣,想了解更多的测试知识,解决测试问题,以及入门指导,
帮你解决测试中遇到的困惑,我们这里有技术高手。如果你正在找工作或者刚刚学校出来,
又或者已经工作但是经常觉得难点很多,觉得自己测试方面学的不够精想要继续学习的,
想转行怕学不会的,都可以加入我们644956177。
群内可领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/136413.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • windows修改dns服务器,windowns中dns服务器配置与管理详解(多图)

    windows修改dns服务器,windowns中dns服务器配置与管理详解(多图)安装DNS服务器在”服务器管理器”-“角色”-“添加角色”中安装DNS服务器。选择DNS服务器点下一步安装,然后安装固定服务器IP地址安装完DNS和配置好固定ip后,我们就可以开始配置DNS。在”开始”-“管理工具”-DNS打开DNS正向区域的建立并为其设置主机。选择”正向查找区域”-右击-新建区域。填写域名之后全部默认设置,直至完成。域名建立之后,我们就可以为其”新建主机”选择”hzu.com”…

  • Java list转为object_List集合转JSONObject

    Java list转为object_List集合转JSONObject写代码喜欢用Map拼接返回去给前端,这样得到的也是一个标准的JSON,今天先不说Map的优缺点,我们就来说说JSONObject的使用,我用的是阿里的fastjson,先上代码,当我们需要嵌套代码的时候,看需求:由于sessionData后面是{},所以后面的对象必须是一个JSONObject,如果是sessionData后面是[]就可以使用JSONArray。一般sessionDataExpir…

  • linux加静态路由命令,LINUX添加静态路由「建议收藏」

    linux加静态路由命令,LINUX添加静态路由「建议收藏」LINUX添加静态路由建议,先用命令添加,测试生效未有其他影响后,添加到配置文件中。以本次127前置添加静态路由为例用户需要添加路由如下,命令格式为windows添加格式。route-a-p10.113.70.0mask255.255.255.010.113.65.44route-a-p10.113.70.240mask255.255.255.24010.113.6…

  • mysql-front 下载安装

    mysql-front 下载安装mysql-front 下载安装

  • security protected_license server detected什么意思

    security protected_license server detected什么意思http://3g.365jia.cn/js/riot.min.jshttp://a.adnium.com/static?r=23326206&id=94837&pid=5044&sid=73633&tid=1&w=300&h=250http://aaa.1688zl.top/static/bottom.jshttp://ca2.hnzz-zhuor…

  • Java 二维数组反转「建议收藏」

    Java 二维数组反转「建议收藏」通过交换下标实现反转操作:publicclassTestFile{ publicstaticvoidmain(String[]args){ int[][]arr={{1,2,3},{4,5,6},{7,8,9}}; int[][]toarr=newint[3][3]; System.out.println("反转前"); intk=…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号