当前位置:首页 > 使用手册 > 正文内容

【分享】获取微信通讯录python代码形式实现

taoshihan6个月前 (10-10)使用手册150

具体流程就是:

1. 打开微信

2. 点击通讯录

3. 滚动鼠标到最顶部(防止已经滚动了一部分了)

4. 获取联系人列表

5. 找到最后一个空格所在的位置(后一个就是真正的联系人了)

6. 点击第一个联系人

7.记录下上一个联系人的微信号

7. 无限循环按键盘下箭头

当前微信号与上一个相同的时候,说明到底部了,可以跳出循环



获取详情中的以下元素内容

"微信号", "昵称", "地区", "备注", "标签", "签名", "来源"

逐行写入excel



效果图:





详细代码:

import datetime
import uiautomation as uia
from openpyxl import Workbook, load_workbook
from openpyxl.styles import Font, PatternFill

# 获取所有的会话列表
# 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)



扫描二维码推送至手机访问。

版权声明:本文由智语aichat发布,如需转载请注明出处。

本文链接:https://www.sopans.com/post/19.html

分享给朋友:

“【分享】获取微信通讯录python代码形式实现” 的相关文章

第零步:智能客服系统简介

项目简介智能客服系统是基于Golang语言自主开发的在线客服系统(以下简称客服系统)。创立于2019年初,是一款连接企业与客户的即时通讯项目,遵循快速、简洁的开发原则,是为中小企业量身定制的全渠道客服系统,致力于帮助广大开发者/公司快速部署整合私有化独立客服功能。客服系统的部署模式为私有化独立部署,...

python打开浏览器并模拟搜索

python打开浏览器并模拟搜索

打开已存在的浏览器打开已存在的浏览器有个很重要的作用就是,可以对于一些登录场景,提前登录好,不需要模拟登录了。在命令行中执行打开chrome的命令,在图标上找到chrome的安装位置在cmd命令行下执行命令C:\Program Files\Google\Chrome\Application>c...

除了ChatGPT,跨境电商必备的7个AI工具

除了ChatGPT,跨境电商必备的7个AI工具

要想做好一件事,就必须做好准备。目前,ChatGPT的火热程度相信大家有目共睹。此类人工智能类工具可以帮助跨境电商大幅提升效率和效果。那么,除了ChatGPT之外,跨境电商常用的必备工具还有哪些呢?1.  MonicaMonica 是一个基于 Google Chrome 浏览器的扩展插件,...

LookHandles.exe软件多开窗口修改标题

LookHandles.exe软件多开窗口修改标题

当我们针对某个软件进行多开以后,比如我们多开了电脑版微信。此时,使用UI自动化工具是无法准确确定窗口的,因为窗口的名称和类名都一样我们可以使用LookHandles.exe修改窗口名称修改窗口名称LookHandles.exe使用方法LookHandles.exe点住放大镜,移动到想要修改的窗口上,...

【分享】xpath的路径表达式

XPath(XML Path Language)是一种用于在XML文档中定位和选择元素的查询语言。XPath使用路径表达式来描述文档中的元素位置和关系。下面是XPath中常用的路径表达式的一些示例:选择根元素:要选择文档的根元素,可以使用斜杠(/)。/选择所有子元素:要选择某个元素的所有子元素,可...

太香了! 用影刀RPA控制ChatGPT自动产出内容

太香了! 用影刀RPA控制ChatGPT自动产出内容

用过 ChatGPT 的小伙伴都懂得自动生成内容有多爽不管是小红书笔记、dou 音脚本,还是公号文章打磨好输出模板就能稳定地产出高质量内容,再也不纠结没内容了但要是想批量做出多条内容,每段提示词都要重新输入简直把自己变成了莫得感情的“提示词录入器”这时,就轮到解放双手的影刀RPA上场啦你只需要把提问...