Loading... 现在百度搜索关键词`python` `微信机器人` 都是好久之前的教程 并且使用的都是微信网页端 然而现在微信网页端已经不可用 ![微信网页端限制登录][1] > 2017年前登陆过web网页版的微信可以登录并使用此框架 > 2017年后的新注册微信号包括以前没有登陆过web网页版微信的号无法使用此框架 > 想搞着自己的机器人搞着玩的,可以去购买支持web登录微信号,如果是公司开发需要,那么唯一选择就是找正> > 规企业合作API,(因为大家github搜索出来的基本都是网页版 wxpy wechaty itchat等等都是基于网页微信> 开发的)。所以你们可以寻找API提供商,不过著名的提供商入门条件较高5W起步,QQ 微信提供的一堆二手骗子, > 容易封号,无法维护, 赚一波钱就跑(微信一升级,API就废了,但是价格便宜 和割韭菜一样),所以推荐大> 家 寻找:有官网、API、系统、有能力提供协议升级稳定的企业(二手骗子一般没有) **对于17年后的微信号,搞机器人,就只能配合PC版本的微信端** 在github找了半圈,没找到合适的(可能我没有掌握搜索的艺术),都是基于web端微信的 在群里交流的时候,终于找到了一个基于pc端微信——**`Iwe`** ## 官方介绍 # **说明** 本文档用于展示,仅限学习研究, QQ群:【949773096】点击加入群聊 (说明请写: iwe) **接口说明** 接口使用 WebServer 和 webSocket 服务技术。 接口支持C/C++,C#,易语言,Python,Java, Go, NodeJs, PHP, VB等语言原生调用 **支持版本** 2.7.1.88 **下载地址:** 链接:V0.0.2 [https://m2a.co/9s8][2] ## 开发文档 ## <button class="btn m-b-xs btn-success btn-addon" onclick='window.open("http://doc.wew.xyz/web/#/2","_blank")'><i class="fa fa-link"></i>开发文档</button> 作者说不太稳定,我个人实现的功能比较简单,暂时没有出现频繁假死或者卡顿的现象,运行还是比较流畅的 这个版本更新到`0.0.2` 比较新,我觉得还不错。 一些常用接口也有,想实现更复杂的功能,还是要靠我们自己动起手来 ## 开始动手 ## 之前写了一个电影天堂的爬虫,方便自己平时看电影,所以这次我们就微信机器人结合爬虫,让我们观影之旅更加愉快 <div class="preview"> <div class="post-inser post box-shadow-wrap-normal"> <a href="https://www.z2blog.com/index.php/learn/10.html" target="_blank" class="post_inser_a no-external-link"> <div class="inner-image bg" style="background-image: url(http://assets.z2blog.com/imgbed/2019/12/26/20191226100778.png);background-size: cover;"></div> <div class="inner-content" > <p class="inser-title">Python实现简单爬取电影天堂资源</p> <div class="inster-summary text-muted"> 梳理下大概步骤:首先批量获取网站列表页链接访问列表页通过正则表达式,提取列表页中的内容页链接循环访问内容页正则表达... </div> </div> </a> <!-- .inner-content #####--> </div> <!-- .post-inser ####--> </div> ### 思路 1. 首先我们需要从微信接收到消息 可以使用**iwe**中的websocket接收信息 默认的地址 ws://127.0.0.1:7777/ws 2. 接收到消息之后,我再去判断,消息是否触发了命令 - 如果触发了命令关键字,则执行爬虫 - 没有则什么都不干 > 这里我们就是用**看**作为触发命令的关键字 > 例如发送:**看战狼** 则会去爬取对于网站关于影片战狼的信息 ###实施 提前准备好: **iwe**, **2.7.1.88版本的微信PC端(目前最新版)**, **你所喜爱的编程语言** 第一步肯定是连接websocket接收消息 我使用了**`aiowebsocket`**模块,我是第一次接触websocket,这里关于websocket的使用就只有这一个连接,所以暂时没有做深入研究 **连接websocket** ```python async def startup(uri): async with AioWebSocket(uri) as aws: converse = aws.manipulator print('===日志面板已启动===') while True: mes = await converse.receive() print('{time}-Client receive: {rec}' .format(time=datetime.now().strftime('%Y-%m-%d %H:%M:%S'), rec=mes)) threading.Thread(target=msg_handler, args=(mes, )).start() def run(): ws_url = 'ws://127.0.0.1:7777/ws' try: asyncio.get_event_loop().run_until_complete(startup(ws_url)) except KeyboardInterrupt as exc: logging.info('Quit.') ``` 消息处理这里,我搞了个多线程,**一个线程处理一条消息**,当然可以使用进程以及协程 Python中的**多线程虽然因为GIL锁, 被限制了性能发挥**,但是处理这几个消息还是绰绰有余的。 处理消息前,先看一下接收到的消息是什么样子的 接收到消息是字典数据类型 我们需要知道是谁发送的消息,或者是从哪个群发来的消息 这里的`FromWxid` 和 `SenderWxid`就是我们所需要的 ``` { "Msgtype": 1, "IsSelt": 0, "FromWxid": "xxxxxxxxxxxx", "FromNickName": "小葱测试群", "SenderWxid": "xxxxxxxxxx", "UnkonwStr": "测试信息", "Content": "测试信息", "Md5": "83c11f7c5879234b5c3cb03378610ab3", "Time": 1576286978 } ``` **消息处理** ```python def msg_handler(mes): mes = json.loads(mes.decode('utf-8')) wxid = mes['FromWxid'] content = mes['Content'] sender_wxid = mes['SenderWxid'] if sender_wxid == 'NULL': # 判断为私聊 movie_send(wxid=wxid, content=content) else: # 群聊 if "<appinfo>" in content: delmember(chatroom_wxid=wxid, sender_wxid=sender_wxid) return movie_send(wxid=wxid, content=content) return ``` > 如上述示例代码,如果是私人聊天,`SenderWxid`是NULL,此时的`FromWxid`就是用户ID > 如果是群聊,`FromWxid`是群ID,`SenderWxid`就是在群内发送消息的用户ID > 我这里多加了一个`if "<appinfo>" in content:`的判断,是剔除分享广告链接的 **消息分片,判断命令** ```python def movie_send(wxid, content): if ('看' or '搜') not in content[0]: return elif content[0] == '看': name = content.strip('看') time.sleep(1) iwe.SendText(wxid, '快速搜索中,请稍等...') iwe.SendText(wxid, data_handler(name)) elif content[0] == '搜': name = content.strip('搜') time.sleep(1) iwe.SendText(wxid, '快速搜索中,请稍等...') iwe.SendText(wxid, data_handler(name)) ``` 判断是不是`看`或者`搜`开头的消息 是,则触发爬虫命令 搜索的内容就是`看`关键字后面的内容,直接切片就行了 判断是否为`看`或`搜`开始,可以使用`startswith()`,之前学过,给搞忘了 上诉代码中的**`data_handler()`** 就是爬虫部分了 处理完之后,通过`SendText()`发送出去就可以了 ![效果演示][3] 除了微信机器人,还搞了QQ机器人也是同样的功能 QQ机器人基于酷Q ,CQHTTP , NoneBot 还没有玩转... [1]: http://assets.z2blog.com/imgbed/2019/12/25/20191225451422.png [2]: https://m2a.co/9s8 [3]: http://assets.z2blog.com/imgbed/2019/12/26/20191226665974.gif Last modification:December 26th, 2019 at 02:19 pm © 允许规范转载