Python微信操控itchat的方法 itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单。 开源地址 http://github.com/littlecodersh/ItChat 文档: http://itchat.readthedocs.io/zh/latest/ 安装: pip3 install itchat 登入与登出 登入并向文件助手发送一句话,登入时会经过扫码操作,类似于电脑微信登入 import itchat #登入并保存登入状态,实现第一次运行时扫码,一定时间内再次运行就不用扫码了,手机微信上将显示:网页微信已登入..... itchat.auto_login(hotReload=True) #发送文本数据到文件助手 itchat.send("东小东你好123",toUserName="filehelper") 登出: itchat.logout() 注册登入登出的回调方法 def ldong(): print('微信登入') def edong(): print('微信登出') #登入 itchat.auto_login(hotReload=True,loginCallback=ldong, exitCallback=edong) 命令行二维码 通过以下命令可以在登陆的时候使用命令行显示二维码: itchat.auto_login(enableCmdQR=True) 部分系统可能字幅宽度有出入,可以通过将enableCmdQR赋值为特定的倍数进行调整: #如部分的linux系统,块字符的宽度为一个字符(正常应为两字符),故赋值为2 itchat.auto_login(enableCmdQR=2) 默认控制台背景色为暗色(黑色),若背景色为浅色(白色),可以将enableCmdQR赋值为负值: itchat.auto_login(enableCmdQR=-1) 可接受监听的数据类型 消息分类: 图片或表情(PICTURE)、录制(RECORDING)、附件(ATTACHMENT)、小视频(VIDEO)、文本(TEXT),地图(MAP),名片(CARD),通知(NOTE),分享(SHARING),好友邀请(FRIENDS)、语音(RECORDING)、系统消息(SYSTEM) 获取消息内容: 可以通过print(msg)方法查看消息里的所有数据,然后进行提取 @itchat.msg_register(itchat.content.TEXT) def text_reply(msg): print(msg) 消息捕获 针对朋友的消息捕获 登入时不适用于hotReload=True,因为多次运行会多次注册自动回复,比如在没有登出的情况下运行3次程序,就会出现1次接受3次发送的效果 监听函数只有在对方发送数据时进入 文本 import itchat #自动回复 @itchat.msg_register(itchat.content.TEXT) def text_reply(msg): return "东小东回复数据:"+msg["Text"] #登入 itchat.auto_login() #保持运行 itchat.run() 文件下载 import itchat #PICTURE, RECORDING, ATTACHMENT, VIDEO,TEXT # 图片、录制、附件、视频、文本 from itchat.content import PICTURE, RECORDING, ATTACHMENT, VIDEO,TEXT @itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO]) def download_files(msg): filedpx="./filex/"+msg["FileName"] #得到文件路径,目录需要手动创建 msg.download(filedpx) #下载 return "你发送的文件类型"+msg['Type']+" 保存地址为:filex/"+msg.fileName 针对群聊的自动监测 如果想添加针对群聊的监测,则在监听函数加入isGroupChat=True 监听函数只要有数据发送就会进入,包括自己发送的数据 import itchat #只对群消息有效 @itchat.msg_register(itchat.content.TEXT,isGroupChat=True) def text_reply(msg): if(msg["Text"]=="11"): return "东小东回复数据xx:"+msg["Text"] #只对个人用户有效 @itchat.msg_register(itchat.content.TEXT) def text_reply(msg): return "东小东回复数据:"+msg["Text"] #登入 itchat.auto_login() #保持运行 itchat.run() @我信息监测 import itchat #只对群消息有效 @itchat.msg_register(itchat.content.TEXT,isGroupChat=True) def text_reply(msg): #判断是否是@本人 if msg["Text"].find("@"+usermsgx["NickName"])==0: return "@"+msg.actualNickName+" 东你发的信息为:"+msg.text itchat.auto_login()#登入 usermsgx=itchat.search_friends()#得到当前用户的信息 itchat.run()#保持运行 针对所有信息来源信息监听 朋友、群聊、公众号 @itchat.msg_register(TEXT, isFriendChat=True, isGroupChat=True, isMpChat=True) def simple_reply(msg): return 'I received: %s' % msg.text 数据发送 return 在接收数据函数里的return “数据” 则是自动确认为回复当前发送用户数据,可以删除该句,则不进行数据回复 itchat.send,可以一次性发送多条 参数:(内容,用户) 返回值:发送结果,是否发送成功,json数据 注意:文件地址不可为中文 内容:可为单独的字符串内容,其他有【@类型@地址】,类型有图片(img)、文件(fil)、视频(vid) 用户:省略则发个自己,不稳定,msg['FromUserName']表示指定用户为触发用户 res=itchat.send('文本信息的发送......!', toUserName=msg['FromUserName']) res=itchat.send('@img@%s' % './filex/zcy.gif', toUserName=msg['FromUserName']) res=itchat.send('@fil@%s' % './filex/tt.txt', toUserName=msg['FromUserName']) res=itchat.send('@vid@%s' % './filex/videox.mp4', toUserName=msg['FromUserName']) 指定类型发送2 参数:(地址,用户) 返回值:发送结果,是否发送成功,json数据 注意:文件地址不可为中文 bb = itchat.send_msg('文字信息2', toUserName=msg['FromUserName']) bb = itchat.send_image('./filex/zcy.gif', toUserName=msg['FromUserName']) bb = itchat.send_file('./filex/tt.txt', toUserName=msg['FromUserName']) bb = itchat.send_video('./filex/videox.mp4', toUserName=msg['FromUserName']) print("返回值:",bb) msg.user.send() 使用与itchat.send()相同,但是可以已经确定toUserName=msg['FromUserName'],不可更换 指定用户(toUserName): 文件助手(发送给自己,必备):toUserName="filehelper" 发送者:toUserName=msg['FromUserName'] 例子: 通过群名向群里发送内容,该微信群需要在运行代码前进行手动添加到通讯录 import itchat #登入 itchat.auto_login() chatroomName='傻逼群'#群名 itchat.get_chatrooms(update=True) chatrooms = itchat.search_chatrooms(name=chatroomName) if len(chatrooms)==0 : print('没有找到群聊:' + chatroomName) exit(0) else: print(chatrooms[0]['UserName'])#输出群聊标识符 itchat.send_msg('大家好,这是发送的内容', toUserName=chatrooms[0]['UserName'])#发送消息 #保持运行 itchat.run() 个人的基本信息 获取本人信息 usermsgx=itchat.search_friends() print(usermsgx) print(usermsgx["NickName"]) #得到昵称 获取所有朋友信息 friendx=itchat.get_friends() print(friendx) 条件获取朋友或者自己信息 # 获取特定UserName的用户信息 itchat.search_friends(userName='@abcdefg1234567') # 获取任何一项等于name键值的用户 itchat.search_friends(name='littlecodersh') # 获取分别对应相应键值的用户 itchat.search_friends(wechatAccount='littlecodersh') # 三、四项功能可以一同使用 itchat.search_friends(name='LittleCoder机器人', wechatAccount='littlecodersh') 得到用户序号 @itchat.msg_register([TEXT,MAP]) def text_reply(msg): print(msg) print(msg["User"]["Uin"]) 更新用户数据,通过 UserName ,或者 UserName 列表 memberList = itchat.update_friend('@abcdefg1234567') 注意: 中文文件名文件上传 Q: 为什么中文的文件没有办法上传? A: 这是因为使用requests包会自动将中文文件名编码为服务器端无法识别的格式,所以需要修改requests包或者使用别的方法上传文件。 最简单的方法即将requests包的packages/urlib3中的fields.py中的format_header_param方法改为如下内容: def format_header_param(name, value): if not any(ch in value for ch in '"\\\r\n'): result = '%s="%s"' % (name, value) try: result.encode('ascii') except UnicodeEncodeError: pass else: return result if not six.PY3: # Python 2: value = value.encode('utf-8') value = email.utils.encode_rfc2231(value, 'utf-8') value = '%s="%s"' % (name, value.decode('utf8')) return value 命令行显示二维码 Q: 为什么我在设定了itchat.auto_login()的enableCmdQR为True后还是没有办法在命令行显示二维码? A: 这是由于没有安装可选的包pillow,可以使用右边的命令安装:pip install pillow 综合: 实现文本信息的关联,及可以实时看到所关联的账号的聊天信息,当发生聊天数据时会主动将聊天数据发送到主账号上 import itchat from itchat.content import PICTURE, RECORDING, ATTACHMENT, VIDEO,TEXT,MAP #只对个人用户有效 @itchat.msg_register([TEXT]) def text_reply(msg): # 查询数据的接收者 touserx="filehelper"#默认为文件助手发送信息 if msg["ToUserName"]!="filehelper":#如果非文件助手信息 touserx=itchat.search_friends(userName=msg["ToUserName"])["NickName"] inuserx = itchat.search_friends(userName=msg["FromUserName"])["NickName"]#查询数据的发送者 totouserx=itchat.search_friends(name='东里个咚')[0]["UserName"] #通过昵称查询到username texts=msg.text #得到接收的数据 itchat.send_msg("【"+thisuserx+"】\n"+inuserx+"-->"+touserx+" :\n"+texts,toUserName=totouserx) #发送给目标 #登入 itchat.auto_login() thisuserx=itchat.search_friends()["NickName"] #得到当前用户昵称 #保持运行 itchat.run() 总结 以上所述是小编给大家介绍的Python微信操控itchat的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对中文源码网网站的支持! 如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!