自动化操作微信的几种方案

  最近接到一个任务,需要自动操作微信,实现微信好友间自动收发消息,自动将群成员添加为好友。第一反应就是简单,使用 appium 等自动化测试工具即可。等实现完了才知道,第一,不能连usb线。第二,不能在同一个局域网。第三,不能root。由于之前没做过app自动化测试,也不会app开发。所以走了很多弯路,所以特意记录一下。

  自动化操作微信有如下几种方案:

    1、通过 ItChat api 实现

    2、通过 appium 等自动化工具

    3、借助 ATX 在手机上使用 QPython 运行 uiautomator2 脚本

    4、将 uiautomator2 脚本打包到 apk 中在手机上运行

    5、通过安卓系统的辅助服务(AccessibilityService)功能实现自动化

方案一:通过 ItChat api 实现

   ItChat api 的原理是实现了网页版微信的请求,模拟网页微信的请求,实现对应的功能。也就是说只要网页版微信有的功能,你就可以有。

  ItChat 库的GitHub仓库地址+简单入门示例 https://github.com/littlecodersh/ItChat

  ItChat 库的API文档 https://github.com/littlecodersh/ItChat/blob/master/docs/api.md

  问题:

  • 据说新注册的微信号不能登录网页版微信,由于这个方案被否,我也没继续研究
  • ItChat容易封号,这个我考虑是秒回消息引起,写个方法随机回复应该没有问题
  • ItChat部分功能过时。我看的时候最后更新时间是18年9月。有些api可能是因为微信接口升级后造成错误。例如得到群成员,目前list只返回你自己。看了下源码,并对了一下网页中的F12,发现接口地址改了。由于这个方案被否,也没往下看,不过理论上稍做修改即可

方案二:通过 appium 等自动化工具

   这种方案也是咱们测试工程师最常用的,具体实现请参见baidu。

  问题:必须连接usb线(当然可以通过wifi无线连接)或跑在虚拟机中。

  wifi无线链接:

 方案三:借助 ATX 在手机上使用 QPython 运行 uiautomator2 脚本

   此方案的原理是在手机上安装 atx-agent 。然后在手机上启动 atx-agent 服务,之后在手机的 QPython 上运行 uiautomator2 脚本(其实就是将pc服务端,跑到了手机上)。

  问题:每次重启手机后必须先连接 usb 线启动 atx-agent,曾经尝试在手机上启动 atx-agent 但最后没能成功,谁会启动还请不吝赐教~~~

  参考文档:

    https://testerhome.com/topics/11980

    文档的总体思路是先在pc上安装必要库,然后手动将 uiautomator2、retry 库复制到手机上,但有可能是我的手机没有 root 的原因相应的目录 adb 没有权限 push 文件。

    后来直接在 QPython 中执行 pip3 install 直接安装 uiautomator2、retry 成功,命令如下: 

pip3 install uiautomator2
pip3 install retry

方案四:将 uiautomator2 脚本打包到 apk 中在手机上运行

  此方案的原理是将 uiautomator2 脚本打包到 apk 中,然后在手机上直接运行打包好的 apk 即可。

  具体实现很简单,按照文档一步步做即可,参考文档:https://blog.csdn.net/pgz100/article/details/82971699

  问题:要想运行此 apk 需要 root 权限。也就是要么将手机系统 root 了,要么将 apk 使用系统签名打包成具有系统权限的 apk 。

  • 第一种相对简单,只要你 root 了你的手机系统即可

  第二种就不好搞了

  • 国内厂商对安卓系统进行了定制,并且修改了签名文件。如果他们开放系统签名文件,也就是你可以轻易的卸载他们预装的app,所以这个签名文件不是那么好得到。
  • 或者可以下载 google 开源的签名文件打包你的 apk,然后再从 google 下载打包好的原生安卓包,这样你签名的 apk 在这个系统上运行就有系统权限。 或者下载安卓源码自己编译打包一个安卓系统,这样你想干嘛都可以了,但我没戏。

 方案五:通过安卓系统的辅助服务(AccessibilityService)功能实现自动化

  辅助服务(AccessibilityService)本来是为了帮助残障人使用安卓设备。首先扩展 AccessibilityService 实现一个自己的服务,并实现 onAccessibilityEvent 抽象方法,并以一个服务的形式在后台运行。这样当页面切换、焦点改变、收到通知、弹出Toast等,系统会回调 onAccessibilityEvent 方法,这样你就可以干自己想干的事情了。

  参考文档:https://juejin.im/post/5acb49126fb9a028cc6186f1

  问题:每次运行你的 apk 都需要手动打开 辅助功能。这么干有些费劲,不过也是最接近我们的要求~~~~

 

posted @ 2019-07-01 13:34  rslai  阅读(8877)  评论(4编辑  收藏  举报