Python读取微信朋友圈_微信强制访问朋友圈代码-CSDN博客
https://blog.csdn.net/oldmao_2001/article/details/119787392参考这位博主的工作,我进一步更新了代码。
开发环境:Windows10+Anaconda1.6.3(conda 4.3.30)+Jupyter Notebook5.0.0+Python3.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(backend='uia').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_2=pyq_win.child_window(title="朋友圈", control_type="List")#pyq_2类型为 pywinauto.application.WindowSpecification,控件类型为ListBox
#每条朋友圈信息就是一个pyq_2的一个子控件
pyq_list=pyq_2.children(control_type="ListItem")
count=len(pyq_list)#count记录当前页面朋友圈条数
4.循环读取每一个控件的内容
pyq_item=pyq_2.child_window(control_type="ListItem",found_index=k)
publisher=pyq_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_list=pyq_item.child_window(control_type="Text")
des=pyq_item.descendants(control_type="Text")
file.write("点赞评论列表:\n")
for element in des:
text=element.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(backend='uia').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", encoding="utf-8")
times=50# 向下滑动次数
with open("output.txt", "w", encoding="utf-8") as file:
for i in range(times):
pyq_2=pyq_win.child_window(title="朋友圈", control_type="List")#pyq_2类型为pywinauto.application.WindowSpecification,控件类型为ListBox
#每条朋友圈信息就是一个pyq_2的一个子控件
pyq_list=pyq_2.children(control_type="ListItem")
count=len(pyq_list)#count记录当前页面朋友圈条数
for k in range(count-1):
try:
pyq_item=pyq_2.child_window(control_type="ListItem",found_index=k)
publisher=pyq_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_list=pyq_item.child_window(control_type="Text")
des=pyq_item.descendants(control_type="Text")
file.write("点赞评论列表:\n")
for element in des:
text=element.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()
2827

被折叠的 条评论
为什么被折叠?



