蛮集 2023-06-12 22:46 采纳率: 0%
浏览 21

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打开搜一搜功能,但是却无法复制关键词列表的关键词进行下拉词收集

  • 写回答

1条回答 默认 最新

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

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

报告相同问题?

问题事件

  • 创建了问题 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 大家知道这个后备文件怎么删吗,为啥这些文件我只看到一份,没有后备呀