基于Python+PyAutoGUI实现的Windows自动化办公脚本

 更新时间:2026年05月13日 08:33:52   作者:yuanpan  
在日常办公场景中,很多重复动作并不复杂,却非常消耗时间,本文面向 Python 自动化办公方向学习者,重点演示在 Windows 上如何用 pyautogui 完成鼠标移动与点击、键盘输入、屏幕截图、自动打开记事本输入文字,以及自动化重复操作,需要的朋友可以参考下

引言

在日常办公场景中,很多重复动作并不复杂,却非常消耗时间:打开软件、输入固定内容、截图留存、重复点击、批量录入、定时执行某个流程。Python 的 pyautogui 库可以模拟鼠标、键盘和屏幕操作,让我们用脚本完成这些机械性任务。

本文面向 Python 自动化办公方向学习者,重点演示在 Windows 上如何用 pyautogui 完成鼠标移动与点击、键盘输入、屏幕截图、自动打开记事本输入文字,以及自动化重复操作。

说明:本文示例适合学习和个人办公辅助。正式用于企业流程前,应先在测试环境验证,避免误操作真实业务系统。

1. pyautogui 库介绍

pyautogui 是一个跨平台 GUI 自动化库,可以让 Python 控制鼠标、键盘和屏幕。它常用于:

  • 自动点击按钮、菜单、输入框
  • 自动输入文字和快捷键
  • 获取鼠标当前位置
  • 对屏幕进行截图
  • 按固定流程重复执行操作
  • 辅助 Excel、浏览器、记事本、ERP、后台系统等桌面软件操作

安装方式:

pip install pyautogui

如果后续需要做图像识别式点击,还可以配合安装:

pip install pillow opencv-python

导入方式:

import pyautogui

常用安全配置:

import pyautogui

# 每个 pyautogui 操作后暂停 0.2 秒,降低误操作风险
pyautogui.PAUSE = 0.2

# 启用故障保护:鼠标快速移动到屏幕左上角会抛出异常并停止脚本
pyautogui.FAILSAFE = True

FAILSAFE 非常重要。自动化脚本一旦点击错位置,可能连续执行很多错误动作。保留这个开关,可以让你在紧急情况下把鼠标移到屏幕左上角中止程序。

2. 鼠标移动与点击

2.1 获取屏幕尺寸

import pyautogui

width, height = pyautogui.size()
print(f"屏幕宽度:{width}, 屏幕高度:{height}")

2.2 获取当前鼠标位置

import pyautogui
import time

print("请在 3 秒内把鼠标移动到目标位置...")
time.sleep(3)

x, y = pyautogui.position()
print(f"当前鼠标坐标:({x}, {y})")

这段代码非常适合用来定位按钮、输入框、菜单等界面元素坐标。

2.3 移动鼠标

import pyautogui

# 将鼠标移动到屏幕坐标 (500, 300),移动过程持续 0.5 秒
pyautogui.moveTo(500, 300, duration=0.5)

2.4 点击鼠标

import pyautogui

# 左键单击
pyautogui.click(500, 300)

# 双击
pyautogui.doubleClick(500, 300)

# 右键单击
pyautogui.rightClick(500, 300)

2.5 拖拽鼠标

import pyautogui

# 从当前位置拖拽到 (800, 500)
pyautogui.dragTo(800, 500, duration=1, button="left")

如果你要自动化操作一个固定布局的软件,最简单的方式就是先记录关键坐标,再用 moveTo()click() 组合执行。

3. 键盘输入

3.1 输入英文和数字

import pyautogui

pyautogui.write("Hello PyAutoGUI", interval=0.05)

interval 表示每个字符之间的输入间隔。适当放慢速度可以提高稳定性。

3.2 按单个按键

import pyautogui

pyautogui.press("enter")
pyautogui.press("tab")
pyautogui.press("esc")

3.3 快捷键组合

import pyautogui

# Ctrl + S 保存
pyautogui.hotkey("ctrl", "s")

# Ctrl + A 全选
pyautogui.hotkey("ctrl", "a")

# Alt + F4 关闭当前窗口
pyautogui.hotkey("alt", "f4")

3.4 中文输入的注意点

pyautogui.write() 更适合输入英文、数字和符号。中文输入可能受输入法状态影响,稳定性不如英文。

在 Windows 自动化办公中,输入中文建议使用剪贴板方式:

import pyautogui
import pyperclip

text = "这是一段由 Python 自动输入的中文内容。"
pyperclip.copy(text)
pyautogui.hotkey("ctrl", "v")

需要安装:

pip install pyperclip

剪贴板粘贴方式通常比逐字模拟键盘更稳定,尤其适合输入大段文本。

4. 屏幕截图

4.1 截取全屏

import pyautogui

img = pyautogui.screenshot()
img.save("screen.png")

4.2 截取指定区域

import pyautogui

# region 参数格式:(left, top, width, height)
img = pyautogui.screenshot(region=(100, 100, 600, 400))
img.save("region.png")

截图在办公自动化里很常见,例如:

  • 运行前后留痕
  • 自动保存系统页面状态
  • 判断界面是否进入目标页面
  • 结合图像识别寻找按钮位置

