温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何使用Python采集微信联系人

发布时间:2021-04-16 17:32:12 来源:亿速云 阅读:167 作者:Leah 栏目:开发技术

如何使用Python采集微信联系人?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

安装

pip install pywinauto

(1)首先微信要打开,并登录成功。获取当前微信的进程ID:

 PID=0   for proc in psutil.process_iter():     try:       pinfo = proc.as_dict(attrs=['pid','name'])     except psutil.NoSuchProcess:       pass     else:       if 'WeChat.exe' == pinfo['name']:         PID = pinfo['pid']

(2)使用pywinauto 连接到这个进程:

 app = Application(backend='uia').connect(process=PID)   win = app[u'微信']

(3)找到左边的“通讯录”按钮所在位置,点击鼠标:

 addresslist = win.child_window(title=u"通讯录", control_type="Button")   addresslist.draw_outline()   cords = addresslist.rectangle()   pywinauto.mouse.click(button='left', coords=(cords.left + 10, cords.top+10))   win.draw_outline()

(4)核心代码,通过调用向下的键盘指令,逐个打开联系人详情页,根据详情页的页面结构,页面内的所有数据:呢称、备注、地区、微信号、来源。

 #联系人   con_list = win.child_window(title=u"联系人", control_type="List")   pywinauto.mouse.click(button='left', coords=(cords.left + 100, cords.top+10))   data = []   while True:     con_list.type_keys("{DOWN}")     rect_edit = win.Edit2.rectangle()     #找到联系人详情页     if rect_edit.left > cords.left + 300:       #整个面板        page = {u'呢称':'',u'备  注':'',u'地  区':'',u'微信号':'',u'来  源':''}       #呢称       win.Edit2.draw_outline()       page[u'呢称'] = win.Edit2.get_value()       #由于详情页面要素不固定,不能用控件序号来检索       static_wxh = win.child_window(title=u"微信号", control_type="Text")       Pane46 = static_wxh.parent().parent()       for item in Pane46.children():         item.draw_outline()         lines = item.children()         key = lines[0].window_text()         value = lines[1].window_text()         page[key] = value       data.append(page)       #最后一个联系人时停止       if len(data) >2 and data[-2][u'微信号'] == data[-1][u'微信号']:         data.remove(data[-1])         saveTxt(data)         break

第四步的方法前后优化过多次,这是最后优化的版本,这个版本是多种方案中速度最快,同时兼容性最好的方法,如果哪位朋友还有更好的方案,欢迎留言讨论!

下面附上完整代码:

#coding=gbk ''' Created on  @author: Administrator ''' import psutil import pywinauto from pywinauto.application import Application import os import sys reload(sys) sys.setdefaultencoding('utf-8')   def getWinxin():   PID=0   for proc in psutil.process_iter():     try:       pinfo = proc.as_dict(attrs=['pid','name'])     except psutil.NoSuchProcess:       pass     else:       if 'WeChat.exe' == pinfo['name']:         PID = pinfo['pid']   app = Application(backend='uia').connect(process=PID)   win = app[u'微信']   addresslist = win.child_window(title=u"通讯录", control_type="Button")   addresslist.draw_outline()   cords = addresslist.rectangle()   pywinauto.mouse.click(button='left', coords=(cords.left + 10, cords.top+10))   win.draw_outline()      #联系人   con_list = win.child_window(title=u"联系人", control_type="List")   pywinauto.mouse.click(button='left', coords=(cords.left + 100, cords.top+10))   data = []   while True:     con_list.type_keys("{DOWN}")     rect_edit = win.Edit2.rectangle()     #找到联系人详情页     if rect_edit.left > cords.left + 300:       #整个面板        page = {u'呢称':'',u'备  注':'',u'地  区':'',u'微信号':'',u'来  源':''}       #呢称       win.Edit2.draw_outline()       page[u'呢称'] = win.Edit2.get_value()       #由于详情页面要素不固定,不能用控件序号来检索       static_wxh = win.child_window(title=u"微信号", control_type="Text")       Pane46 = static_wxh.parent().parent()       for item in Pane46.children():         item.draw_outline()         lines = item.children()         key = lines[0].window_text()         value = lines[1].window_text()         page[key] = value       data.append(page)       #最后一个联系人时停止       if len(data) >2 and data[-2][u'微信号'] == data[-1][u'微信号']:         data.remove(data[-1])         saveTxt(data)         break def saveTxt(data):   with open("data.txt",'ab') as f:     f.write(u'微信号,备注,地区,来源,呢称\r\n')     for item in data:       f.write('%s,%s,%s,%s,%s\r\n' % (item[u'微信号'],item[u'备  注'],item[u'地  区'],item[u'来  源'],item[u'呢称']))   os.system('notepad.exe data.txt') if __name__ == '__main__':   getWinxin()

看完上述内容,你们掌握如何使用Python采集微信联系人的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI