Python爬取微信搜一搜下拉词,程序无法完美运行,请各位朋友看看问题在哪!

想用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()

这是程序运行后出现的问题:

img

程序运行后成功打开了微信,也按照程序的要求实现了Ctrll+F打开搜一搜功能,但是却无法复制关键词列表的关键词进行下拉词收集

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇博客: python 请求分析及多提取器 提取数据中的 确认数据请求来源(Ctrl + F 搜索: 辛德勒) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    定位请求
    上图可知,该请求只有一个,所以就能轻松的确定来源拉!

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^