现在在尝试用pywinauto获取聊天记录,但遇到了很多困难,谁有代码可以学习一下呢
下面是我写的代码,才刚起步,聊天内容的时间、文本、微信名都不知如何获取
app = Application(backend='uia').connect(process=PID)
win = app['微信']
dlg = win.child_window(title='聊天记录', control_type='Button')
dlg.draw_outline(colour='red')
dlg.click_input()
time.sleep(3)
mes_dlg = app['微信名']
mes_list = mes_dlg.child_window(title='全部', control_type='List')
for mes in mes_list.items():
value = mes_dlg.child_window(control_type="Edit") # 这里不知如何搞了
引用chatgpt部分指引作答:
获取微信聊天记录是一个比较复杂的任务,需要对UI元素进行识别和操作。下面是一个简单的示例代码,可以获取微信聊天窗口中的文本消息内容和发送时间,您可以参考一下:
from pywinauto.application import Application
import time
# 启动微信
app = Application(backend='uia').start('微信.exe')
time.sleep(5)
# 连接微信进程
app = Application(backend='uia').connect(title='微信', timeout=10)
# 进入聊天窗口
chat = app['微信']
chat.child_window(title='聊天', control_type='Button').click_input()
chat.child_window(title='搜索', control_type='ToolBar').click_input()
chat.child_window(title='搜索', control_type='ToolBar').type_keys('微信名')
chat.child_window(title='微信名', control_type='ListItem').click_input()
# 获取聊天记录
mes_dlg = app['微信名']
mes_list = mes_dlg.child_window(title='聊天记录', control_type='List')
for mes in mes_list.children():
try:
# 获取消息发送时间
time_item = mes.child_window(class_name='Static', control_type='Text')
send_time = time_item.window_text()
# 获取消息文本内容
content_item = mes.child_window(class_name='RichEdit20W', control_type='Edit')
content = content_item.window_text()
print(send_time, content)
except Exception as e:
print('Error:', e)
需要注意的是,聊天记录窗口中的UI元素可能因微信版本而异,需要根据实际情况进行调整。此外,由于微信中的UI元素比较多,有时候需要一定的延时来保证程序的稳定性。
基于new bing的参考学习:
获取微信聊天记录需要先定位到对应的控件,然后根据控件的属性、方法获取其中的文本信息。以下是一个示例代码,可以帮助你学习如何获取微信聊天记录:
import pywinauto
from pywinauto import Desktop
# 获取微信主窗口句柄
app = pywinauto.Application(backend='uia').connect(title_re="微信.*")
wechat_main = app.window(title_re="微信.*")
# 跳转到聊天记录页面
wechat_main.child_window(title="聊天", auto_id="ChatTab").click_input()
wechat_main.child_window(title="更多功能按钮").click_input()
wechat_main.child_window(title="聊天记录").click_input()
# 获取聊天记录窗口句柄
wechat_chatlog = Desktop(backend="uia")["微信"].child_window(auto_id="chatLog")
# 循环读取每条聊天记录的文本内容和时间
for msg_item in wechat_chatlog.children():
try:
msg_time = msg_item.child_window(auto_id="msgTime")
msg_text = msg_item.child_window(auto_id="msgText")
print(msg_time.window_text(), msg_text.window_text())
except Exception as e:
print(e)
上面的示例代码中,我们首先通过 wechat_main 定位到微信主窗口,然后模拟点击操作,跳转到聊天记录页面。接着,我们获取聊天记录窗口句柄 wechat_chatlog,并从其中循环读取每条聊天记录的文本内容和时间。请注意,不同版本的微信客户端可能会有所不同,具体的控件属性请根据实际情况进行调整。
码字不易,如果对你有启发和帮助,请采纳! 答案参考Chatgpt解答
要使用pywinauto
来获取微信聊天记录,您需要先安装pywinauto
库,并确保已经安装了微信桌面版。
下面是一个示例代码,演示如何使用pywinauto
获取微信聊天记录的时间、文本和微信名:
from pywinauto import Application
from pywinauto.controls.win32_controls import ListView
# 启动微信
app = Application().start("微信.exe")
# 连接到微信主窗口
main_window = app.window(title_re='微信.*')
main_window.wait('ready')
# 切换到聊天窗口
chat_window = main_window.child_window(title='微信', control_type='Window')
chat_window.wait('ready')
# 获取聊天记录列表
chat_record_list = chat_window.child_window(control_type='Pane').child_window(control_type='Custom').\
child_window(control_type='Custom', found_index=1).child_window(control_type='Custom', found_index=1).\
child_window(control_type='Custom').child_window(control_type='List')
# 获取列表项数量
item_count = chat_record_list.item_count()
# 遍历列表项获取聊天记录
for i in range(item_count):
# 获取时间
time = chat_record_list.get_item(i).texts()[0]
# 获取文本
text = chat_record_list.get_item(i).texts()[1]
# 获取微信名
wx_name = chat_record_list.get_item(i).texts()[2]
# 打印聊天记录
print("时间:", time)
print("文本:", text)
print("微信名:", wx_name)
print("====================")
# 关闭微信
main_window.close()
请注意,这段代码假设您已经启动了微信桌面版,并且打开了某个聊天窗口。代码会遍历聊天记录列表,并逐个获取时间、文本和微信名,并将其打印出来。
确保在运行代码之前,已经安装了pywinauto
库(可以通过pip install pywinauto
进行安装)和微信桌面版。另外,根据您的实际微信界面可能存在的变化,您可能需要调整代码中的控件层次和属性来匹配微信窗口的结构。
请注意,使用pywinauto
来自动化控制第三方应用程序(如微信)时,可能会受到应用程序更新或界面变更的影响,从而导致代码失效。因此,需要根据具体情况进行调整和测试。
我教你,你可以下载一个spy++,它可以帮你分析窗口的层次关系和句柄
但是,微信的界面是自己画的,里面没有什么edit,但是有一个变通的办法,就是发送键盘,全选+复制
然后读取剪贴板,可以得到聊天记录
如果只是获取微信聊天记录这些,可以从本地文件入手,微信聊天记录保存在本地一个sqlite数据库里面。
以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:
首先,获取聊天记录需要找到对应的聊天窗口,然后在窗口中找到聊天记录的控件,通过控件获取聊天记录。
以下是一个示例代码,假设我们要获取微信中指定联系人的聊天记录:
from pywinauto.application import Application
import time
# 连接微信
app = Application(backend='uia').connect(title='微信', class_name='WeChatMainWndForPC')
# 打开聊天窗口
contact = '联系人名称'
app['微信'].child_window(title=contact, control_type='ListItem').click_input(double=True)
# 获取聊天记录窗口
chat_window = app.window(title_re='.*'+contact+'.*', class_name='ChatWnd')
# 滚动到顶部,确保所有聊天记录都加载出来
ctrl = chat_window.child_window(title='聊天记录', control_type='Button')
ctrl.draw_outline(colour='red')
ctrl.click_input()
time.sleep(1)
chat_history = chat_window.child_window(title='聊天记录', control_type='Pane')
chat_history.type_keys('{HOME}')
# 获取聊天记录
messages = chat_history.children(control_type='Text')
for message in messages:
print(message.window_text())
这段代码首先连接微信,然后打开指定联系人的聊天窗口。接着获取聊天窗口中的聊天记录窗口,并滚动到顶部,确保所有聊天记录都加载出来。最后,通过获取聊天记录窗口中的所有 Text 类型的控件,获取所有聊天记录的文本内容。
需要注意的是,不同版本的微信可能控件的名称和类型会有所不同,需要根据实际情况进行调整。
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
获取微信聊天记录需要经过几个步骤:
打开微信程序,并进入指定的聊天窗口。
点击窗口中的“聊天记录”按钮,进入聊天记录页面。
获取页面中的聊天记录信息:包括时间、聊天内容、聊天用户。
以下是获取微信聊天记录的样例代码,你可以根据自己需求行动:
from pywinauto import Application
import time
# 连接微信应用程序
wechat = Application(backend="uia").connect(path=r"C:\Program Files (x86)\Tencent\WeChat\WeChat.exe")
wechat_dialog = wechat.window(title_re="WeChat.*")
wechat_dialog.wait('exists enabled visible', timeout=30)
# 获取微信主窗口、聊天窗口和聊天记录按钮
main_window = wechat.window(title_re="WeChat.*")
chat_window = main_window.child_window(control_type="Window", title="微信", backend="uia")
record_button = chat_window.child_window(title="聊天记录", control_type="Button")
# 点击聊天记录按钮,打开聊天记录窗口
record_button.click_input()
time.sleep(3)
# 获取聊天记录窗口和全部历史消息按钮
records_window = wechat.window(title="聊天记录", control_type="Window")
all_records_button = records_window.child_window(title="全部", control_type="RadioButton", found_index=1)
all_records_button.click_input()
# 获取聊天记录窗口句柄和聊天记录列表项
record_list_box = records_window.child_window(title="聊天记录", control_type="List")
record_list_box_items = record_list_box.children()
# 遍历聊天记录列表项,获取聊天记录信息
for item in record_list_box_items:
# 获取聊天时间和聊天内容等
chat_time = item.child_window(title_re='\\d{1,2}:{1}\\d{2}:{1}\\d{2}').get_value()
chat_content = item.child_window(title_re='\\S+').get_value()
# 获取聊天用户昵称
chat_user = item.child_window(title_re='\\S+', control_type='Text')
# 输出聊天记录信息
print(f"[{chat_time}] {chat_user.get_value()}: {chat_content}")
希望这段代码可以帮助你完成微信聊天记录的抓取。
如果我的回答解决了您的问题,请采纳!
Python自动化操作pywinauto
可以借鉴下
https://blog.csdn.net/cangxiao/article/details/128521967