用Python写了个微信搜一搜下拉词收集程序,但是无法正常执行,请各位朋友看看是哪里出了问题!

想用Python写一个微信PC端搜一搜的下拉词收集程序,程序是写出来了可是无法完美执行,想请各位帮忙看看代码到底哪里出了问题,代码如下:


```python
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](https://img-mid.csdnimg.cn/release/static/image/mid/ask/549937185686144.png "#left")



代码执行后微信成功打开了,也成功执行了模拟键盘Ctrl+F打开搜一搜功能,但是无法执行复制关键词列表里的关键词进行下拉词收集!

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/354979185686111.png "#left")
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7589145
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:过去,哔哩哔哩上面的视频只能在手机上面下载;现在,我用Python爬虫实现了能在PC端上面下载
  • 同时,你还可以查看手册:python- 用于操作列表的工具 中的内容
  • 除此之外, 这篇博客: Python编写一个装饰器,使其能够打印输出所装饰函数的运算时间【简单易懂,代码可以直接运行】中的 Python编写一个装饰器,使其能够打印输出所装饰函数的运算时间【简单易懂,代码可以直接运行】 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    Python编写一个装饰器,使其能够打印输出所装饰函数的运算时间【简单易懂,代码可以直接运行】
    测试函数运行的时候,建议循环的数量级搞大一点,但不要搞得太大,不要小于10的6次方,但是不要大于10的8次方,10的6次方运算事件小于0.1,10的8次方运算时间大于7秒

    数量级为10的六次方结果如下:
    在这里插入图片描述
    数量级为10的8次方结果如下:
    在这里插入图片描述
    代码如下,点个👍吧,秋梨膏

    #装饰器计算所装饰函数的运行时间
    import time
    def time_val(dec):
        def time_inner(*args,**kwargs):
            start = time.time()
            get_str = dec(*args,**kwargs)
            end = time.time()
            print('函数总共耗时:',end - start)
            return get_str
        return time_inner
    
    @time_val
    def runTimes():
        i,sum = 0,0
        while(i < 1e6):
            sum += i
            i += 1
        return sum
    print(runTimes())
    

    点个👍吧,秋梨膏

  • 您还可以看一下 王进老师的跟着王进老师学开发Python篇:基础入门案例讲解课程中的 案例03:模拟电话答题小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    很抱歉,参考资料似乎和问题没有关联,无法提供 Python 代码和执行时的报错信息。同时,关于微信 PC 端搜一搜的操作流程也需要更具体的描述才能提供帮助。请提供更多具体信息,让我能够更准确地解答你的问题。感谢理解。


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