微信机器人01微信机器人实现微信机器人有几种思路,
微信机器人实现微信机器人有几种思路,
- 机器人对象 https://github.com/locoda/connector-wechat-bot
https://www.cnblogs.com/-wenli/p/11085305.html#d1 从零开始实现微信机器人
https://wxpy.readthedocs.io/zh/latest/ wxpy: 用 Python 玩微信说明书最新版
https://wechaty.github.io/ 基于Nodejs+Wechaty开发微信机器人管理平台
https://www.cnblogs.com/-wenli/p/11085305.html 从零开始实现微信机器人
普通个人号 微信机器人/外挂 https://www.npmjs.com/package/wxbot
wxpy官方文档: https://wxpy.readthedocs.io/zh/latest
总之大家记住,目前wxpy和itchat都是模拟网页版微信来操作的。
bioinformatics*中国 当群管的时候,我大体写了一个简单的QQ机器人。那会使用的是已有的 perl 模块。能做的事情也不多,基本就是实现一个QQ聊天界面的数据库操作与字词识别并自动回复。使用已有模块的好处是可以快速达成简单需求。但是这也意味着各个地方会受限,比如开发者不再开发,或者开发者设立相对较高的授权费。
这两日没什么事情,于是我又搜索了一些相关的资料,毕竟对于底层如何实现,我个人还是比较感兴趣。
这两日没什么事情,于是我又搜索了一些相关的资料,毕竟对于底层如何实现,我个人还是比较感兴趣。
微信机器人开发的实现方向
基于检索结果,大体我以为是两大方向:
- 逆向协议,或许可以简单地认为,任何一个通讯软件,事实上都是服务器端与用户端的信息交换,搞清楚交换的协议,那么我们就完全可以伪装成一个微信客户端,从而实现微信机器人开发。于是市面上可以看到如 微信ipad协议 等等。
- Hook,很久以前我大概看过这个词。不过可能经过这次检索我才基本了解,这个词可能描述的内容。Hook微信,可以理解为,以windows下的微信为例,微信运行,程序必定是要驻存在内存中,那么就会有对应的内存地址。使用一些内存查看工具,如CE,我们就可以定位到运行中微信对应的不同属性的内存地址,不同内置方法的内存地址。基于这些地址,我们可以获取信息,甚至也可以调用信息。要实现hook,那么在已知微信内存地址的情况下,注入“恶意”DLL,就可以“暴露”运行中微信的方法调用。
逆向协议?我想都不会想。因为确实不容易,市面上似乎只有一批人在售卖 微信ipad协议。而hook,这个是有趣的,但是我并没有太多时间。当然,我仅有的浅薄C/Cpp基础或许还不一定能让我实现注入。不过,运气好在。市面上是存在一些hook微信甚至是hook QQ的软件实现。这些软件的实现基础,本身就包含了这些DLL。本着“拿来主义”,可以借用玩玩。
Java 调用.dll / .so
Emmm... 这是一个我意想不到的收获。早前,我为了加速RNAfold 【注:小RNA数据分析高频使用】的调用,摸索了一段时间的JNI。当然,最后我放弃了。因为我最后发现...实现调用的工作量比较大,需要修改 C/C++ 源码。简单的我搞定了,但是对于RNAfold一个project来说,并不简单。
不小心的检索,【或许是我改变了关键词】,搜索到原来 Java 调用 .dll/.so 有三种不同方法:
- JNI,这是Java原生自带。前述已经提及,实现繁琐,似乎确实一般很少人这么干。
- JNA,在第三方类库的帮助下,无需调整已有源码,可以直接载入并调用 .dll 中的方法。【注:太流弊了....】
- JNaive,Emmm... 这个没搞明白,暂时认为与JNA类似。
于是,我觉得我还是知道了一些新的东西,而这些东西,似乎对我技能的提升存在非常大的帮助,毕竟...原生调用,讲真的,比“命令行调用”的成本,真的低了许多。我甚至有一种感觉,我可以做的应用层开发方位似乎更广,且开发出来的软件运行似乎会更快。
我先说一下思路,然后介绍几个开源的微信机器人,再顺便聊一下几个目前还能免费使用的微信机器人。
很多实现的思路其实就是自动化测试方面的UI自动化(话说我每次做自动化测试内训的时候,都要痛心疾首的跟学员讲:自动化测试技术最让人痛心的地方就是将它用在正道上了):
- 网页自动化技术,基本上是通过自动化网页版的微信(https://wx.qq.com)来实现,其原理就是每次有新消息的时候,微信都会显示一个小红点或者一个消息文本的圆框,这个实际上是一个HTML元素,通过不停的遍历监听到这个元素出现,因为左侧的群聊或者聊天窗口也是HTML元素,模拟鼠标点击这个聊天窗口,再通过UI自动化遍历获取所有新消息(HTML DOM)里的文本。回复消息,也是模拟键盘输入文本即可。
一般通过Chrome或者Webkit周边的自动化技术实现,比如使用PhantomJS、electron等基于webkit的无头(headless)浏览器的JS库实现,也可以直接用Selenium来实现。我还见过基于Mozilla的XPCOM实现的。
登录网页版浏览器需要微信账号所有人扫描二维码来登录,这个二维码实际上是一个图片,一般要支持账号多开的机器人,就是将这个图片链接转发到一个网页上,让负责人扫码就可以登录了。
- 基于Windows自动化技术,其实就是自动化Windows桌面版的微信,因为是客户端,效率要比网页端的快。
- 直接发送模拟HTTP消息包,这个实际上就是模拟浏览器给微信服务器发送HTTP消息包,监听接收回复的HTTP消息包来实现。一般不会模拟桌面客户端,因为正常实现下,桌面客户端应该是跟微信加密通信的。
- 目前还没有看到的,就是直接改浏览器源码,这样效率应该更高一些。
一般来说,聊天机器人,大部分都是接收到群聊消息后,对接图灵机器人或者公开的机器人聊天接口回复消息,基本上都是闲聊型,也有一些是通过检索关键字匹配实现的半自动化客服机器人。
开源实现:
- 在github上用“wxbot”这个关键字检索,可以搜索出各种编程语言的微信机器人。
- 我之前也对一个开源的机器人做了一点小改动,就是让它能够在纯命令行环境下执行,这样方便我在阿里云的LINUX虚机上跑,shiyimin/wxbot。
- 目前我们在开发直接处理HTTP消息包的机器人,现在还在早期,成熟后也会开源出来。
可以立即免费使用的机器人,这个就用“微信机器人”作为关键字检索就可以找出很多,基本上都可以实现下面这些功能:
- 新人进群自动欢迎
- 自动踢人
- 自动加群里的陌生人做好友
- 闲聊
- 根据预算关键字回复消息
普通个人号 微信机器人/外挂 https://www.npmjs.com/package/wxbot
wxbot 微信机器人
- 普通个人号 微信机器人/外挂 (不同于webot等公众号机器人)
- 意义: 个人号可充当公众号使用 关系增强/门槛降低/更多行为/依旧自动化
- 与qqbot/wqq等不同: 基于浏览器/用户行为自动化 更贴近用户/更可靠
- 基于浏览器桌面平台electron 跨平台win/linux/mac
- 基于微信网页版 https://wx.qq.com
- 目前处于高度开发和观察阶段
- 目前代码提供自动回复 可自行定制
如何正确地下载electron
最好是打开VPN,直接运行命令安装:sudo npm install -g electron-prebuilt 如果在安装的时候,发现electron下载不下来,那么可以先用vpn在浏览器里下载下来,然后将下载下来的electron-v1.3.3-linux-x64.zip 上传到服务器的 ~/.electron 文件夹就可以了。
无界面linux运行
- 安装xvfb,安装firefox的目的是同时把x环境依赖安装好:
sudo apt-get update
sudo apt-get install firefox
sudo apt-get install xvfb
sudo apt-get install xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic
sudo apt-get install libxss1 libgconf-2-4
sudo apt-get install firefox
sudo apt-get install xvfb
sudo apt-get install xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic
sudo apt-get install libxss1 libgconf-2-4
- 启动xvfb,并设置DISPLAY环境变量,把xclient连接的xserver指定到我们的虚拟环境里:
sudo Xvfb :10 -ac &
export DISPLAY=:10
export DISPLAY=:10
- 安装mongodb,以ubuntu 14为例
echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
sudo apt-get update
sudo apt-get install mongodb-org
sudo apt-get update
sudo apt-get install mongodb-org
- 运行electron,并执行我们的脚本
cd wxbot
npm install
electron . --enable-logging
npm install
electron . --enable-logging
- 如果在执行过程中有些文件找不到,那么可以用apt-file来查找安装包,详情请参考:http://askubuntu.com/a/59708
- 如果只监听几个群聊,那么请修改 preload.js 里的数组 _bigBrother,加上你要监听的群聊名称即可。
运行
- 启动express服务器,监听请求
$ sudo node webserver.js
- 打开浏览器,访问:http://yourhost/
- 扫描二维码,就可以登录微信机器人,并记录聊天记录。扫描二维码后,其实就是启动一个新的 electron 进程。
功能实现
- 自动回复
- 识别并回复相同的文本/表情/emoji
- 识别图片/语音/视频/小视频
- 识别位置/名片/链接/附件
- 识别转账/在线聊天/实时对讲
- 发送图片
- 下载自定义表情/名片/图片/语音/附件
- 下载视频/小视频
- 感应系统消息 时间/邀请加群/红包等
- 探索运行于无界面平台 atom/electron#228
微信机器人系列的第一篇文章,所以猪哥会特别详细的讲解每一地方,尽量使每一位想学习的同学都能顺顺利利的开始,下面就让我们一起来做些有趣的事吧!
如何监听别人的消息?如何实现放撤回?扫描下方二维码关注微信公众号「 裸睡的猪 」回复:微信机器人 即可获取教程!
一、项目介绍
1.微信库选择
python关于开发微信的库主要有itchat和wxpy,而wxpy底层是调用的itchat,所以如果你只是要使用的话建议使用wxpy库,它比其他的库都要优雅,更面向对象,而且深度整合了图灵机器人和小i机器人;而itchat扩展性更好,如果你想自己开发一个自己的微信库那建议选itchat。
2.实现原理
我相信有不少同学使用过微信的网页版,而wxpy(底层使用itchat)库就是模拟登录网页端,然后调用微信的api实现操作的,我们可以查看itchat源码发现。
总之大家记住,目前wxpy和itchat都是模拟网页版微信来操作的。
3.图灵机器人
既然可以模拟网页微信了,那又如何做到自动回复呢?这里我们就使用到了图灵机器人,大家可以在他们的官网(http://www.tuling123.com)免费注册账号,然后申请一个免费的机器人,每个人最多免费申请五个机器人。
我会在项目代码中给一个默认的apikey,让大家不用下载就可以尝试,但是还是建议自己去申请,因为这个默认的apikey有调用次数限制,况且这算是一笔免费的财富呢!
4.整体流程
为了方便大家理解,猪哥给大家画了一个时序图
二、项目代码
先来张项目结构图压压惊:
1.下载项目
猪哥已经把项目放在了GitHub上,群里有小伙伴反馈不会使用github,这里我就详细讲一下如何从github上下载项目。
注意:github与git不是同一个东西,github是全球最大的同性恋交友论坛,在这里我们不比颜值与财富,只比谁的项目star多,star越多也就说明你越吸引同性的喜欢与爱慕,甚至连你的同事也会爱上你!而git是项目管理工具,github上的项目就是用git来管理,项目管理工具另一派系是svn。
首先找到你需要下载的项目,然后点击Clone or download,然后点击右侧的复制按钮,猪哥这个项目的地址是:https://github.com/pig6/wxrobot
然后打开你的pycharm,选择CSV->Checkout from version control->git,然后粘贴刚才复制的项目链接。
pip install -U wxpy -i “https://pypi.doubanio.com/simple/”
最后pycharm可能会提示你使用 新窗口打开 还是用 当前窗口 打开,猪哥一般习惯使用 新窗口(New Window) 打开,这样可以避免多个项目开发时造成混乱。
2.下载wxpy库
项目下载下来之后,因为没有安装必须的库wxpy,pycharm可能会有如下提示,这时我们点一下install就可以。
如果没有出现安装库提示的话,我们可以在Setting->Project->Project Interpreter里面添加wxpy库。
或者使用以下命令下载wxpy库,如果你是pip3则替换下面的pip。
pip install -U wxpy -i “https://pypi.doubanio.com/simple/”
3.运行项目
你可以按右上角的绿色三角形按钮,也可以右键项目然后点击run。
运行之后弹出登录二维码,手机微信扫一扫点击确定登录即可和好友聊天。
三、总结
首先感谢大家的耐心阅读,考虑到有很多零基础的同学所以文章有点长。
猪哥来总结下这几天使用wxpy库开发微信机器人的一些感受吧!
猪哥用自己的大号测试了一周,也没有出现被封的迹象,只要不发送大量的相同信息就没问题
即使出现被封也只是会限制你微信登录网页版,手机端不影响使用,正常使用大概一两周就自动解封
最好用小号测试,一年以内注册的微信号不可以登微信网页版,也就是说不能用测试
微信网页版有些功能位阉割了,比如:添加好友,拉人入群等,因为怕微商使用机器人到处作恶所以才阉割
目前只开发了一个功能,先让大家入门,后面的功能会慢慢丰富起来
目前wxpy基于微信网页登录,很多功能无法实现,后期考虑跟换成iPad登录
图灵机器人智商有待提高
最后感谢武亚飞同学提供的微信小号
wxpy官方文档:https://wxpy.readthedocs.io/zh/latest
————————————————