想用Python写个收集微信PC端搜一搜的下拉词脚本,代码写出来后发现没办法完美运行,想请各位朋友帮忙看看到底是哪里出了问题。附上源码:
import os
import time
import pywinauto
import psutil
from pywinauto.keyboard import SendKeys
from docx import Document
# 获取微信进程
def get_wechat_process():
# 遍历所有进程,找到进程名为WeChat.exe的进程
for proc in psutil.process_iter(['pid', 'name']):
if proc.name() == 'WeChat.exe':
try:
# 获取窗口句柄对应的窗口名
win_name = psutil.Process(proc.pid).name()
if win_name == 'WeChat.exe':
return proc.pid, proc.name()
except psutil.NoSuchProcess:
continue
# 如果没有找到微信进程,返回None
return None, None
# 获取微信窗口
def get_wechat_window():
try:
# 通过微信托盘图标查找窗口
app = pywinauto.Application(backend="uia").connect(title_re=".*微信.*")
task_icon = app.taskbar.child_window(title_re="微信", control_type="Button")
task_icon.click_input()
except:
pass
# 等待微信窗口出现
for i in range(10):
try:
# 通过标题查找窗口(注意:微信窗口标题中包括多个空格)
window = pywinauto.Desktop(backend="uia").window(title_re="微信.*")
if window and window.exists():
return window
except:
pass
time.sleep(1)
return None
# 查找微信进程
pid, _ = get_wechat_process()
if pid is None:
# 启动微信客户端
WeChat_Path = "E:\\WeChat\\WeChat.exe"
try:
app = pywinauto.Application(backend='uia').start(WeChat_Path)
except Exception as e:
print(f"Unable to launch WeChat Error: {e}")
quit()
time.sleep(5)
# 获取微信窗口
wechat_window = get_wechat_window()
else:
try:
# 获取微信窗口
app = pywinauto.Application(backend="uia").connect(process=pid)
wechat_window = app.window(title="微信", control_type="Window")
except:
wechat_window = None
# 创建保存目录
result_folder = "搜索结果"
if not os.path.exists(result_folder):
os.makedirs(result_folder)
print("目录创建成功")
# 关键词列表
keywords = [
"关键词1",
"关键词2",
"关键词3"
]
# 遍历关键词并搜索结果
for keyword in keywords:
# 搜索操作
main_win = wechat_window
main_win.set_focus()
# 搜索框输入关键字
SendKeys('^f')
time.sleep(1)
search_box = None
for i in range(10):
try:
search_box = main_win.child_window(title="搜索", control_type="Edit")
if search_box:
search_box.set_focus()
SendKeys(keyword)
time.sleep(1)
search_box.wait('visible')
break
except:
pass
time.sleep(1)
if not search_box:
continue
# 等待收集下拉词完成并点击Enter
time.sleep(5)
search_box.type_keys('{ENTER}')
time.sleep(1)
# 收集关键词并保存到列表
search_results = None
for i in range(10):
try:
search_results = main_win.child_window(title="搜索结果", auto_id="4100", control_type="List")
if search_results:
break
except:
pass
time.sleep(1)
if not search_results:
continue
results = [item.window_text() for item in search_results.children()]
# 保存搜索结果到.docx文件
doc = Document()
for result in results:
doc.add_paragraph(result)
# 设置文件名并保存到指定目录
filename = f"{keyword}.docx"
full_path = os.path.join(result_folder, filename)
doc.save(full_path)
# 关闭搜索结果窗口
main_win.child_window(title="清除搜索结果", control_type="Button").click()
# 关闭微信客户端
if pid is None:
app.kill()
这是程序运行后出现的问题:
程序运行后成功打开了微信,也按照程序的要求实现了Ctrll+F打开搜一搜功能,但是却无法复制关键词列表的关键词进行下拉词收集