跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python

Python 桌面自动化操作实战:基于 pyautogui 与 win32com

介绍使用 Python 实现 Windows 桌面自动化的方案。主要依赖 pyautogui、pyperclip、pythoncom 和 win32com 库。核心流程包括获取窗口句柄并置顶、通过图像识别或相对坐标定位点击位置、以及处理界面响应等待。代码示例展示了如何初始化 COM 对象、模拟鼠标键盘操作及实现简单的 RPA 流程,适用于办公场景下的重复任务自动化。

指针猎手发布于 2025/2/7更新于 2026/9/1089 浏览
Python 桌面自动化操作实战:基于 pyautogui 与 win32com

Python 桌面自动化操作指南

本文分享一套基于 Python 语言的自动化操作流程解决方案,涉及 pyautogui、pyperclip、pythoncom、win32com 依赖包。安装命令如下:

pip install pyautogui
pip install pyperclip
pip install pythoncom
pip install pywin32

核心模块说明

  • pyautogui:自动化控制鼠标和键盘的 Python 模块。可执行移动光标、单击(左/右/中键)、截图、图像识别、获取鼠标位置等任务。
  • pyperclip:在不同应用程序之间复制和粘贴文本数据,适用于不支持 Ctrl+C/V 操作的界面。
  • pythoncom:允许 Python 程序与 COM 对象交互,实现创建、访问、调用(如访问 Microsoft Office 文档、操作 Windows 注册表)。
  • win32com:与 pythoncom 类似,但提供更高级的功能和更易用的接口。

自动化操作流程实现

自动化流程类似于 RPA 机器人,首先需人工记录关键点击节点或操作步骤并截图保存。基于截图进行图像比对和相对坐标计算,模拟鼠标点击或键盘输入。

1. 窗口置顶处理

在模拟操作过程中,需确保目标应用程序始终为置顶状态,避免弹窗覆盖。以下代码获取当前所有应用程序句柄并找到待操作对象的句柄 hwnd,将其置顶。

import win32gui
import pythoncom
import win32com.client
import time

hwnd_title = {}

def get_all_hwnd(hwnd, hwnd_list):
    if win32gui.IsWindowVisible(hwnd):
        title = win32gui.GetWindowText(hwnd)
        if title:
            hwnd_title[hwnd] = title
            hwnd_list.append(hwnd)

# 获取所有窗口句柄
hwnd_list = []
win32gui.EnumWindows(get_all_hwnd, hwnd_list)

for h, t in hwnd_title.items():
    print(f"[{h}] {t}")

def setFront(hwnd):
    pythoncom.CoInitialize()
    shell = win32com.client.Dispatch("WScript.Shell")
    # 使用 Alt+Tab 切换回前台(视具体场景调整)
    shell.SendKeys('%')
    win32gui.SetForegroundWindow(hwnd)
    time.sleep(0.2)
    pythoncom.CoUninitialize()

2. 定位与点击

进入应用程序界面后,通过图像识别或相对坐标定位待操作区域。

方法一:图像识别
import pyautogui

# im1 是应用程序界面截图,img 是待点击功能按钮截图
im1 = pyautogui.screenshot(region=(x, y, width, height))
# grayscale=True 开启灰度识别,confidence=0.7 为相似度阈值
loc = pyautogui.locate(img, im1, grayscale=True, confidence=0.7)

if loc:
    x, y = pyautogui.center(loc)
    setFront(hwnd)
    pyautogui.click(x, y)
方法二:相对坐标

获取当前程序的坐标及宽高,在此基础上进行偏移量计算。

rect = win32gui.GetWindowRect(hwnd)
x_offset = rect[0]
y_offset = rect[1]
w = rect[2] - x_offset
h = rect[3] - y_offset

setFront(hwnd)
# 点击相对偏移位置
pyautogui.click(x_offset + relative_x, y_offset + relative_y)

3. 等待响应

如果应用程序正在响应,固定等待时间可能导致意外。可通过检测图像是否出现来判断。

def waitOccur(img, region, n=30, confidence=0.7):
    """
    等待 img 出现在指定区域
    :param img: 目标截图
    :param region: 截图区域 (x, y, w, h)
    :param n: 最大等待次数
    :param confidence: 匹配置信度
    :return: True 若找到,否则 False
    """
    for i in range(n):
        m1 = pyautogui.screenshot(region=region)
        loc = pyautogui.locate(img, m1, grayscale=True, confidence=confidence)
        if loc is not None:
            return True
        time.sleep(1)
    return False

注意事项

  1. 窗口置顶:每次鼠标模拟点击前建议调用 setFront(hwnd),防止焦点丢失。
  2. 时间间隔:建议使用 time.sleep() 设置较大的点击间隔,避免因程序响应过慢导致失效。
  3. 环境依赖:确保已安装 pywin32 以支持 win32gui 和 win32com 模块。

目录

  1. Python 桌面自动化操作指南
  2. 核心模块说明
  3. 自动化操作流程实现
  4. 1. 窗口置顶处理
  5. 获取所有窗口句柄
  6. 2. 定位与点击
  7. 方法一:图像识别
  8. im1 是应用程序界面截图,img 是待点击功能按钮截图
  9. grayscale=True 开启灰度识别,confidence=0.7 为相似度阈值
  10. 方法二:相对坐标
  11. 点击相对偏移位置
  12. 3. 等待响应
  13. 注意事项

更多推荐文章

查看全部
  • Coze 智能体开发:插件、知识库与数据库实战指南
  • C++ 继承机制详解:栈实现、名称隐藏与默认成员函数
  • Java SPI 机制:从原理到实战
  • C++ string 模拟实现与底层细节深度解析
  • Docker Compose rm 命令详解与使用指南
  • IDEA Maven 运行时报错 Picked up JAVA_TOOL_OPTIONS 编码问题解决方法
  • Python 开源 AI 模型引入与测试全流程实战
  • 链表两两交换:Java 递归与迭代实现详解
  • 前端 PWA:构建类原生体验的 Web 应用
  • FPGA 是什么:现场可编程门阵列详解
  • .NET Core 中 GraphQL.Server 的基本使用
  • 无人机目标检测数据集介绍及 YOLOv8 训练实战
  • Python AI 入门:从线性回归到图像分类
  • Java ForkJoin 框架详解:分治法与并行编程
  • 二分查找算法详解:基础查找与边界定位
  • Webots R2023b 安装配置教程
  • 未来几年最紧缺的八大职业分析
  • Flutter 三方库 eth_sig_util 在鸿蒙端的适配指南
  • 基于 OpenClaw 架构构建 C++ 量化交易引擎 QuantClaw 实战
  • GitHub 最受欢迎的开源开发工具 Top5

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online