精华内容
下载资源
问答
  • 微信开发 自动转发朋友圈 自动添加好友等等

    万次阅读 热门讨论 2018-01-11 11:22:51
    本人有幸在上家公司做外包的时候接触了这个项目,专门针对微信做的一些功能,有自动删除僵尸粉,自动朋友圈自动添加好友,自动同意添加等等很多功能。 这时候可能会有一些人会问:难道你有微信的源码吗?不然...

          本人有幸在上家公司做外包的时候接触了这个项目,专门针对微信做的一些功能,有自动删除僵尸粉,自动发朋友圈,自动添加好友,自动同意添加等等很多功能。  这时候可能会有一些人会问:难道你有微信的源码吗?不然怎么让他自动发朋友圈。

          当然   我是不可能有微信的源码的    我是怎么让他自动操作微信的呢?    国外有一位大神开发了一个工具包   这个工具包可以操作任何app包括微信和QQ

    具体怎么操作呢   我贴出一点点代码给你们看一下   

    public boolean login(String username, String password) {
    Log.e("m_tag", "user : " + username);
    if (true == mSolo.waitForText("^通讯录$", 1, 100)) {
    return true;
    }
    
    
    boolean isExist = mSolo.waitForText("^切换帐号$", 1, 100);
    if (isExist) { // 之前有登录过,存在登录信息
    
    
    mSolo.clickOnText("^切换帐号$");
    mSolo.clickOnScreen(mWidth * 0.575f, mHeight * 0.52f);
    mSolo.enterText(0, username);
    // mmSolo.enterText(1, password);
    mSolo.typeText(1, password);
    mSolo.clickOnText("^登录$");
    
    
    } else { // 还没有登录过,不存在登录信息
    // 找不到切换帐号这个按钮,可能是因为程序刚安装上去,没有登录信息
    // 提示创建快捷方式
    if (mSolo.waitForText("^提示", 1, 100)) {
    mSolo.clickOnText("^确定$");
    }
    mSolo.clickOnButton("^登录$");
    mSolo.clickOnView(mSolo.getView("login_other_way"));
    // mmSolo.clickOnButton("^使用其它方式登录$");
    mSolo.enterText(0, username);
    mSolo.typeText(1, password);
    mSolo.clickOnText("^登录$");
    // 进入微信5.3
    // mmSolo.clickOnView(mmSolo.getView("btn_changed"));
    }
    
    
    return loginVerify();
    }
    
    这是微信登录的模块,可以看到其实就是模拟点击而已  ,并不复杂 mSolo就是我说的那个工具类他能找到你屏幕上的文字  并进行点击  也可以等待文字出现再点击 比如
    
    if (mSolo.waitForText("^提示", 1, 100)) {
    mSolo.clickOnText("^确定$");
    }

    这样看起来是不是觉得想对微信做什么都能做了?    基本上是没错   但是问题在于微信有很多随机事件   这些只要有一个没考虑到就会奔溃  而且微信的界面可不止一套哦

    虽然我们用的时候觉得没啥变化  其实微信的界面有好几套   你认真研究就发现了   重点提醒:必须要刷机才能操作  具体怎么刷我也不清楚因为我是个菜鸟不懂framework层  好了如果还有问题不清楚请自己看项目吧   我贴一个有标记僵尸粉和自动发收藏的demo吧  请在我的csdn下载频道自己下载(我并不知道怎么发在这里)

    源码下载地址:https://download.csdn.net/download/lap602651857/10200155

    展开全文
  • 求一个微信插件,能实现好友聊天内容文字自动转发朋友圈,非常感谢。
  • 安卓多图自动微信转发朋友圈 使用安卓开发得Accessibility实现微信转发自动脚本 目前支持微信最新版本7.0.17 支持 小米 华为 一加等机型 flutter下如何使用 安卓源代码加作者微信获取 pubspec.yaml下引用 ...

    安卓多图自动微信转发到朋友圈
    使用安卓开发得Accessibility实现微信转发自动脚本
    目前支持微信最新版本7.0.17 支持 小米 华为 一加等机型

    flutter下如何使用 安卓源代码加作者微信获取
    pubspec.yaml下引用

    dependencies:
      flutter_wxlftp: ^1.0.1
    
    import 'package:flutter_wxlftp/flutter_wxlftp.dart';
    
    
    //第一次参数 几张图片 第二个参数朋友圈文字 
    FlutterWxlftp.flutterWxlftpbegin(8,“你好flutterWxlftp”);
    
    

    作者微信:SunSelectMan
    qq:2247270434
    源代码:https://github.com/junkai-li/flutter_wxlftp.git

    展开全文
  • 2、微信一键自动转发朋友圈视频; 3、微信一键自动转发朋友圈图片; 4、微信一键添加群里面所有好友; 5、自动点赞; 6、自动评论; 仅限安卓系统,软件注册激活码需要购买,联系微信:491261766
  • 这个资源是专门针对微信开发的一个资源,有自动朋友圈自动加好友各种功能,就是微信全自动化营销不需要人工操作,和钱脉通手机一样(侵权立删)
  • 微信怎么转发朋友圈 转发朋友圈方法详细教程来源:www.18183.com作者:皮卡时间:2015-10-14微信的朋友圈是一个类似QQ空间的圈子,在这里大家都可以发表心情、分享图片文字,评论微信朋友的心情、图片。很多朋友看到...

    微信怎么转发朋友圈 转发朋友圈方法详细教程

    来源:www.18183.com作者:皮卡时间:2015-10-14

    微信的朋友圈是一个类似QQ空间的圈子,在这里大家都可以发表心情、分享图片文字,评论微信朋友的心情、图片。很多朋友看到有好的图片文章想分享但是不知道怎么操作。

    微信的朋友圈是一个类似QQ空间的圈子,在这里大家都可以发表心情、分享图片文字,评论微信朋友的心情、图片。很多朋友看到有好的图片文章想分享但是不知道怎么操作。微信朋友圈怎么转发方法如下:

    方法一、转发到朋友圈

    步骤1、首先,在微信朋友圈里找到一个分享,长按文字会跳出提示,选择“复制”。如下图所示:

    646ae427a96cb3dc1e472a55d6d96865.png

    步骤2、点击图片会放大显示,长按图片会跳出设置栏,点击“保存到手机”将图片保存。如下图所示:

    fa19159f1e4fa7f73d54c533cf01e310.png

    步骤3、在朋友圈主界面,点击右上角的相机图标,点击“从手机相册选择”,选好图片后会自动进入发送界面。如下图所示:

    90dbb35a99271cba3e2dc51e488f0183.png

    步骤4、在文字输入界面长按,跳出“粘贴”后点击选择,在这里你可以文字进行修改。如下图所示:

    7a2613500e3c9151c17fc674795d8045.png

    步骤5、在发送界面你可以设置该文章的可见范围,删除添加图片,添加提醒谁看,显示所在城市,以及QQ空间、腾讯微博的同步。一切就绪后点击“发送”即可。如下图所示:

    e330d61aa55700f9afee0875d596663e.png

    步骤6、如果发送时选择的是私密,文章会保存到朋友圈里的“我的相册”里,大家想公开这篇文章的话可以点击文章,在文章界面点击右上角,选择“设为公开照片”即可。如下图所示:

    429f4029920387a837937289d9faccc5.png

    方法二、转发给朋友

    步骤1、转发图片给朋友。

    点开图片,长按图片会跳出提示,选择“发送给朋友”,在朋友选择界面选择一位朋友。微信会提示将发送到该朋友处,点击确定即可。如下图所示:

    698794a9c28a6c1ec4a7ec15200587de.png

    步骤2、转发文字给朋友。

    长按朋友分享的内容,会跳出提示,点击复制。在朋友界面输入框长按,跳出“粘贴”后点击,转发成功。如下图所示:

    827f736fe38aff64ee46b38b888a5f29.png

    展开全文
  • Xposed控制微信的源代码:自动发送朋友圈,微信6.6.7测试通过。 点开微信后,直接跳转到微信朋友圈自动发送手机中指定的一个小视频(指定视频封面)。 在微信6.6.7,安卓5.0真机上实测通过。
  • 软件全新定义淘客软件和运营概念,支持添加好友自动通过,回复图片、文字、语音、视频,全新自动跟单,全自动发红包,全自动朋友圈,全自动备注好友,内置丰富的海报自定义模板。帮助淘客自动链,减少人工,...
  • 基于Web微信API的框架 如 # wechaty 这里以这个举例是因为他有个付费版,可以自动朋友圈,可以分享卡片,可以做群管理,很是方便快捷 ,但是太贵了,200块大洋一个月,你用了之后预计就甩不掉了。 基于xposed 插件...
    wechat

    背景

    要实现微信自动化,大致有这么几种办法

    1. 基于Web微信API的框架 如 # wechaty 这里以这个举例是因为他有个付费版,可以自动发朋友圈,可以分享卡片,可以做群管理,很是方便快捷 ,但是太贵了,200块大洋一个月,你用了之后预计就甩不掉了。
    2. 基于xposed 插件开发 ,通过广播方式和sdk 交互,只要发送广播就可以自动发送朋友圈,但是实现难度相对较高,需要逆向知识,还有被封号的风险,不可取。
    3. 基于AccessibilityService实现,有一个自动抢红包的功能就是通过他实现的,原本该功能是对那些由于视力、听力或其它身体原因导致不能方便使用Android智能手机的用户,Android提供了Accessibility功能和服务帮助这些用户更加简单地操作设备,包括文字转语音(不支持中文)、触觉反馈、手势操作、轨迹球和手柄操作等,到Android 4.1版本以后,系统辅助服务增加了与窗口元素的双向交互,此时可以通过辅助功能服务操作窗口元素,比如点击按钮、输入文本信息等功能,越来越方便。

    这些方法各有利弊,综合看来,第一种实现总会有一天微信说要关闭web服务,那岂不是很惨,第二种风险在于被封号,只有第三种目前看来最合适,想要自动发送朋友圈,AccessibilityService是最完美的实现。知其然知其所以然,我们要想用好AccessibilityService,就要明白其原理,这样能更好的理解每一步操作的含义,少走弯路,避免考虑不周导致成功率不足。

    自动化视频效果展示:

    在做的过程中,也遇到很多问题,例如经常拿不到
    AccessibilityNodeInfo实例,如果拿不到就无法操作当前界面的元素,等于是无法再执行下去了,这里有几个关键点需要注意的,只要注意这几个就可以完美拿到。卖个关子,下面会提到,请往下看。

    AccessibilityService原理

    先大致了解下原理,对你的使用更是事半功倍。
    类图源于 here

    AccessibilityService类图

    分析下这个类图。

    • AccessibilityService:最主要的onBind()、onAccessibilityEvent(event: AccessibilityEvent)、onInterrupt()三个函数,后面两个需要子类实现,onBind已经实现了,看下这个函数源码 直接return了一个静态内部类IAccessibilityServiceClientWrapper
    public final IBinder onBind(Intent intent) { return 
    new IAccessibilityServiceClientWrapper(this, getMainLooper(), new Callbacks() {
            }
    }
    
    • IAccessibilityServiceClientWrapper : 用于和system_server通信的匿名Binder服务,
    public static class IAccessibilityServiceClientWrapper extends IAccessibilityServiceClient.Stub
                implements HandlerCaller.Callback {
    

    该类又继承了IAccessibilityServiceClient.Stub,并实现了HandlerCaller.Callback接口。看到这分析出,这是一个跨进程通信Service,在IAccessibilityServiceClientWrapper构造函数中看到Callbacks 回调接口

       public interface Callbacks {
            void onAccessibilityEvent(AccessibilityEvent event);
            void onInterrupt();
            void onServiceConnected();
            void init(int connectionId, IBinder windowToken);
            boolean onGesture(int gestureId);
            boolean onKeyEvent(KeyEvent event);
            void onMagnificationChanged(@NonNull Region region,
                    float scale, float centerX, float centerY);
            void onSoftKeyboardShowModeChanged(int showMode);
            void onPerformGestureResult(int sequence, boolean completedSuccessfully);
            void onFingerprintCapturingGesturesChanged(boolean active);
            void onFingerprintGesture(int gesture);
            void onAccessibilityButtonClicked();
            void onAccessibilityButtonAvailabilityChanged(boolean available);
        }
    

    看到这里再回头看看onBind函数的具体实现如图


    看到了吧,AccessibilityService的AccessibilityEvent事件
    来源于IAccessibilityServiceClientWrapper,我们再看看IAccessibilityServiceClientWrapper是如何收到这个Event,再往下跟踪代码


    IAccessibilityServiceClientWrapper中executeMessage(Message message)函数调用mCallback.onAccessibilityEvent(event)传递给AccessibilityService,executeMessage函数是HandlerCaller.Callback接口的实现,那谁发送的这个Message呢,
    IAccessibilityServiceClientWrapper中同样的onAccessibilityEvent()函数如图


    而这个函数又是谁调的呢,这里就到了进程间通信的逻辑,看一下外部逻辑,上面是倒推逻辑,下面正推一下。

    AccessibilityService跟一个监控一样,界面的所有的事件都可以收到,那它的源头肯定在View上,肯定在View的事件处理上,跟着这个逻辑去找一下



    在performClick函数中发现有一个AccessibilityEvent事件传递,再往里面跟踪发现了这个有用的信息


    这里面可以清晰的看到,你收到的AccessibilityEvent事件所有的字段赋值逻辑就在这里。那它是如何发出去交给AccessibilityService呢,肯定是通过AIDL,进一步查找源码


    发现在sendAccessibilityEventUncheckedInternal函数中,调用了
    getParent().requestSendAccessibilityEvent(this, event),接着看看这个getParent()干了什么,找了一圈找到具体实现在哪,最终在ViewRootImpl中找到这个方法实现

       @Override
        public boolean requestSendAccessibilityEvent(View child, AccessibilityEvent event) {
            if (mView == null || mStopped || mPausedForTransition) {
                return false;
            }
    
            // Immediately flush pending content changed event (if any) to preserve event order
            if (event.getEventType() != AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED
                    && mSendWindowContentChangedAccessibilityEvent != null
                    && mSendWindowContentChangedAccessibilityEvent.mSource != null) {
                mSendWindowContentChangedAccessibilityEvent.removeCallbacksAndRun();
            }
    
            // Intercept accessibility focus events fired by virtual nodes to keep
            // track of accessibility focus position in such nodes.
            final int eventType = event.getEventType();
            switch (eventType) {
                case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED: {
                    final long sourceNodeId = event.getSourceNodeId();
                    final int accessibilityViewId = AccessibilityNodeInfo.getAccessibilityViewId(
                            sourceNodeId);
                    View source = mView.findViewByAccessibilityId(accessibilityViewId);
                    if (source != null) {
                        AccessibilityNodeProvider provider = source.getAccessibilityNodeProvider();
                        if (provider != null) {
                            final int virtualNodeId = AccessibilityNodeInfo.getVirtualDescendantId(
                                    sourceNodeId);
                            final AccessibilityNodeInfo node;
                            node = provider.createAccessibilityNodeInfo(virtualNodeId);
                            setAccessibilityFocus(source, node);
                        }
                    }
                } break;
                case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED: {
                    final long sourceNodeId = event.getSourceNodeId();
                    final int accessibilityViewId = AccessibilityNodeInfo.getAccessibilityViewId(
                            sourceNodeId);
                    View source = mView.findViewByAccessibilityId(accessibilityViewId);
                    if (source != null) {
                        AccessibilityNodeProvider provider = source.getAccessibilityNodeProvider();
                        if (provider != null) {
                            setAccessibilityFocus(null, null);
                        }
                    }
                } break;
    
    
                case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED: {
                    handleWindowContentChangedEvent(event);
                } break;
            }
            mAccessibilityManager.sendAccessibilityEvent(event);
            return true;
        }
    

    可以看到是mAccessibilityManager.sendAccessibilityEvent 发出了事件,再看下这个函数的实现逻辑

     public void sendAccessibilityEvent(AccessibilityEvent event) {
            final IAccessibilityManager service;
            final int userId;
            synchronized (mLock) {
                service = getServiceLocked();
                if (service == null) {
                    return;
                }
                if (!mIsEnabled) {
                    Looper myLooper = Looper.myLooper();
                    if (myLooper == Looper.getMainLooper()) {
                        throw new IllegalStateException(
                                "Accessibility off. Did you forget to check that?");
                    } else {
                        // If we're not running on the thread with the main looper, it's possible for
                        // the state of accessibility to change between checking isEnabled and
                        // calling this method. So just log the error rather than throwing the
                        // exception.
                        Log.e(LOG_TAG, "AccessibilityEvent sent with accessibility disabled");
                        return;
                    }
                }
                if ((event.getEventType() & mRelevantEventTypes) == 0) {
                    if (DEBUG) {
                        Log.i(LOG_TAG, "Not dispatching irrelevant event: " + event
                                + " that is not among "
                                + AccessibilityEvent.eventTypeToString(mRelevantEventTypes));
                    }
                    return;
                }
                userId = mUserId;
            }
            try {
                event.setEventTime(SystemClock.uptimeMillis());
                // it is possible that this manager is in the same process as the service but
                // client using it is called through Binder from another process. Example: MMS
                // app adds a SMS notification and the NotificationManagerService calls this method
                long identityToken = Binder.clearCallingIdentity();
                service.sendAccessibilityEvent(event, userId);
                Binder.restoreCallingIdentity(identityToken);
                if (DEBUG) {
                    Log.i(LOG_TAG, event + " sent");
                }
            } catch (RemoteException re) {
                Log.e(LOG_TAG, "Error during sending " + event + " ", re);
            } finally {
                event.recycle();
            }
        }
    

    IAccessibilityManager 是个aidl接口,最终通过他发送给了服务


    看到这是不是明白了其中的原理。在AccessibilityService你还可以拿到Activity的一些信息,同样的道理,你在源码中肯定能找到那个实现,你可以试着自己去搜一下。

    AccessibilityService使用心得

    上面卖的关子,现在可以圆满了,在使用中遇到过很多种情况拿不到RootInActiveWindow 也就是AccessibilityNodeInfo(表示窗口内容的节点),当窗口能拿到这个节点时,你才能通过他去findView,所以你知道它的重要性了,但为什么很多时候拿不到呢

    • 第一个case,如图

    如果在TYPE_WINDOWS_CHANGED中就会拿不到

    • 第二个case,如图

    当你不在当前页面(com.tencent.mm.ui.LauncherUI是微信的主页)时同样也有可能获取不到,有可能是在其他页面。

    • 第三个case,没图,这种情况就很奇怪,在上面两个都避免了之后,还有拿不到的情况,怎么办了,偶然间我切回桌面,又回来,发现又有了,具体什么原理,目前没找到答案,好吧,总算有个解决办法,当拿不到这个界面的节点时,我切到任务管理状态,再点物理返回键,达到切换的效果,这时候还真的又拿到了,也许这是目前最有价值的一个case,希望你也能用它解决问题。

    总结

    读到这是不是想看如何实现呢,这里直接提供项目源码,并没有写如何使用的教程,推荐给你们几个写的特别详细的教程,希望对你有帮助,使用起来相对很简单的,看完这些文章基本够用
    Android自动化模拟操作开源库源码解析
    你真的理解AccessibilityService吗
    AccessibilityService分析与防御
    A complete guide to Accessibility Service Part 1 — Android
    A Complete Guide to Accessibility Service Part 2 — Android

    本项目源码完善中,功能上会加入

    • 自动分享小程序给好友
    • 自动拉好友进群
    • 自动踢人
      代码会提交到这里 I校长
      欢迎Star
    展开全文
  • 微信公众号自定义转发朋友圈

    千次阅读 2017-11-07 11:36:55
    微信公众号自定义转发朋友圈
  • 微信自动抢红包、修改运动步数、朋友圈小视频转发等功能(无需越狱)
  • 微信朋友圈如何自动点赞

    千次阅读 2020-08-11 21:59:20
    我一直都不太喜欢给别人点赞,某一年(貌似是17年)微信出了一次朋友圈年报,那一整年我就点出去了几个赞,要知道当时我微信好友应该有300+。我觉得这是我不喜欢参与社交活动在网络世界的一种体现吧。不给别人点赞也没...
  • 一键转发朋友圈到 APP

    千次阅读 2015-09-04 17:16:37
    目前市面上用的微商转发工具插件效果图: (可以去百度搜索:微商助手,粉加加,) 参考视频:http://v.youku.com/v_show/id_XMTI3MTgyMTYzNg==.html?from=s1.8-1-1.2 ... 以上的功能是一键转发朋友圈朋友圈
  • 1.本程序需要ROOT权限!...2.本程序插入小视频后,请启动微信,然后在14天内录制的小视频列表可找到视频文件,可以进行转发给好友或朋友圈等操作。 3.该版本支持自动压缩转码,不用再用其他工具压缩!
  • 最近一直在研究微信朋友圈抓取 改变经纬度附近人自动加 附近人朋友圈抓取? 在qq群微信群上已经有人问 怎么抓取微信朋友...可惜抓取朋友圈的动画做的太大 无法上,回头附上代码。 转载于:https://www.cnblogs.c...
  • 最近在研究Android自动化的功能,想了解下 编写Android应用实现微信自动朋友圈自动点赞回复的功能大概是怎么实现的?涉及到Android的那些部分??
  • 上一篇博客我给大家分享了运用appium+java+android实现自动化发微信的测试用例,今天我再给大家分享一下自动化发朋友圈的测试用例吧,由于基本原理都一样,所以只把代码贴出来,如果有疑问的话,可以看看我的前一篇...
  • 在此之前我觉得是不可能的事情,直到今天偶然看到这篇文章,才眼前一亮,虽然还未尝试但应该值得今后一试,由于近期忙于准备新的面试,特此收藏以备后用。...关于分享app内容到微信朋友圈,点击如...
  • 自动抢红包,点赞朋友圈,AccessibilityService解放你的双手 标签: 2018 引言: 其实这一篇本来不是写这个的,在周一开始想做的时候就想好了标题: 《Android与Python的巧妙结合抓取公众号所有历史文章》, ...
  • 一键转发按钮,直接把多张图片拉起朋友圈自动填充图片,或者多张图片发给好友,文字可以复制过去直接粘贴, 实现思路: 1.先把接口请求下来的多张图片保存到本地,这里是用Glide做的本地缓存 //缓存图片到...
  • 自动点击特定元素 通过python调用adb命令实现用元素名称、id、class定位元素 http://blog.csdn.net/gb112211/article/details/33730221 方便查找对应元素特征 android sdk tools: uiautomatorviewer.bat 配置好...
  • 1.我们首先打开朋友圈转发截图生成工具网站:http://tool.tianles.com/pyq/ 2.输入自己的微信昵称,上传头像,撰写文本等等,自定义设置完成之后点击生成即可获得你想要的朋友圈截图。 3.点击保存即可完成全部流程...
  • 微信小程序分享朋友圈生成海报

    万次阅读 2019-10-22 15:05:26
    分享朋友圈现在大家的通用做法就是通过Canvas生成一张图片后进行保存,然后自行转发朋友圈。最近项目有这个需求, 于是就记录一下。(老规矩,我的博客复制粘贴就好使) 先看一下效果图: 一、先把代码写上去 index....
  • 无法分享到微信,系统分享接口暂不支持分享多图至朋友圈。  2018年09月29日,微信更新之后多图分享不行了,立马拿起手机更新微信,果然是有 v6.7.3 的新版本,更新完成之后打开之前的多图分享功能,便出现了上面...
  • 微信转发或分享朋友圈带缩略图、标题和描述的实现方法 微信转发或分享朋友圈带缩略图、标题和描述的实现方法
  • -转发微信聊天里的图片和小视频到朋友圈 -转发聊天里的多张图片(最多9张)到朋友圈 -转发语音给朋友 -转发收藏内容 -转发朋友圈里的内容到自己的朋友圈 -分享图片和小视频 -屏蔽群聊成员 -自动添加“附近的人”界面...
  • 先说说微信朋友圈克隆的思路,主要是通过AccessibilityService辅助类对微信界面的改变进行监控,然后进入到指定朋友的朋友圈,复制指定朋友的朋友圈内容,然后在自己的朋友圈发布复制过来的内容即可。这一切操作都是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,492
精华内容 12,596
关键字:

自动转发朋友圈