我一直都不太喜欢给别人点赞,某一年(貌似是17年)微信出了一次朋友圈年报,那一全年我就点出去了几个赞,要知道当时我微信好友应该有300+。我以为这是我不喜欢参与社交活动在网络世界的一种体现吧。不给别人点赞也没啥坏处,但你不评不赞,不免会让你和好友之间有些疏远,给别人点赞吧我又嫌麻烦,因而一直想着作个自动点赞的东西,今天基本实现了,虽然诸多不完整和诸多限制,但仍是决定分享出来,主要是我以为还挺好玩的。git
先来介绍下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:你每次滑动要滑多少?
针对这些问题来看看个人解决方案。 微信
启动微信后可能微信停留在上次使用后的页面,没有朋友圈入口,因此咱们得先返回朋友圈主界面。这时候咱们只须要连续点左上角的返回键,点按屡次后必定返回微信主界面。
网络
进入朋友圈后能够适当将屏幕上滑一部分,移开本身的封面,让第一条朋友圈的点赞/评论按钮必定能露出来,就像这样(为了避免泄露我朋友圈的隐私,刚好有条广告作示例)。
接下来就是找点赞/评论按钮的位置了,Autojs提供了截屏并获取图片中某个点ARGB值的Api,利用这两个Api,咱们就能够很轻易定位到按钮的位置了。
就拿评论点赞按钮的第一个点作定位,上图中的定位点,其X坐标是991,Y坐标须要扫描,定位依据是该点的ARGB颜色值是-11048043,这个值是我调试很久才抓出来的。 接下来点击这个点的坐标就能够调出点赞和评论了。
接下来就是如何区分出一条朋友圈是否已经被点过赞了。
我直接说吧,点赞后这个爱心的位置会左移,只要判断X坐标是465那个位置的像素点是不是白色就能区分出是否点过赞。 还有个关于向上滑动多少的问题,咱们只须要互动使上一个点过赞的朋友圈刚好不显示就好了。
考虑到全部的细节后,代码流程图就这这样了,是否是比人工点赞复杂多了。
图里有个循环上文没说到,由于有些特殊状况会致使点赞失败,明明还有好多没点赞就退出,因此我加了个重试机制,只有连续三次点赞失败才退出。 app
源代码我放在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();
虽然大致上实现了朋友圈点赞的自动化,但其实仍是存在不少问题,有些是能够很简单解决的,可是我没啥动力解决。也有些是我没想好怎么解决的,也有些是这种点赞方式下无解的。spa
微信朋友圈自动点赞的实现大体都是这样了,有问题能够在下面留言或者在github.com/xindoo/autojs提issue,github上代码仍是方便更新的。 下一个相似的脚本我打算作个 支付宝自动偷能量 虽然网上已经有相似的实现。 版权声明:本文为博主原创文章,转载请注明出处。 博客地址:https://xindoo.blog.csdn.net/.net