目录
前言
笔者之前写过类似的文章(如下),不过只是获取了微信好友的昵称,并没有获取微信好友的备注以及标签。
【uiautomation】微信好友列表获取(存储到txt中)
因此这次笔者写了将微信好友昵称、备注、标签保存到excel中。
注:此次代码和之前写的文章的思路大致一样,就不重复前面步骤了,直接上源代码及结果。
源代码
# -*- coding: utf-8-*-
import subprocess
import uiautomation as auto
import time
import pandas as pd
df = []
columns = ['序号', '昵称', '备注', '标签'] # excel的标题栏
# ToDo 这里需要更改微信所在地址,可通过桌面微信图标右键打开文件所在的位置查找到路径
subprocess.Popen('E:\微信\WeChat\WeChat.exe')
wechatWindow = auto.WindowControl(searchDepth=1, className='WeChatMainWndForPC', Name='微信')
# 点击通讯录
button = wechatWindow.ButtonControl(Name='通讯录')
button.Click()
# 点击通讯录管理
administration = wechatWindow.ButtonControl(Name="通讯录管理")
administration.Click()
communication_administration = auto.WindowControl(Name="通讯录管理", ClassName="ContactManagerWindow")
# 将鼠标放至内容的中心,滚轮对联系人列表才能生效
communication_administration.MoveCursorToMyCenter()
list1 = communication_administration.ListControl(Name="")
# a表示存储列表,b表示计数器
a = []
b = 1
flag = True
start_time = time.time()
print("""开始时间:{}""".format(start_time))
while flag:
list1 = communication_administration.ListControl(Name="")
# nickname = list1.GetChildren()[0].TextControl()
nickname = list1.GetChildren()[0].GetFirstChildControl().GetFirstChildControl().GetChildren()[1].GetChildren()[1]
beizhu = list1.GetChildren()[0].GetFirstChildControl().GetFirstChildControl().GetChildren()[2].ButtonControl()
biaoqian = list1.GetChildren()[0].GetFirstChildControl().GetFirstChildControl().GetChildren()[3].ButtonControl()
# print(nickname.Name)
# print(beizhu.Name)
# print(biaoqian.Name)
'''判断是不是在列表a中,如果'''
if len(a) == 0 or nickname.Name != a[-1]:
# print(nickname.Name)
# print(beizhu.Name)
# print(biaoqian.Name)
# print("="*50)
print(b, '', nickname.Name)
df.append([b, nickname.Name, beizhu.Name, biaoqian.Name])
d = pd.DataFrame(df, columns=columns)
d.to_excel("微信朋友信息.xlsx", index=False)
b += 1
a.append(nickname.Name)
# 滚轮下滚
auto.WheelDown(waitTime=0.01)
# 手动实现滚轮滚动到底操作
# 空格
if auto.IsKeyPressed(auto.Keys.VK_SPACE):
print("到底了")
for j in list1.GetChildren()[1:]:
last_nickname = j.TextControl()
if last_nickname != a[-1]:
print(b, '', last_nickname.Name)
last_beizhu = j.GetFirstChildControl().GetFirstChildControl().GetChildren()[2].ButtonControl()
last_biaoqian = j.GetFirstChildControl().GetFirstChildControl().GetChildren()[3].ButtonControl()
df.append([b, last_nickname.Name, last_beizhu.Name, last_biaoqian.Name])
d = pd.DataFrame(df, columns=columns)
d.to_excel("微信朋友信息.xlsx", index=False)
b += 1
a.append(last_nickname)
print(a)
flag = False
end_time = time.time()
sum_time = end_time - start_time
print("""运行时间:{}s""".format(sum_time))
主要变化①
主要使用inspect.exe获取昵称、备注、标签。
nickname = list1.GetChildren()[0].GetFirstChildControl().GetFirstChildControl().GetChildren()[1].GetChildren()[1]
beizhu = list1.GetChildren()[0].GetFirstChildControl().GetFirstChildControl().GetChildren()[2].ButtonControl()
biaoqian = list1.GetChildren()[0].GetFirstChildControl().GetFirstChildControl().GetChildren()[3].ButtonControl()
主要变化②
df = []
columns = ['序号', '昵称', '备注', '标签'] # excel的标题栏
df.append([b, nickname.Name, beizhu.Name, biaoqian.Name])
d = pd.DataFrame(df, columns=columns)
d.to_excel("微信朋友信息.xlsx", index=False)
到最底部时,将获取的昵称等信息存入excel中
last_beizhu = j.GetFirstChildControl().GetFirstChildControl().GetChildren()[2].ButtonControl()
last_biaoqian = j.GetFirstChildControl().GetFirstChildControl().GetChildren()[3].ButtonControl()
df.append([b, last_nickname.Name, last_beizhu.Name, last_biaoqian.Name])
d = pd.DataFrame(df, columns=columns)
d.to_excel("微信朋友信息.xlsx", index=False)
结果
思考
目前该代码还存在一点点问题,比如,我有421个好友,最终excel中只获得了420个好友,原因是有些好友的昵称相同,接下来需要进行改进。
此外,需要手动空格来结束while循环,没有实现自动化,需要进行进一步的改进!!