5. 自动打开记事本输入文字

下面演示一个完整的小流程:打开 Windows 记事本,输入一段文字,并保存截图。

import subprocess
import time
import pyautogui
import pyperclip

pyautogui.PAUSE = 0.2
pyautogui.FAILSAFE = True

# 打开记事本
subprocess.Popen("notepad.exe")
time.sleep(1)

# 使用剪贴板输入中文,更稳定
content = """Windows 自动化办公脚本测试

这是 Python + PyAutoGUI 自动输入的内容。
它可以模拟鼠标、键盘,并完成截图等办公自动化任务。
"""

pyperclip.copy(content)
pyautogui.hotkey("ctrl", "v")

# 截图留存
img = pyautogui.screenshot()
img.save("notepad_result.png")

运行后,脚本会自动打开记事本,将文本粘贴进去,并在当前目录保存一张截图。

6. 自动化重复操作

办公自动化里最常见的价值来自“重复操作自动化”。例如重复点击按钮、重复输入多条数据、重复打开多个文件。

6.1 重复点击

import pyautogui
import time

pyautogui.PAUSE = 0.3

for i in range(5):
    pyautogui.click(500, 300)
    print(f"第 {i + 1} 次点击完成")
    time.sleep(1)

6.2 批量输入多行数据

import pyautogui
import pyperclip
import time

rows = [
    "张三  研发部  Python",
    "李四  财务部  Excel",
    "王五  行政部  Word",
]

time.sleep(3)  # 给用户留出切换到目标输入框的时间

for row in rows:
    pyperclip.copy(row)
    pyautogui.hotkey("ctrl", "v")
    pyautogui.press("enter")
    time.sleep(0.5)

6.3 用函数封装重复动作

import pyautogui
import pyperclip
import time

def paste_line(text: str) -> None:
    pyperclip.copy(text)
    pyautogui.hotkey("ctrl", "v")
    pyautogui.press("enter")
    time.sleep(0.3)

items = ["任务 A", "任务 B", "任务 C"]

time.sleep(3)
for item in items:
    paste_line(item)

封装函数后,脚本会更清晰,也方便以后扩展。

7. 风险与安全说明

pyautogui 的本质是模拟真实用户操作,因此它的风险也和人工误操作类似,但速度更快、影响可能更大。

使用前建议遵守以下原则:

  • 先在测试窗口、测试账号、测试数据中运行。
  • 不要一上来操作生产系统、财务系统、真实订单或真实客户数据。
  • 保持 pyautogui.FAILSAFE = True,必要时把鼠标移到屏幕左上角中止脚本。
  • 给关键步骤增加 time.sleep(),不要让脚本过快执行。
  • 对高风险操作增加人工确认,例如删除、提交、付款、批量修改。
  • 使用截图留痕,便于排查问题。
  • 不要把账号密码硬编码在脚本中。
  • 自动化脚本运行时不要随意移动鼠标或切换窗口。
  • 如果界面位置会变化,尽量不要只依赖固定坐标,可以结合窗口标题、图像识别或更稳定的应用 API。

一个实用建议是:先让脚本只打印计划执行的动作,不真正点击;确认流程无误后,再打开点击逻辑。

8. 完整实战代码:自动打开记事本、输入内容、保存截图、重复追加日志

下面是一份完整示例代码,综合使用了:

  • pyautogui 鼠标与键盘操作
  • pyperclip 粘贴中文
  • subprocess 打开记事本
  • screenshot() 截图
  • 循环执行重复操作
  • 安全暂停与故障保护

保存为 pyautogui_notepad_office_demo.py 后运行。

import subprocess
import time
from datetime import datetime
from pathlib import Path

import pyautogui
import pyperclip


pyautogui.PAUSE = 0.25
pyautogui.FAILSAFE = True


def wait(seconds: float, message: str = "") -> None:
    """等待一段时间,并在控制台输出提示。"""
    if message:
        print(message)
    time.sleep(seconds)


def paste_text(text: str) -> None:
    """通过剪贴板粘贴文本,适合中文和长文本。"""
    pyperclip.copy(text)
    pyautogui.hotkey("ctrl", "v")


def open_notepad() -> None:
    """打开 Windows 记事本。"""
    subprocess.Popen("notepad.exe")
    wait(1.5, "正在打开记事本...")


def write_report_header() -> None:
    """写入报告头部内容。"""
    content = f"""Windows 自动化办公脚本运行记录
生成时间:{datetime.now().strftime("%Y-%m-%d %H:%M:%S")}

本文件由 Python + PyAutoGUI 自动生成。
脚本演示内容:
1. 自动打开记事本
2. 自动输入中文内容
3. 自动执行重复输入
4. 自动保存屏幕截图

运行日志:
"""
    paste_text(content)


def append_log_lines(count: int = 5) -> None:
    """重复追加多行日志。"""
    for index in range(1, count + 1):
        line = f"{index}. 自动化办公任务第 {index} 步已完成。"
        paste_text(line)
        pyautogui.press("enter")
        wait(0.4)


