> 技术文档 > Python【代码 01】导出微信通讯录(微信号+昵称+地区+备注+标签+签名+来源)操作说明(可执行文件exe分享)_微信备注导出用python实现

Python【代码 01】导出微信通讯录(微信号+昵称+地区+备注+标签+签名+来源)操作说明(可执行文件exe分享)_微信备注导出用python实现

感谢程序员老狼的博文《【分享】获取微信通讯录python代码形式实现》的代码分享,这里算是操作说明。还使用 Pyinstaller简单打了个 .exe的包,网盘分享压缩包文件 exportWechatContacts.zip 大小 234MB

通过网盘分享的文件:CSDN_Python_exportWechatContacts

链接: https://pan.baidu.com/s/1WrFF8I_j_PumlvQNE8J0kg?pwd=quju 提取码: quju

导出微信通讯录

  • 1.环境
  • 2.代码
  • 3.执行
  • 4.exe 程序
  • 5.注意

1.环境

# python -VPython 3.9.18# 类库安装我使用的是condaconda install uiautomation==2.0.18

2.代码

创建 Python 文件 exportWechatContacts.py粘贴以下代码:

import datetimeimport uiautomation as uiafrom openpyxl import Workbook, load_workbookfrom openpyxl.styles import Font, PatternFilldef main(): # 获取所有的会话列表 # pip install openpyxl pandas uiautomation # 初始化微信窗口控件 wechat_window = uia.WindowControl(ClassName=\'WeChatMainWndForPC\') wechat_window.SwitchToThisWindow() wechat_window.MoveToCenter() # 获取窗口的坐标和尺寸 window_rect = wechat_window.BoundingRectangle window_left, window_top, window_width, window_height = window_rect.left, window_rect.top, window_rect.width(), window_rect.height() print(\"微信窗口坐标:\", window_left, window_top) print(\"微信窗口宽度:\", window_width) print(\"微信窗口高度:\", window_height) toolBar = wechat_window.ToolBarControl(Name=\"导航\") # 用于存储获取到的昵称和微信号名称 contacts = [] toolBar.GetChildren()[2].Click() # 滚动到顶部 prevTop = \"\" sameTopCount = 0 while sameTopCount < 2: session_list = wechat_window.ListControl(Name=\'联系人\') currentTop = session_list.GetChildren()[0].Name if currentTop == prevTop: sameTopCount += 1 else: sameTopCount = 0 prevTop = currentTop session_list.WheelUp(wheelTimes=20, waitTime=0.1) # 循环通讯录 # 记录上一次微信号 preWechatCode = \"\" # 重新获取会话列表控件 session_list = wechat_window.ListControl(Name=\'联系人\').GetChildren() # 从后往前找空格 index = len(session_list) for index, item in reversed(list(enumerate(session_list))): if item.Name == \"\": break # 第一个联系人点击 session_list[index + 1].Click() # 获取当前时间 current_time = datetime.datetime.now().strftime(\"%Y-%m-%d\") filename = f\"通讯录{current_time}.xlsx\" # 创建新的工作簿和工作表 wb = Workbook() ws = wb.active # 写入标题行 headers = [\"code\", \"nickname\", \"area\", \"remark\", \"tag\", \"sign\", \"from\"] headersName = [\"微信号\", \"昵称\", \"地区\", \"备注\", \"标签\", \"签名\", \"来源\"] # 设置字体颜色为白色,背景色为蓝色 font_color = Font(color=\"FFFFFF\") fill_color = PatternFill(start_color=\"0000FF\", end_color=\"0000FF\", fill_type=\"solid\") for col_num, header in enumerate(headersName, 1): cell = ws.cell(row=1, column=col_num, value=header) cell.font = font_color cell.fill = fill_color wb.save(filename) while True: try: wechatCodeTag = wechat_window.TextControl(Name=\"微信号:\") if not wechatCodeTag.Exists(0.1): wechat_window.SendKeys(\"{DOWN}\") continue contact = {\"code\": wechatCodeTag.GetNextSiblingControl().Name, \"nickname\": \"\", \"area\": \"\", \"remark\": \"\", \"tag\": \"\", \"sign\": \"\", \"from\": \"\"} # 到底部 if preWechatCode == contact[\"code\"]: break preWechatCode = contact[\"code\"] contact[\"nickname\"] = wechat_window.ButtonControl(Name=\"更多\").GetPreviousSiblingControl().Name nicknameTag = wechat_window.TextControl(Name=\"昵称:\") if nicknameTag.Exists(0.1): contact[\"remark\"] = contact[\"nickname\"] contact[\"nickname\"] = nicknameTag.GetNextSiblingControl().Name areaTag = wechat_window.TextControl(Name=\"地区:\") if areaTag.Exists(0.1): contact[\"area\"] = areaTag.GetNextSiblingControl().Name signTag = wechat_window.TextControl(Name=\"个性签名\") if signTag.Exists(0.1): contact[\"sign\"] = signTag.GetNextSiblingControl().Name tagTag = wechat_window.TextControl(Name=\"标签\") if tagTag.Exists(0.1): contact[\"tag\"] = tagTag.GetNextSiblingControl().Name fromTag = wechat_window.TextControl(Name=\"来源\") if fromTag.Exists(0.1): contact[\"from\"] = fromTag.GetNextSiblingControl().Name print(contact) # 加载当前的Excel文件 wb = load_workbook(filename) ws = wb.active # 追加数据 row = [contact[key] for key in headers] ws.append(row) # 保存到Excel文件 wb.save(filename) print(f\"数据已写入{filename}\") wechat_window.SendKeys(\"{DOWN}\") except Exception as e: print(e)if __name__ == \'__main__\': main()

3.执行

打开微信,使用 python 来执行文件 exportWechatContacts.py

Python【代码 01】导出微信通讯录(微信号+昵称+地区+备注+标签+签名+来源)操作说明(可执行文件exe分享)_微信备注导出用python实现

此时微信窗口会置顶,开始扫描通讯录,从群聊开始,直到第一个联系人,黑窗口会输出日志信息:

Python【代码 01】导出微信通讯录(微信号+昵称+地区+备注+标签+签名+来源)操作说明(可执行文件exe分享)_微信备注导出用python实现

通讯录会一直循环,同时生成名称为 通讯录+年月日.xlsx的文件,内容如下:

Python【代码 01】导出微信通讯录(微信号+昵称+地区+备注+标签+签名+来源)操作说明(可执行文件exe分享)_微信备注导出用python实现

4.exe 程序

如果没有Python环境,可直接下载压缩包,解压后会有一个目录一个可执行文件:

Python【代码 01】导出微信通讯录(微信号+昵称+地区+备注+标签+签名+来源)操作说明(可执行文件exe分享)_微信备注导出用python实现

双击脚本exportWechatContacts.ext即可导出通讯录:

Python【代码 01】导出微信通讯录(微信号+昵称+地区+备注+标签+签名+来源)操作说明(可执行文件exe分享)_微信备注导出用python实现

5.注意

  1. 可随时中断;
  2. 执行的次数过多,微信可能会检测到风险,自动退出登录。