基于Python+PyAutoGUI實現(xiàn)的Windows自動化辦公腳本
引言
在日常辦公場景中,很多重復(fù)動作并不復(fù)雜,卻非常消耗時間:打開軟件、輸入固定內(nèi)容、截圖留存、重復(fù)點擊、批量錄入、定時執(zhí)行某個流程。Python 的 pyautogui 庫可以模擬鼠標(biāo)、鍵盤和屏幕操作,讓我們用腳本完成這些機(jī)械性任務(wù)。
本文面向 Python 自動化辦公方向?qū)W習(xí)者,重點演示在 Windows 上如何用 pyautogui 完成鼠標(biāo)移動與點擊、鍵盤輸入、屏幕截圖、自動打開記事本輸入文字,以及自動化重復(fù)操作。
說明:本文示例適合學(xué)習(xí)和個人辦公輔助。正式用于企業(yè)流程前,應(yīng)先在測試環(huán)境驗證,避免誤操作真實業(yè)務(wù)系統(tǒng)。
1. pyautogui 庫介紹
pyautogui 是一個跨平臺 GUI 自動化庫,可以讓 Python 控制鼠標(biāo)、鍵盤和屏幕。它常用于:
- 自動點擊按鈕、菜單、輸入框
- 自動輸入文字和快捷鍵
- 獲取鼠標(biāo)當(dāng)前位置
- 對屏幕進(jìn)行截圖
- 按固定流程重復(fù)執(zhí)行操作
- 輔助 Excel、瀏覽器、記事本、ERP、后臺系統(tǒng)等桌面軟件操作
安裝方式:
pip install pyautogui
如果后續(xù)需要做圖像識別式點擊,還可以配合安裝:
pip install pillow opencv-python
導(dǎo)入方式:
import pyautogui
常用安全配置:
import pyautogui # 每個 pyautogui 操作后暫停 0.2 秒,降低誤操作風(fēng)險 pyautogui.PAUSE = 0.2 # 啟用故障保護(hù):鼠標(biāo)快速移動到屏幕左上角會拋出異常并停止腳本 pyautogui.FAILSAFE = True
FAILSAFE 非常重要。自動化腳本一旦點擊錯位置,可能連續(xù)執(zhí)行很多錯誤動作。保留這個開關(guān),可以讓你在緊急情況下把鼠標(biāo)移到屏幕左上角中止程序。
2. 鼠標(biāo)移動與點擊
2.1 獲取屏幕尺寸
import pyautogui
width, height = pyautogui.size()
print(f"屏幕寬度:{width}, 屏幕高度:{height}")
2.2 獲取當(dāng)前鼠標(biāo)位置
import pyautogui
import time
print("請在 3 秒內(nèi)把鼠標(biāo)移動到目標(biāo)位置...")
time.sleep(3)
x, y = pyautogui.position()
print(f"當(dāng)前鼠標(biāo)坐標(biāo):({x}, {y})")
這段代碼非常適合用來定位按鈕、輸入框、菜單等界面元素坐標(biāo)。
2.3 移動鼠標(biāo)
import pyautogui # 將鼠標(biāo)移動到屏幕坐標(biāo) (500, 300),移動過程持續(xù) 0.5 秒 pyautogui.moveTo(500, 300, duration=0.5)
2.4 點擊鼠標(biāo)
import pyautogui # 左鍵單擊 pyautogui.click(500, 300) # 雙擊 pyautogui.doubleClick(500, 300) # 右鍵單擊 pyautogui.rightClick(500, 300)
2.5 拖拽鼠標(biāo)
import pyautogui # 從當(dāng)前位置拖拽到 (800, 500) pyautogui.dragTo(800, 500, duration=1, button="left")
如果你要自動化操作一個固定布局的軟件,最簡單的方式就是先記錄關(guān)鍵坐標(biāo),再用 moveTo() 和 click() 組合執(zhí)行。
3. 鍵盤輸入
3.1 輸入英文和數(shù)字
import pyautogui
pyautogui.write("Hello PyAutoGUI", interval=0.05)
interval 表示每個字符之間的輸入間隔。適當(dāng)放慢速度可以提高穩(wěn)定性。
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 關(guān)閉當(dāng)前窗口
pyautogui.hotkey("alt", "f4")
3.4 中文輸入的注意點
pyautogui.write() 更適合輸入英文、數(shù)字和符號。中文輸入可能受輸入法狀態(tài)影響,穩(wěn)定性不如英文。
在 Windows 自動化辦公中,輸入中文建議使用剪貼板方式:
import pyautogui
import pyperclip
text = "這是一段由 Python 自動輸入的中文內(nèi)容。"
pyperclip.copy(text)
pyautogui.hotkey("ctrl", "v")
需要安裝:
pip install pyperclip
剪貼板粘貼方式通常比逐字模擬鍵盤更穩(wěn)定,尤其適合輸入大段文本。
4. 屏幕截圖
4.1 截取全屏
import pyautogui
img = pyautogui.screenshot()
img.save("screen.png")
4.2 截取指定區(qū)域
import pyautogui
# region 參數(shù)格式:(left, top, width, height)
img = pyautogui.screenshot(region=(100, 100, 600, 400))
img.save("region.png")
截圖在辦公自動化里很常見,例如:
- 運行前后留痕
- 自動保存系統(tǒng)頁面狀態(tài)
- 判斷界面是否進(jìn)入目標(biāo)頁面
- 結(jié)合圖像識別尋找按鈕位置
5. 自動打開記事本輸入文字
下面演示一個完整的小流程:打開 Windows 記事本,輸入一段文字,并保存截圖。
import subprocess
import time
import pyautogui
import pyperclip
pyautogui.PAUSE = 0.2
pyautogui.FAILSAFE = True
# 打開記事本
subprocess.Popen("notepad.exe")
time.sleep(1)
# 使用剪貼板輸入中文,更穩(wěn)定
content = """Windows 自動化辦公腳本測試
這是 Python + PyAutoGUI 自動輸入的內(nèi)容。
它可以模擬鼠標(biāo)、鍵盤,并完成截圖等辦公自動化任務(wù)。
"""
pyperclip.copy(content)
pyautogui.hotkey("ctrl", "v")
# 截圖留存
img = pyautogui.screenshot()
img.save("notepad_result.png")
運行后,腳本會自動打開記事本,將文本粘貼進(jìn)去,并在當(dāng)前目錄保存一張截圖。
6. 自動化重復(fù)操作
辦公自動化里最常見的價值來自“重復(fù)操作自動化”。例如重復(fù)點擊按鈕、重復(fù)輸入多條數(shù)據(jù)、重復(fù)打開多個文件。
6.1 重復(fù)點擊
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 批量輸入多行數(shù)據(jù)
import pyautogui
import pyperclip
import time
rows = [
"張三 研發(fā)部 Python",
"李四 財務(wù)部 Excel",
"王五 行政部 Word",
]
time.sleep(3) # 給用戶留出切換到目標(biāo)輸入框的時間
for row in rows:
pyperclip.copy(row)
pyautogui.hotkey("ctrl", "v")
pyautogui.press("enter")
time.sleep(0.5)
6.3 用函數(shù)封裝重復(fù)動作
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 = ["任務(wù) A", "任務(wù) B", "任務(wù) C"]
time.sleep(3)
for item in items:
paste_line(item)
封裝函數(shù)后,腳本會更清晰,也方便以后擴(kuò)展。
7. 風(fēng)險與安全說明
pyautogui 的本質(zhì)是模擬真實用戶操作,因此它的風(fēng)險也和人工誤操作類似,但速度更快、影響可能更大。
使用前建議遵守以下原則:
- 先在測試窗口、測試賬號、測試數(shù)據(jù)中運行。
- 不要一上來操作生產(chǎn)系統(tǒng)、財務(wù)系統(tǒng)、真實訂單或真實客戶數(shù)據(jù)。
- 保持
pyautogui.FAILSAFE = True,必要時把鼠標(biāo)移到屏幕左上角中止腳本。 - 給關(guān)鍵步驟增加
time.sleep(),不要讓腳本過快執(zhí)行。 - 對高風(fēng)險操作增加人工確認(rèn),例如刪除、提交、付款、批量修改。
- 使用截圖留痕,便于排查問題。
- 不要把賬號密碼硬編碼在腳本中。
- 自動化腳本運行時不要隨意移動鼠標(biāo)或切換窗口。
- 如果界面位置會變化,盡量不要只依賴固定坐標(biāo),可以結(jié)合窗口標(biāo)題、圖像識別或更穩(wěn)定的應(yīng)用 API。
一個實用建議是:先讓腳本只打印計劃執(zhí)行的動作,不真正點擊;確認(rèn)流程無誤后,再打開點擊邏輯。
8. 完整實戰(zhàn)代碼:自動打開記事本、輸入內(nèi)容、保存截圖、重復(fù)追加日志
下面是一份完整示例代碼,綜合使用了:
pyautogui鼠標(biāo)與鍵盤操作pyperclip粘貼中文subprocess打開記事本screenshot()截圖- 循環(huán)執(zhí)行重復(fù)操作
- 安全暫停與故障保護(hù)
保存為 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:
"""寫入報告頭部內(nèi)容。"""
content = f"""Windows 自動化辦公腳本運行記錄
生成時間:{datetime.now().strftime("%Y-%m-%d %H:%M:%S")}
本文件由 Python + PyAutoGUI 自動生成。
腳本演示內(nèi)容:
1. 自動打開記事本
2. 自動輸入中文內(nèi)容
3. 自動執(zhí)行重復(fù)輸入
4. 自動保存屏幕截圖
運行日志:
"""
paste_text(content)
def append_log_lines(count: int = 5) -> None:
"""重復(fù)追加多行日志。"""
for index in range(1, count + 1):
line = f"{index}. 自動化辦公任務(wù)第 {index} 步已完成。"
paste_text(line)
pyautogui.press("enter")
wait(0.4)
def save_screenshot(output_dir: Path) -> Path:
"""保存當(dāng)前屏幕截圖。"""
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("如果需要緊急停止,請把鼠標(biāo)移動到屏幕左上角。")
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
運行效果:
- 控制臺提示 3 秒后開始。
- 自動打開 Windows 記事本。
- 自動粘貼中文運行記錄。
- 自動重復(fù)追加 5 行日志。
- 自動保存屏幕截圖到
screenshots目錄。
9. 進(jìn)階方向
掌握基礎(chǔ)操作后,可以繼續(xù)學(xué)習(xí)以下方向:
- 使用
locateOnScreen()根據(jù)圖片定位按鈕。 - 結(jié)合 Excel 文件批量讀取待錄入數(shù)據(jù)。
- 結(jié)合
schedule做定時自動化任務(wù)。 - 結(jié)合日志模塊記錄每一步操作結(jié)果。
- 結(jié)合異常處理,失敗時自動截圖。
- 對網(wǎng)頁系統(tǒng)優(yōu)先考慮 Playwright、Selenium 等瀏覽器自動化工具。
- 對 Excel、Word、PDF 等文件優(yōu)先考慮專用庫,例如
openpyxl、python-docx、pypdf。
pyautogui 的優(yōu)勢是簡單、直觀、可以控制幾乎所有桌面軟件;缺點是依賴屏幕狀態(tài)和窗口位置,穩(wěn)定性不如直接調(diào)用 API。因此在實際辦公自動化中,可以把它作為“最后一公里”的桌面操作工具,與文件處理庫、瀏覽器自動化庫、數(shù)據(jù)庫腳本組合使用。
總結(jié)
本文演示了 Python + pyautogui 在 Windows 自動化辦公中的基礎(chǔ)用法,包括庫介紹、鼠標(biāo)移動與點擊、鍵盤輸入、屏幕截圖、自動打開記事本輸入文字、自動化重復(fù)操作,以及風(fēng)險與安全說明。
對于初學(xué)者來說,建議從低風(fēng)險場景開始練習(xí),例如自動打開記事本、自動輸入文本、自動截圖。等熟悉坐標(biāo)、快捷鍵、等待時間和異常處理后,再逐步應(yīng)用到真實辦公流程中。
自動化辦公的核心不是“讓腳本點得更快”,而是把重復(fù)、固定、可驗證的流程交給程序完成,讓人把精力放在判斷、溝通和決策上。
以上就是基于Python+PyAutoGUI實現(xiàn)的Windows自動化辦公腳本的詳細(xì)內(nèi)容,更多關(guān)于Python Windows自動化辦公的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python安裝和pycharm環(huán)境搭建設(shè)置方法
這篇文章主要介紹了python安裝和pycharm環(huán)境搭建和設(shè)置方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下 ,2020-05-05
python實現(xiàn)微信接口(itchat)詳細(xì)介紹
這篇文章主要介紹了python實現(xiàn)微信接口(itchat)詳細(xì)介紹,小編覺得挺不錯的,這里分享給大家,供需要的朋友參考。2017-10-10
Python Matplotlib繪圖基礎(chǔ)知識代碼解析
這篇文章主要介紹了Python Matplotlib繪圖基礎(chǔ)知識代碼解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08
將Emacs打造成強(qiáng)大的Python代碼編輯工具
這篇文章主要介紹了將Emacs打造成強(qiáng)大的Python代碼編輯工具的方法,人們常說Vim是編輯器之神而Emacs是神的編輯器:)需要的朋友可以參考下2015-11-11
Python 多線程并行執(zhí)行的實現(xiàn)示例
本文主要介紹了Python 多線程并行執(zhí)行的實現(xiàn)示例,通過使用threading和concurrent.futures模塊可以進(jìn)行實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-07-07

