找回密码
 会员注册
查看: 23|回复: 0

2024年最新Python基于itchat开源框架搭建微信机器人详细教程(更新中)

[复制链接]

2万

主题

0

回帖

6万

积分

超级版主

积分
64454
发表于 2024-9-2 22:31:32 | 显示全部楼层 |阅读模式
概述ntwork开源框架ItChat是一个基于Python的微信个人号接口库。它通过封装微信API,使得开发者可以使用Python来方便地与微信进行交互,实现一系列微信相关的功能。这些功能包括但不限于发送和接收消息、获取好友列表和详细信息、以及进行群聊操作等。ItChat提供了一套简洁而强大的API,让开发者能够轻松地在Python中执行微信相关的操作。ItChat支持Python2.x和3.x版本,并且可以在多个操作系统平台上运行,包括Windows、Mac和Linux等。这使得开发者可以根据自己的需求和环境选择适合的Python版本和操作系统。ItChat的入门使用相对简单。首先,你需要通过pip命令安装ItChat库。安装完成后,你可以通过引入ItChat模块,并调用其提供的函数来实现所需的功能。例如,你可以使用ItChat的login()函数来扫码登录微信,然后使用get_friends()函数来获取好友列表和详细信息。此外ItChat还提供了发送消息、注册消息回复等功能,使开发者能够根据自己的需求定制微信机器人的行为。ItChat不仅是一个功能强大的工具,也是一个开源项目,这意味着开发者可以根据自己的需求对其进行扩展和定制。通过ItChat,你可以开发出各种有趣的微信应用,如自动回复消息、数据采集、搭建微信聊天机器人等。框架API文档:https://itchat.readthedocs.io/zh/latest/api/下载安装itchat库使用pip进行安装下载itchat库pipinstallitchat1清华大学开源软件镜像站使用如下命令配置pip使用清华大学的镜像源:pipinstallitchat-ihttps://pypi.tuna.tsinghua.edu.cn/simple1如果永久设置这个镜像源,可以创建一个pip配置文件(例如:~/.pip/pip.conf)并添加如下内容:[global]index-url=https://pypi.tuna.tsinghua.edu.cn/simple12itchat登录异常解决方案importitchatitchat.auto_login()123运行测试结果GettinguuidofQRcode.DownloadingQRcode.PleasescantheQRcodetologin.Pleasepressconfirmonyourphone.Traceback(mostrecentcalllast):······xml.parsers.expat.ExpatError:mismatchedtag:line64,column41234567异常解决方案:更新itchat库itchat库zip压缩包链接https://download.csdn.net/download/qq_47452807/89129949?spm=1001.2014.3001.5503点击立即下载下载新的itchat库zip压缩包解压缩>itchat文件夹进行site-packages替换itchat原库文件夹重新运行测试Readytologin.GettinguuidofQRcode.DownloadingQRcode.Pleasepressconfirmonyourphone.Loadingthecontact,thismaytakealittlewhile.Loginsuccessfullyas一语中的Startautoreplying.1234567itchat协议说明特别注意:使用itchat或其他类似工具进行微信操作需要遵守微信的使用协议和相关法律法规,不得用于非法或恶意目的。同时,由于微信的协议和接口可能随时变化,使用itchat等第三方工具时需要注意及时更新和适配。现在注册的微信已经禁止网页版登陆了,itchat是基于web协议,如果你的微信是2017年之后的,或者未进行实名认证的微信号,可能会遇到登录失败的报错。请选择合理的微信号进行登录。给文件传输助手发信息importitchatitchat.auto_login()itchat.send('Hello,filehelper',toUserName='filehelper')1234运行结果:自动回复文本消息自动回复文本消息importitchatfromitchat.contentimport*@itchat.msg_register(TEXT)deftext_reply(msg):returnmsg.textitchat.auto_login()itchat.run()123456789函数说明:开启一个消息注册器监听来自用户私信的文本类型消息,自动回复用户私信发送消息的内容(文本消息)测试结果自动回复群消息开启一个消息注册器监听来自群的文本类型消息。当收到一个来自微信群的文本消息时,请调用定义的处理函数,实现自动回复。importitchatfromitchat.contentimport*@itchat.msg_register(TEXT,isGroupChat=True)deftext_reply(msg):ifmsg.isAt:msg.user.send(u'@%sIreceived:%s'%(msg.actualNickName,msg.text))itchat.auto_login()itchat.run()12345678910itchat.msg_register这是itchat库中的一个函数,用于注册消息处理函数。当你收到微信消息时,itchat会根据你的注册情况调用相应的处理函数。TEXT这是一个常量,代表文本消息类型。当itchat收到一个文本消息时,它会检查是否有为这个类型注册的处理函数。isGroupChat=True这是一个参数,用于指定这个函数只处理来自微信群的文本消息,而不是来自好友或公众号等其他来源的消息。运行结果:itchat消息类型消息注册器消息类型:itchat.contentTEXT='Text'MAP='Map'CARD='Card'NOTE='Note'SHARING='Sharing'PICTURE='Picture'RECORDING=VOICE='Recording'ATTACHMENT='Attachment'VIDEO='Video'FRIENDS='Friends'SYSTEM='System'1234567891011'运行运行获取uuid账号标识如何要进行登录你需要先得到一个uuid,当下载QRcode需要传递uuid生成二维码,为了检查登录状态,还需要uuid判断当前用户。importitchatuuid=itchat.get_QRuuid()123控制台登录二维码显示通过以下命令可以在登陆的时候使用命令行显示二维码:itchat.auto_login(enableCmdQR=True)1部分系统可能字幅宽度有不同,可以通过将enableCmdQR赋值为特定的倍数进行调整:itchat.auto_login(enableCmdQR=2)1注意:部分linux系统,块字符的宽度为一个字符(正常应为两字符)故赋值为2默认控制台背景色是暗色(黑色)。若背景色是浅色(白色)将enableCmdQR赋值为负值:itchat.auto_login(enableCmdQR=-1)1二维码图片显示itchat库提供了get_QR函数用于下载显示二维码。defget_QR(self,uuid=None,enableCmdQR=False,picDir=None,qrCallback=None):'''downloadandshowqrcode12获取登录二维码并且显示importitchatuuid=itchat.get_QRuuid()itchat.get_QR(uuid)1234注意:执行itchat.auto_login()自动登录功能生成二维码进行预览显示。检测登录状态输出当前微信登陆状态的状态码importitchatuuid=itchat.get_QRuuid()status_code=itchat.check_login(uuid)print(status_code)12345如果未设置uuid则将使用您获取的最新uuid:importitchatstatus_code=itchat.check_login()print(status_code)1234状态码说明-200:登陆成功-201:等待客户端确认登陆-408:uuid超时-0:异常报错1234主动退出登陆importitchatitchat.auto_login()time.sleep(10)item1234567退出程序暂存登陆状态通过如下命令登陆,即使程序关闭,一定时间内重新开启也可以不用重新扫码。importitchatitchat.auto_login(hotReload=True)123保存登陆数据itchat.pklpickle数据格式说明pkl是Python编程语言中的一种数据序列化文件格式,其全称是pickle。这种格式可以将Python中的任意对象转换为一种可以保存到磁盘上或通过网络传输的格式,然后再将这些对象从磁盘上读取出来或者从网络上接收过来,重新还原为原来的Python对象。这种能力使得pkl格式文件在Python编程中非常有用,尤其是在需要保存和加载复杂数据结构或自定义对象时。具体来说pkl文件是以二进制格式保存的,它包含了对象的状态信息,包括对象的数据和方法。这种存储方式可以将Python项目过程中用到的一些暂时变量、或者需要提取、暂存的字符串、列表、字典等数据保存起来,然后在需要使用的时候再进行加载。在Python中pickle模块提供了dump()和load()函数,用于将Python对象保存到pkl文件和从pkl文件加载对象到内存中。使用这些函数,可以方便地实现Python对象的序列化和反序列化,从而实现数据的持久化存储和传输。需要注意的是,由于pkl文件是以二进制格式保存的,因此在不同的操作系统或Python版本之间可能会出现兼容性问题。此外,在处理来自不可信来源的pkl文件时也需要格外小心,因为加载恶意构造的pkl文件可能会导致安全问题。存储登陆数据importitchatitchat.auto_login(hotReload=True)itchat.dump_login_status("itchat.pkl")12345加载登陆数据importitchatitchat.load_login_status("itchat.pkl")123注意:itchat.pkl存储了例如联系人数据、群组数据、个人信息数据······获取联系人数据获取当前登陆微信下全部联系人数据(本地数据/实时数据)get_friends函数defget_friends(self,update=False):1特别注意:如果不设置update获取是本地local数据(itchat.pkl数据)读取实时数据:读取当前登陆态数据importitchatitchat.auto_login(hotReload=True)friendList=itchat.get_friends(update=True)forfriendinfriendList:print(friend)1234567读取本地数据:不登录也同样可以读取数据(itchat.pkl数据加载)importitchatitchat.load_login_status("itchat.pkl")friendList=itchat.get_friends(update=False)forfriendinfriendList:print(friend)1234567我们没有进行itchat扫描登陆操作,通过加载itchat.pkl登陆数据,同样查询到联系人数据。查询联系人用户数据使用search_friends方法可以搜索用户1.仅获取自己的用户信息。2.获取特定UserName的用户信息。3.获取备注、微信号、昵称中的任何一项等于name键值的用户。4.获取备注、微信号、昵称分别等于相应键值的用户。5.······12345函数体说明defsearch_friends(self,name=None,userName=None,remarkName=None,nickName=None,wechatAccount=None):1案例说明获取自己的用户信息,返回自己的属性字典itchat.search_friends()1获取特定UserName的用户信息itchat.search_friends(userName='@abcdefg1234567')1获取任何一项等于name键值的用户itchat.search_friends(name='littlecodersh')1获取分别对应相应键值的用户itchat.search_friends(wechatAccount='littlecodersh')1组合查询itchat.search_friends(name='LittleCoder机器人',wechatAccount='littlecodersh')1wechatAccount安全性特别说明由于腾讯考虑安全性问题,更新了web端安全信息保护机制。目前来说,微信网页端已经无法获取用户微信账号wechatAccount属性。所以itchat.search_friends(wechatAccount=‘littlecodersh’)查询都是为[]空。用户属性案例说明查询指定userName用户信息importitchatitchat.auto_login(hotReload=True)friends=itchat.search_friends(userName='@16b071aa1a7c5b67b0c7911ede8cc53db5bd0c4d63f059142be7a5d6168ff074')print(friends[0])12345查询昵称‘番茄土豆’用户信息(相较于userName来说nickName更方便使用)importitchatitchat.auto_login(hotReload=True)friends=itchat.search_friends(nickName='番茄土豆')print(friends[0])12345数据格式说明'MemberList':'','Uin':0,'UserName':'@16b071aa1a7c5b67b0c7911ede8cc53db5bd0c4d63f059142be7a5d6168ff074','NickName':'番茄土豆','HeadImgUrl':'/cgi-bin/mmwebwx-bin/webwxgeticon?seq=768678887&username=@16b071aa1a7c5b67b0c7911ede8cc53db5bd0c4d63f059142be7a5d6168ff074&skey=@crypt_13d84e54_651a5a10883168912a00eb384261832c','ContactFlag':3,'MemberCount':0,'RemarkName':'','HideInputBarFlag':0,'Sex':0,'Signature':'','VerifyFlag':0,'OwnerUin':0,'PYInitial':'PJTD','PYQuanPin':'panjiatudou','RemarkPYInitial':'','RemarkPYQuanPin':'','StarFriend':0,'AppAccountFlag':0,'Statues':0,'AttrStatus':102437,'Province':'','City':'','Alias':'','SnsFlag':1,'UniFriend':0,'DisplayName':'','ChatRoomId':0,'KeyWord':'','EncryChatRoomId':'','IsOwner':012345678910111213141516171819202122232425262728293031设置联系人置顶在itchat的早期版本中,set_pinned方法用来设置某个微信好友为置顶好友的。但是,由于微信官方接口的变化,这个方法现在可能已经无法使用了。查询昵称:番茄土豆的联系人设置置顶操作importitchatitchat.auto_login(hotReload=True)friend_list=itchat.search_friends(nickName='番茄土豆')iffriend_list:contact=friend_list[0]userName=contact.UserNamebaseResponse=itchat.set_pinned(userName=userName,isPinned=True)ifbaseResponse['BaseResponse']['Ret']==0:print("success")else:print("fail")1234567891011121314baseResponse属性{'BaseResponse':{'Ret':0,'ErrMsg':'请求成功','RawMsg':'请求成功'}}1'运行运行资源上传案例进行资源文件上传微信服务器获取媒体ID即MediaId。defupload_file(self,fileDir,isPicture=False,isVideo=False,toUserName='filehelper',file_=None,preparedFile=None):1上传图片资源类型案例importitchatitchat.auto_login(hotReload=True)baseResponse=itchat.upload_file('image.jpg',isPicture=True)ifbaseResponse['BaseResponse']['Ret']==0:MediaId=baseResponse['MediaId']print("success")else:print("fail")1234567891011baseResponse{'BaseResponse':{'Ret':0,'ErrMsg':'请求成功','RawMsg':'请求成功'},'MediaId':'@crypt_e4c0786c_eb0f1099f841e1f83929986d0cf72492fce0876379a21067dc3b8f5fcbcb2bde100a639cf8abb8e6b54b74305187c3bf9ef4dfa1a71d5e255c114b90f27b44aa7c32d4770a79308c1c562a562872afec89d2ed2ce6762de846161b1f3958bdd0681477e152e1f49bcd32c1d36bcabf85b43b5a5ba641d78ccd7bd3aef24a045763d8015b7c980a65663f190b4787f50c2230f67064e9e1ac62382e0a69e91693f347643103e9283742a0ffe9ca4cf3bc080da5c9dd9d5acda2eb4874c56960c6837380e27968593474be01ddc1a633326d8e74c09651b3255026fe665084a5dbca8e29bacc70e84d08e5dec6e74f95fc224251d55ae7f832fe25580d3fa086c1b099d0c2d180fa6615b478eb0e09af6e91cc8b0ff4571f928593c0d68e6be951','StartPos':54082,'CDNThumbImgHeight':100,'CDNThumbImgWidth':100,'EncryFileName':'image%2Ejpg'}1'运行运行上传视频资源类型案例importitchatitchat.auto_login(hotReload=True)baseResponse=itchat.upload_file('video.mp4',isVideo=True)print(baseResponse)ifbaseResponse['BaseResponse']['Ret']==0:MediaId=baseResponse['MediaId']print("success")else:print("fail")12345678910111213发送图片类型消息send_image函数:发送指定用户指定图片类型defsend_image(self,fileDir=None,toUserName=None,mediaId=None,file_=None):1函数说明:属性toUserName:指定所需要发送给他(她)图片的用户。属性fileDir: 文件地址,默认情况下send_image会先把本地图片资源上传到微信服务器,然后进行发送图片。属性mediaId: 媒体Id,通过itchat.upload_file获取,若配置了,就不会重复加载本地资源,先上传微信服务器,然后再进行发送,而是直接从微信服务器进行读取,然后进行发送图片。属性file_: 指定file对象。配置打开状态下file对象(withopen···打开)。1234567查询昵称番茄土豆联系人发送image.jpg图片importitchatitchat.auto_login(hotReload=True)itchat.dump_login_status("itchat.pkl")friend_list=itchat.search_friends(nickName='番茄土豆')iffriend_list:friend=friend_list[0]baseResponse=itchat.send_image(fileDir="image.jpg",toUserName=friend.UserName)ifbaseResponse['BaseResponse']['Ret']==0:print("success")else:print("fail")1234567891011121314运行结果文件错误baseResponse常见报错{‘BaseResponse’:{‘ErrMsg’:‘文件位置错误’,‘Ret’:-1002,‘RawMsg’:‘Nofilefoundinspecificdir’}}配置MediaId进行发送图片(案例实验)准备两张相同大小、相同分辨率、相同文件类型的图片image1.jpg、image2.jpg(可以随便找张图片复制一个副本进行实验)importtimeimportitchatitchat.auto_login(hotReload=True)itchat.dump_login_status("itchat.pkl")friend_list=itchat.search_friends(nickName='夜雨星空')iffriend_list:friend=friend_list[0]start_time=time.time()print("第1次开始时间:",start_time)baseResponse=itchat.send_image(fileDir="image1.jpg",toUserName=friend.UserName)ifbaseResponse['BaseResponse']['Ret']==0:print("success")else:print("fail")end_time=time.time()print("第1次结束时间:",end_time)print("第1次花费时间:",end_time-start_time)MediaId=NonebaseResponse=itchat.upload_file('image2.jpg',isPicture=True)ifbaseResponse['BaseResponse']['Ret']==0:MediaId=baseResponse['MediaId']print("success")else:print("fail")time.sleep(5)ifMediaId:start_time=time.time()print("第2次开始时间:",start_time)baseResponse=itchat.send_image(fileDir="image2.jpg",toUserName=friend.UserName,mediaId=MediaId)ifbaseResponse['BaseResponse']['Ret']==0:print("success")else:print(baseResponse)print("fail")end_time=time.time()print("第2次结束时间:",end_time)print("第2次花费时间:",end_time-start_time) time.sleep(5)withopen("image.jpg",'rb')asimage:start_time=time.time()print("第3次开始时间:",start_time)baseResponse=itchat.send_image(toUserName=friend.UserName,file_=image)ifbaseResponse['BaseResponse']['Ret']==0:print("success")else:print(baseResponse)print("fail")end_time=time.time()print("第3次结束时间:",end_time)print("第3次花费时间:",end_time-start_time)12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061实验结果:第1次开始时间:1713025956.1631649success第1次结束时间:1713025957.1552198第1次花费时间:0.9920549392700195success第2次开始时间:1713025962.2728899success第2次结束时间:1713025962.7113612第2次花费时间:0.43847131729125977第3次开始时间:1713025967.712695success第3次结束时间:1713025968.5231287第3次花费时间:0.810433864593505912345678910111213实验数据表明:第一次的时间是0.90秒,第二次的时间是0.33秒,第三次的时间是0.81秒。说明提前把图片资源数据上传到微信服务器,都要比每次本地读取图片资源上传的时间开销要短。常见问题{‘BaseResponse’:{‘ErrMsg’:‘参数错误’,‘Ret’:-1005,‘RawMsg’:‘EitherfileDirorfile_shouldbespecific’}}文件路径fileDir和file_必须要指定一个。发送视频类型消息查询昵称夜雨星空联系人发送video.mp4视频importitchatitchat.auto_login(hotReload=True)itchat.dump_login_status("itchat.pkl")friend_list=itchat.search_friends(nickName='夜雨星空')iffriend_list:friend=friend_list[0]baseResponse=itchat.send_video(fileDir="video.mp4",toUserName=friend.UserName)ifbaseResponse['BaseResponse']['Ret']==0:print("success")else:print("fail")1234567891011121314测试结果接收语音类型消息开启一个私聊监听语音消息的消息注册器,存储私信的语音数据。importitchatfromitchat.contentimport*importtimeitchat.auto_login(hotReload=True)@itchat.msg_register(VOICE)defdownload_voice(msg): print(msg)get_download_fn=msg['Text']withopen(f"voice_{str(time.time())}.mp3",'wb')asfile:file.write(get_download_fn())print("success")itchat.run()12345678910111213141516msg消息体{'MsgId':'5692830849988916957','FromUserName':'@c0fe14053c62806a81dddb991a99310762a24834c5659209e734b4a8f28e9cf4','ToUserName':'@1c36f5debae32a8091e98b867bd3942b880c025866707bc030759313a59616bf','MsgType':34,'Content':'@f775c6e5de55b0355b2898694e8b33290adce345777eaecf27f83af03663a376d7069003478ce56bdfb935976a0856e53f61ed2a6e50a66803a7b83a6b305cb820617d71ffb4db4064b0a7a08ad04afdf32e6f2f3e1a97694c12ebe9f289dc331f8cda876b8bf0bef46c023917ed48d3843596068fe6950ee111ec729e7209aebc9ee29a0030a5d8711a22a469dbc4c38386c9c455aeb04ddaf3b37d052508b1598ad1a40e12deb2c4c789608c09552e94a18b77d82239992d54a3341d69e466a1bc2fb06909ae69b72d9ddf6a6f962e702e49bb26247bcd7f82a9f3b2d5c4891a060c0c54c812c8c17b046dd3a951fabab83e378690594084913f9d3d3a5afaf02379dcae8d106c7f934ab4303c08f18a0ccabb899cd93e6be0eba2d0b0207a249af537a729cd84e839f833c5b1f3832d6c53250a97c73822481f89eb4ea94bb80b3d4598ad6063b0d5f07b3b00f4ca7477ac22de031f78627d4e6176cbdfa721d039167e61f502baccc6c803ca3b347e7777715686e7ab90d79e86747c453693fcca3e424dcd4c1db4d5635d75cd3d47e059b81dbfb6f1a2e943a5dd3f154c55575827e5c52531139862df8a7f2d3a41d272077655e98b4c9ab75f127caff484269a0120b2f89297756259e732b2ff5b4d073be1a0336ef8ac52a2504e5fd6','Status':3,'ImgStatus':1,'CreateTime':1713029115,'VoiceLength':1648,'PlayLength':0,'FileName':'240414-012516.mp3','FileSize':'','MediaId':'','Url':'','AppMsgType':0,'StatusNotifyCode':0,'StatusNotifyUserName':'','RecommendInfo':{'UserName':'','NickName':'','QQNum':0,'Province':'','City':'','Content':'','Signature':'','Alias':'','Scene':0,'VerifyFlag':0,'AttrStatus':0,'Sex':0,'Ticket':'','OpCode':0},'ForwardFlag':0,'AppInfo':{'AppID':'','Type':0},'HasProductId':0,'Ticket':'','ImgHeight':0,'ImgWidth':0,'SubMsgType':0,'NewMsgId':5692830849988916957,'OriContent':'','EncryFileName':'','User':,'Uin':0,'UserName':'@c0fe14053c62806a81dddb991a99310762a24834c5659209e734b4a8f28e9cf4','NickName':'王牌哥哥','HeadImgUrl':'/cgi-bin/mmwebwx-bin/webwxgeticon?seq=768687014&username=@c0fe14053c62806a81dddb991a99310762a24834c5659209e734b4a8f28e9cf4&skey=@crypt_13d84e54_0eb12882a8a3a1f04047afebf03db315','ContactFlag':3,'MemberCount':0,'RemarkName':'糯米宝宝','HideInputBarFlag':0,'Sex':0,'Signature':'','VerifyFlag':0,'OwnerUin':0,'PYInitial':'WPGG','PYQuanPin':'wangpaigege','RemarkPYInitial':'NMBB','RemarkPYQuanPin':'nuomibaobao','StarFriend':0,'AppAccountFlag':0,'Statues':0,'AttrStatus':4135,'Province':'','City':'','Alias':'','SnsFlag':256,'UniFriend':0,'DisplayName':'','ChatRoomId':0,'KeyWord':'','EncryChatRoomId':'','IsOwner':0}>,'Type':'Recording','Text':.download_fnat0x000002D7F7C763E0>}1get_download_fn:存储语音数据发送文件类型消息send_file:发送文件函数(指定群/用户发送文件)defsend_file(self,fileDir,toUserName=None,mediaId=None,file_=None):1函数说明:属性toUserName:指定所需要发送给他(她)文件资源的用户。属性fileDir: 文件地址,默认情况下send_file会先把本地文件资源上传到微信服务器,然后进行发送文件资源。属性mediaId: 媒体Id,通过itchat.upload_file获取,若配置了,就不会重复加载本地资源,先上传微信服务器,然后再进行发送,而是直接从微信服务器进行读取,然后进行发送图片。属性file_: 指定file对象。配置打开状态下file对象(withopen···打开)。1234567查询昵称夜雨星空联系人发送helloworld.docx文档importitchatitchat.auto_login(hotReload=True)itchat.dump_login_status("itchat.pkl")friend_list=itchat.search_friends(nickName='夜雨星空')iffriend_list:friend=friend_list[0]baseResponse=itchat.send_file(fileDir="./helloworld.docx",toUserName=friend.UserName)ifbaseResponse['BaseResponse']['Ret']==0:print("success")else:print("fail")1234567891011121314测试结果获取微信群数据获取当前登陆微信下全部微信群数据(本地数据/实时数据)get_chatrooms函数defget_chatrooms(self,update=False,contactOnly=False):1特别注意:如果不设置update获取是本地local数据(itchat.pkl数据)。属性contactOnly如果配置了True,则仅返回starred标记了的微信群。读取实时数据:读取当前登陆态数据importitchatitchat.auto_login(hotReload=True)chatroom_list=itchat.get_chatrooms(update=True)forroominchatroom_list:print(room)1234567读取本地数据:不登录也同样可以读取数据(itchat.pkl数据加载)importitchatitchat.dump_login_status("itchat.pkl")chatroom_list=itchat.get_chatrooms(update=False)forroominchatroom_list:print(room)1234567我们没有进行itchat扫描登陆操作,通过加载itchat.pkl登陆数据,同样查询到微信群数据。设置微信群名称查询“唤醒手腕测试群”微信群设置新的群名称:唤醒手腕新群importitchatitchat.auto_login(hotReload=True)itchat.dump_login_status("itchat.pkl")chatroom_list=itchat.get_chatrooms(update=True)forroominchatroom_list:ifroom.NickName=="唤醒手腕测试群":baseResponse=itchat.set_chatroom_name(chatroomUserName=room.UserName,name="唤醒手腕新群")ifbaseResponse['BaseResponse']['Ret']==0:print("success")else:print("fail")1234567891011121314特别注意:由于微信web协议限制(设置群名称功能可能已经失效了)查询微信群发送消息通过get_friends方法可以轻松获取所有的好友(好友首位是自己)。进行判断群名匹配,从而获取群的UserName属性进行发送指定群消息。.env配置文件SEND_ROOM_NAME=唤醒手腕测试群1实现源码importitchatfromitchat.contentimport*importdotenvdotenv.load_dotenv('.env')itchat.auto_login()chatroom_list=itchat.get_chatrooms(update=True)forroominchatroom_list:ifroom.NickName==os.getenv("SEND_ROOM_NAME"):GROUP_USERNAME=room.UserNamemessage="唤醒手腕"itchat.send_msg(msg=message,toUserName=GROUP_USERNAME)itchat.run()1234567891011121314151617实现消息群发助手通过get_friends方法可以轻松获取所有的好友(好友首位是自己)。基于不同的好友可以发送不同的消息。这条程序运行后是真的会发消息出去,如果只是演示目的,把itchat.send改为print即可。importitchatimporttimeitchat.auto_login(True)SINCERE_WISH=u'祝%s新年快乐!'friendList=itchat.get_friends(update=True)[1:]forfriendinfriendList:itchat.send(SINCERE_WISH%(friend['DisplayName']orfriend['NickName']),friend['UserName'])time.sleep(.5)12345678910登陆稳定性常见问题命令行登录一段时间后无法与服务器正常交互,这是因为微信网页端存在心跳机制,一段时间不交互将会断开连接。另外,每次获取数据时(webwxsync)记得更新SyncKey。待更新······
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-27 00:30 , Processed in 1.160779 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表