def save_screenshot(output_dir: Path) -> Path:
    """保存当前屏幕截图。"""
    output_dir.mkdir(parents=True, exist_ok=True)
    filename = datetime.now().strftime("pyautogui_notepad_%Y%m%d_%H%M%S.png")
    screenshot_path = output_dir / filename
    img = pyautogui.screenshot()
    img.save(screenshot_path)
    return screenshot_path


def main() -> None:
    print("脚本将在 3 秒后开始运行。")
    print("如果需要紧急停止,请把鼠标移动到屏幕左上角。")
    wait(3)

    open_notepad()
    write_report_header()
    append_log_lines(count=5)

    screenshot_path = save_screenshot(Path("screenshots"))
    print(f"截图已保存:{screenshot_path.resolve()}")
    print("自动化演示完成。")


if __name__ == "__main__":
    main()

运行前安装依赖:

pip install pyautogui pyperclip pillow

运行:

python pyautogui_notepad_office_demo.py

运行效果:

  1. 控制台提示 3 秒后开始。
  2. 自动打开 Windows 记事本。
  3. 自动粘贴中文运行记录。
  4. 自动重复追加 5 行日志。
  5. 自动保存屏幕截图到 screenshots 目录。

9. 进阶方向

掌握基础操作后,可以继续学习以下方向:

  • 使用 locateOnScreen() 根据图片定位按钮。
  • 结合 Excel 文件批量读取待录入数据。
  • 结合 schedule 做定时自动化任务。
  • 结合日志模块记录每一步操作结果。
  • 结合异常处理,失败时自动截图。
  • 对网页系统优先考虑 Playwright、Selenium 等浏览器自动化工具。
  • 对 Excel、Word、PDF 等文件优先考虑专用库,例如 openpyxlpython-docxpypdf

pyautogui 的优势是简单、直观、可以控制几乎所有桌面软件;缺点是依赖屏幕状态和窗口位置,稳定性不如直接调用 API。因此在实际办公自动化中,可以把它作为“最后一公里”的桌面操作工具,与文件处理库、浏览器自动化库、数据库脚本组合使用。

总结

本文演示了 Python + pyautogui 在 Windows 自动化办公中的基础用法,包括库介绍、鼠标移动与点击、键盘输入、屏幕截图、自动打开记事本输入文字、自动化重复操作,以及风险与安全说明。

对于初学者来说,建议从低风险场景开始练习,例如自动打开记事本、自动输入文本、自动截图。等熟悉坐标、快捷键、等待时间和异常处理后,再逐步应用到真实办公流程中。

自动化办公的核心不是“让脚本点得更快”,而是把重复、固定、可验证的流程交给程序完成,让人把精力放在判断、沟通和决策上。

以上就是基于Python+PyAutoGUI实现的Windows自动化办公脚本的详细内容,更多关于Python Windows自动化办公的资料请关注脚本之家其它相关文章!

相关文章

  • 归纳整理Python中的控制流语句的知识点

    归纳整理Python中的控制流语句的知识点

    这篇文章主要归纳整理了Python中的控制流语句的知识点,来自于IBM官方网站技术文档,需要的朋友可以参考下
    2015-04-04
  • 在Django的View中使用asyncio的方法

    在Django的View中使用asyncio的方法

    这篇文章主要介绍了在Django的View中使用asyncio的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Python 3.x 安装opencv+opencv_contrib的操作方法

    Python 3.x 安装opencv+opencv_contrib的操作方法

    下面小编就为大家分享一篇Python 3.x 安装opencv+opencv_contrib的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • python单元测试框架unittest基本用法案例

    python单元测试框架unittest基本用法案例

    unittest库unittest库是python的内置库,用来对程序进行测试,下面这篇文章主要给大家介绍了关于python中单元测试框架unittest基本用法的相关资料,需要的朋友可以参考下
    2022-09-09
  • python绘制多个子图的实例

    python绘制多个子图的实例

    今天小编就为大家分享一篇python绘制多个子图的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python按键或值对字典进行排序

    Python按键或值对字典进行排序

    这篇文章主要为大家介绍了Python对字典进行排序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • 浅谈python numpy中nonzero()的用法

    浅谈python numpy中nonzero()的用法

    下面小编就为大家分享一篇浅谈python numpy中nonzero()的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • python Event事件、进程池与线程池、协程解析

    python Event事件、进程池与线程池、协程解析

    这篇文章主要介绍了python Event事件、进程池与线程池、协程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Python time模块时间获取和转换方法

    Python time模块时间获取和转换方法

    这篇文章主要介绍了Python time模块时间获取和转换,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • 在Pandas中将DataFrame列转换为日期时间的详细步骤

    在Pandas中将DataFrame列转换为日期时间的详细步骤

    你是否曾经遇到过这样的问题:从 CSV 文件或数据库中导入的数据中,日期列被识别为字符串类型,导致无法进行时间序列分析或计算?今天,我们将深入探讨如何在 Pandas 中将 DataFrame 列转换为日期时间,并提供一些实用的技巧和最佳实践,需要的朋友可以参考下
    2025-05-05

最新评论