200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 微信群成员的群昵称提取与批量查询(Python实现)

微信群成员的群昵称提取与批量查询(Python实现)

时间:2020-09-26 17:19:10

相关推荐

微信群成员的群昵称提取与批量查询(Python实现)

wechat_group_members

此脚本不存在任何联网上传机制,可安全使用

主要原理

通过pywinauto分析微信界面元素,提取群成员昵称和用户名

程序代码

from pywinauto.application import Applicationimport pywinautoimport timeimport psutilimport pandas as pdimport numpy as npdef get_wechat_pid():pids = psutil.pids()for pid in pids:p = psutil.Process(pid)if p.name() == 'WeChat.exe':return pidreturn Nonedef get_name_list(pid):print('>>> WeChat.exe pid: {}'.format(pid))print('>>> 请打开【微信=>目标群聊=>聊天成员=>查看更多】,尤其是【查看更多】,否则查找不全!')for i in range(20):print('\r({:2d} 秒)'.format(20 - i), end='')time.sleep(1)app = Application(backend='uia').connect(process=pid)win_main_Dialog = app.window(class_name='WeChatMainWndForPC')chat_list = win_main_Dialog.child_window(control_type='List', title='聊天成员')name_list = []all_members = []for i in chat_list.items():p = i.descendants()if p and len(p) > 5:if p[5].texts() and p[5].texts()[0].strip() != '' and (p[5].texts()[0].strip() != '添加' and p[5].texts()[0].strip() != '移出'):name_list.append(p[5].texts()[0].strip())all_members.append([p[5].texts()[0].strip(), p[3].texts()[0].strip()])pd.DataFrame(np.array(all_members)).to_csv('all_members.csv', header=['群昵称', '微信昵称'])print('\r>>> 群成员共 {} 人,结果已保存至all_members.csv'.format(len(name_list)))return name_listdef match():pid = get_wechat_pid()if pid == None:print('>>> 找不到WeChat.exe,请先打开WeChat.exe再运行此脚本!')returntry:member_list = get_name_list(pid)except pywinauto.findwindows.ElementNotFoundError as e:print('\r>>> 未找到【聊天成员】窗口,程序终止!')print('>>> 若已开启【聊天成员】窗口但仍报错,请重启微信(原因:可能存在多个WeChat进程)')returnmode = ''while True:mode = input('>>> 是否需要根据name_list.txt进行匹配? [y/n] ')if mode != 'y' and mode != 'n':print('>>> 请输入 y 或 n选择模式 [y/n] ')else:if mode == 'n':returnelse:breaknot_found = []count = 0with open('./name_list.txt', 'r', encoding='utf-8')as fp:for i in fp.readlines():i, result = i.strip(), Falseif i == '':continuecount += 1for j in member_list:if i in j:result = Truemember_list.remove(j)if not result:not_found.append(i)if count == 0:print('>>> name_list.txt为空!请输入待查询成员群昵称!(每行一个群昵称)')returnprint('>>> 匹配失败列表:\n------------------------------')print('\n'.join(not_found))print('------------------------------')if __name__ == '__main__':match()

使用说明

启动微信命令行执行python member_match.py根据提示打开【微信=>目标群聊=>聊天成员=>查看更多】,尤其是【查看更多】,否则查找不全!等待读秒结束,all_members.csv即为所有群成员的群昵称和用户名选择模式,y代表进行匹配(查询name_list.txt中给定成员是否存在),n代表不匹配直接结束 若选择y,则事先应该在py文件同级目录准备好name_list.txt,内容为待查询成员群昵称,每行为一个群昵称(注意不是用户昵称,否则需要修改代码) 输出结果

成功案例

运行错误案例

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。