
前些天发现了一个人工智能学习网站向大家分享一下。网站链接前言 – 人工智能学习网Python读取微信朋友圈_微信强制访问朋友圈代码-CSDN博客https://blog.csdn.net/oldmao_2001/article/details/119787392参考这位博主的工作我进一步更新了代码。开发环境Windows10Anaconda1.6.3(conda 4.3.30)Jupyter Notebook5.0.0Python3.6.2本工具实现功能自动读取历史微信朋友圈的发布者、点赞者列表、评论列表本工具工作流程1.读取电脑版微信进程号连接此进程#初始化默认进程 PID 0 #我们把进程ID来提供给PyWinAuto 以便于链接微信电脑版 for proc in psutil.process_iter(): try: pinfo proc.as_dict(attrs[pid,name]) except psutil.NoSuchProcess: pass else: if Wechat.exe pinfo[name] or WeChat.exe pinfo[name]: PID pinfo[pid] #PyWinAuto实例化并启动应用 app Application(backenduia).connect(process PID) windows app.windows()2.打开微信电脑版并打开朋友圈(可选)#控制微信电脑版把朋友圈打开 #win app[微信] #win.print_control_identifiers()#以树形方式打印窗口上所有控件 #pyq_but win.child_window(title 朋友圈,control_type Button) #pyq_but.draw_outline() #cords pyq_but.rectangle() #点击朋友圈按钮 #pywinauto.mouse.click(button left,coords (cords.left 10,cords.top 10))2.读取朋友圈窗口内容pyq_win app[朋友圈] pyq_win.draw_outline() pyq_win.set_focus()3.统计窗口内控件数pyq_2pyq_win.child_window(title朋友圈, control_typeList)#pyq_2类型为 pywinauto.application.WindowSpecification,控件类型为ListBox #每条朋友圈信息就是一个pyq_2的一个子控件 pyq_listpyq_2.children(control_typeListItem) countlen(pyq_list)#count记录当前页面朋友圈条数4.循环读取每一个控件的内容pyq_itempyq_2.child_window(control_typeListItem,found_indexk) publisherpyq_item.window_text() newline_index publisher.find(\n)5.拆分出控件内显示的发布者与点赞评论列表信息if newline_index ! -1: publisher publisher[:newline_index-1]#截取冒号之前 file.write(\n发布者:\n) file.write(publisher\n) pyq_comment_listpyq_item.child_window(control_typeText) despyq_item.descendants(control_typeText) file.write(点赞评论列表:\n) for element in des: textelement.window_text() if text!昨天 and text!刚刚 and not text.endswith(前): file.write(text\n)6.翻页for j in range(5): #朋友圈窗口scroll方法无效 pywinauto.keyboard.send_keys({DOWN}) # 向下滑动一次 time.sleep(0.01)注意1. 具体滑动次数根据设备性能和设备设置不同而不同建议使用者根据自己的需求进行修改2.本工具无法保证抓取结果不重复不遗漏未来开发者可进一步开发去重功能3.本工具无法读取微信朋友圈图片内容完整代码如下# -*- coding:utf-8 -*- import psutil import pywinauto import time from IPython.display import clear_output as clear from pywinauto.application import Application psutil 用于获取微信电脑版的进程信息 pywinauto 用于自动化控制微信电脑版 def getWechat(): #初始化默认进程 PID 0 #我们把进程ID来提供给PyWinAuto 以便于链接微信电脑版 for proc in psutil.process_iter(): try: pinfo proc.as_dict(attrs[pid,name]) except psutil.NoSuchProcess: pass else: if Wechat.exe pinfo[name] or WeChat.exe pinfo[name]: PID pinfo[pid] #PyWinAuto实例化并启动应用 app Application(backenduia).connect(process PID) windows app.windows() #控制微信电脑版把朋友圈打开 #win app[微信] #win.print_control_identifiers()#以树形方式打印窗口上所有控件 #pyq_but win.child_window(title 朋友圈,control_type Button) #pyq_but.draw_outline() #cords pyq_but.rectangle() #点击朋友圈按钮 #pywinauto.mouse.click(button left,coords (cords.left 10,cords.top 10)) pyq_win app[朋友圈] pyq_win.draw_outline() pyq_win.set_focus() # 将焦点设置到朋友圈窗口 open(output.txt, w, encodingutf-8) times50# 向下滑动次数 with open(output.txt, w, encodingutf-8) as file: for i in range(times): pyq_2pyq_win.child_window(title朋友圈, control_typeList)#pyq_2类型为pywinauto.application.WindowSpecification,控件类型为ListBox #每条朋友圈信息就是一个pyq_2的一个子控件 pyq_listpyq_2.children(control_typeListItem) countlen(pyq_list)#count记录当前页面朋友圈条数 for k in range(count-1): try: pyq_itempyq_2.child_window(control_typeListItem,found_indexk) publisherpyq_item.window_text() newline_index publisher.find(\n) # 如果找到换行符获取从开头到换行符的内容 if newline_index ! -1: publisher publisher[:newline_index-1]#截取冒号之前 file.write(\n发布者:\n) file.write(publisher\n) pyq_comment_listpyq_item.child_window(control_typeText) despyq_item.descendants(control_typeText) file.write(点赞评论列表:\n) for element in des: textelement.window_text() if text!昨天 and text!刚刚 and not text.endswith(前): file.write(text\n) except: print(读取错误) break for j in range(5): #朋友圈窗口scroll方法无效 pywinauto.keyboard.send_keys({DOWN}) # 向下滑动一次 time.sleep(0.01) # 等待滑动完成 #先扫描当前页面 #一层循环 读取当前页面朋友圈条数读取每一条朋友圈 #二层循环 本条朋友圈内 读取Text子窗口总数读取点赞列表和每一条评论 提取信息输出 #向下滑动 print(输出结束) if __name__ __main__: getWechat()