微信是世界上体量最大的超级APP之一,拥有数以十亿计的用户,每天都有许许多多的人在微信上进行聊天、沟通、推广、卖货……覆盖了社交辐射的方方面面。
自动化这事呢,也从来都不稀奇,从PC端、浏览器到手机端,从按键精灵到xposed,自动化技术经过一次又一次的变革。
为什么我们需要微信自动化呢?试想一下,如果你是一位专职运营人员,每天面对数百上千个微信群、好友、订阅号和朋友圈进行操作、拉人、推广,是不是要疯?而拥有了自动化技术这一切就不一样了,自动收发消息、自动将群成员添加为好友、自动发朋友圈、自动采集公众号文章...
解放人力、提高效率,这就是自动化要做的事。
那下面我们就总结一下微信(理论上不止微信适用哦)的一些自动化方案:
1、通过模拟http请求
原理是实现网页版微信的请求,模拟网页微信的请求。也就是说只要网页版微信有的功能,你都可以有。
为什么不是模拟桌面或移动端微信呢?因为正常实现下,桌面客户端应该是跟微信加密通信的。
比如gayhub上我们可以找到很多基于此方案的开源项目:
有python的,也有java、js的,还有php的,大家需要的话可以去Github上多搜一搜。
可惜的是,现在好多账号不能使用网页版了,据说是微信在慢慢的关闭网页版的接口……还是要寻求其他方案。
2、通过网页自动化工具
原理通过web自动化工具去操作网页版微信实现。
一般可以通过Chrome或者Webkit周边的自动化技术实现,比如使用PhantomJS、electron、Puppeteer等基于webkit的无头(headless)浏览器的JS库,也可以直接用Selenium,还有基于Mozilla的XPCOM的。基于浏览器插件、油猴脚本应该也能实现一些简单操作。
简单介绍下名气最大的Selenium:
Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。
和上面方案有同样的缺点,受限于账号是否能登录网页版微信。
3、通过App自动化工具
类似web自动化工具,app自动化工具也有很多,名气最大的当属Appium了吧。它继承了webdriver(也就是selenium 2)。
这里有一段介绍:
Appium是开源的移动端自动化测试框架:
- 支持Native App、Hybird App、Web App;
- 支持Android、iOS、Firefox OS;
- 跨平台,可以在Mac,Windows以及Linux系统上;
- 用Appium自动化测试不需要重新编译App;
- 支持Java、python、ruby、C#、Objective C、PHP等主流语言;
除了appium还有很多,比如Airtest,网易还是有不少良心软件的,放个图感受一下:

其余还有uiautomator2、Calabash、Robotium、UIAutomator、XCTest、Frank等等,我们选择的时候挑选符合自己需求的就好。
4、通过Windows自动化
比如 pywinauto,已经封装了 python 包就问爽不爽。windows的自动化方案也有很多,这里就不展开了,因为用的比较少,也就做自动化交易的时候用过pywinauto,其他方案大家可自行去了解。
PC端大部分常见的还是 hook 的形式,hook 下面说。
5、通过Android的辅助服务
辅助服务(AccessibilityService)本来是为了帮助残障人使用安卓设备,熟悉Android开发同学应该知道。
它以服务的形式在后台运行,当页面切换、焦点改变、收到通知、弹出Toast等,系统会回调 onAccessibilityEvent 方法,还可以模拟输入、点击等,这样你就可以干自己想干的事情了。
无需Root,但不支持WebView加载的页面,且每次运行你的 apk 都需要手动打开辅助功能。
代码很简单,可以参考Google或官方文档。
6、通过Hook
Hook 又叫“钩子”,它可以在事件传送的过程中截获并监控事件的传输,将自己的代码与系统方法进行融合。这样当这些方法被调用时,也就可以执行我们自己的代码,这也是面向切面编程的思想(AOP)。
各操作系统各平台有不同的实现,移动端名气最大的当属Xposed了,另外还有Legend、VirtualXposed等一下免Root Hook框架。
Xposed框架(Xposed Framework)是一套开源的、在Android高权限模式下运行的框架服务,可以在不修改APK文件的情况下影响程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。Xposed 并不支持 Android 9 以上版本,但可经由 EdXposed 代替。
PC端貌似更难一些,需要深厚的逆向功底,熟练使用CE、OD等工具。

通过Hook,我们真的可以为所欲为:)
总结
如上面微信自动化方案所说,任何一个app要实现外挂方式的自动化操作,都要基于三点下手:
-
通信协议
一般是Http或Https,抓包实现,没有加密的更好
-
客户端UI自动化
根据不同平台、系统去选择。比如浏览器下的Selenium,Andorid/iOS下的Appium……
-
HOOK
也需要根据不同平台、系统去选择。
如果需求比较简单,Android的辅助服务(AccessibilityService)能满足的,就选择此方案。原因无他,最稳定。
公众号: 「优雅的程序员呀」程序员赚钱之道。优雅的技术,优雅的赚钱。 关注公众号,加群技术交流。
