蛮集 2023-06-12 23:02 采纳率: 0%
浏览 20

用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")
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-06-13 08:22
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: 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 端搜一搜的操作流程也需要更具体的描述才能提供帮助。请提供更多具体信息,让我能够更准确地解答你的问题。感谢理解。


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

报告相同问题?

问题事件

  • 创建了问题 6月12日

悬赏问题

  • ¥15 悬赏Python-playwright部署在centos7上
  • ¥15 psoc creator软件有没有人能远程安装啊
  • ¥15 快速扫描算法求解Eikonal方程咨询
  • ¥20 我的是道格手机,重置后屏幕右上角出现红色字的未写入tee key 和未写入google key请问怎么去掉啊
  • ¥30 关于R语言运行分区生存模型中的问题!
  • ¥15 校内二手商品转让网站
  • ¥20 高德地图聚合图层MarkerCluster聚合多个点,但是ClusterData只有其中部分数据,原因应该是有经纬度重合的地方点,现在我想让ClusterData显示所有点的信息,如何实现?
  • ¥100 求Web版SPC控制图程序包调式
  • ¥20 指导如何跑通以下两个Github代码
  • ¥15 大家知道这个后备文件怎么删吗,为啥这些文件我只看到一份,没有后备呀