wxpy 是在 itchat 的基础上,进行了优化,提高了易用性,并扩展了功能。详细介绍可参考wxpy网站。
wxpy从Python2.7到3.6均支持,安装wxpy也很简单,通过以下命令即可安装:
pip install wxpy
也可以通过豆瓣的镜像进行安装:
pip install -U wxpy -i "https://pypi.doubanio.com/simple/"
注意:建议使用小号登录,为避免常用账号经常登录造成一定概率限制登录的可能性
在wxpy中使用以下方式登录微信:
import wxpy
bot = wxpy.Bot(cache_path=True)
参数中cache_path的作用如下:
cache_path – 设置当前会话的缓存路径,并开启缓存功能;为 None (默认) 则不开启缓存功能。开启缓存后可在短时间内避免重复扫码,缓存失效时会重新要求登陆。 设为 True 时,使用默认的缓存路径 ‘wxpy.pkl’。
除了cache_path参数,Bot()还支持一下参数:
console_qr – 在终端中显示登陆二维码,需要安装 pillow 模块 (pip3 install pillow)。可为整数(int),表示二维码单元格的宽度,通常为 2 (当被设为 True 时,也将在内部当作 2)。也可为负数,表示以反色显示二维码,适用于浅底深字的命令行界面。 例如: 在大部分 Linux 系统中可设为 True 或 2,而在macOS Terminal 的默认白底配色中,应设为 -2。
qr_path – 保存二维码的路径
qr_callback – 获得二维码后的回调,可以用来定义二维码的处理方式,接收参数: uuid, status, qrcode
login_callback – 登陆成功后的回调,若不指定,将进行清屏操作,并删除二维码文件 logout_callback – 登出时的回调
执行以上代码后,会弹出一个登录二维码,和登录PC版或网页版微信一样,使用手机微信扫描登录,相当于登录微信网页版,只不过是在命令行中进行登录,登录后的效果如下图所示。
但是执行以上代码登录后,基本没什么用,因为本人没发现能操作什么,因此继续向下研究。
wxpy中提供消息注册功能,可以实现自动处理消息。该功能是通过函数的装饰器方式实现的,比如以下方法实现了自动打印发过来的文本消息。
@bot.register(msg_types=wxpy.TEXT)
def printtext(msg):
print(msg)
其中msg_types参数,是指定接收消息的类型,wxpy中支持以下消息类型:
文本 TEXT
位置 MAP
名片 CARD
提示 NOTE
分享 SHARING
图片 PICTURE
语音 RECORDING
文件 ATTACHMENT
视频 VIDEO
好友请求 FRIENDS
系统 SYSTEM
但是,当运行时,发现登录后,发消息并没有打印出来,因为在登录后没有进行其他操作,程序会因主线程执行完成而退出,不过没关系,wxpy中提供了解决方法。
为了保证程序主线程不会因无操作而自动退出,wxpy中提供了主线程阻塞功能,方法如下:
wxpy.embed()
加上以上代码后,再次运行,即可停留在了Python的命令行交互界面,然后发过来的信息将会打印在命令行交互界面上,效果如下:
上面实现了消息的自动处理,但是我需要的是自动回复,下面接着研究。
发现wxpy中提供了消息回复方法“Message.reply()”,于是将刚才的自动处理方式改为下面的自动回复。
@bot.register(msg_types=wxpy.TEXT)
def autoreply(msg):
msg.reply("收到!")
然后运行后,即可实现自动回复消息,致辞自动回复消息功能已实现完成,总共代码不到十行,是不是很简单,人人都可以做属于自己的微信机器人。
import wxpy
bot = wxpy.Bot(cache_path=True)
@bot.register(msg_types=wxpy.TEXT)
def autoreply(msg):
msg.reply("收到!")
wxpy.embed()
参考: