《Python實戰進階》No24: PyAutoGUI 實現桌面自動化

No24: PyAutoGUI 實現桌面自動化


摘要

PyAutoGUI 是一個跨平臺的桌面自動化工具,能夠模擬鼠標點擊、鍵盤輸入、屏幕截圖與圖像識別,適用于重復性桌面任務(如表單填寫、游戲操作、批量文件處理)。本集通過代碼+截圖+輸出日志的實戰形式,帶你掌握從基礎操作到復雜任務的全流程自動化。


在這里插入圖片描述

核心概念與代碼實戰

1. 基礎操作:鼠標與鍵盤控制

安裝命令

pip install pyautogui  

鼠標控制

import pyautogui  
import time  # 移動鼠標到坐標 (500, 300)  
pyautogui.moveTo(500, 300, duration=1)  # 模擬點擊(左鍵單擊)  
pyautogui.click()  # 滾輪滾動(向上滾動 200 單位)  
pyautogui.scroll(200)  

鍵盤輸入

# 輸入文本  
pyautogui.write("Hello, PyAutoGUI!", interval=0.1)  # 組合鍵操作(Ctrl+C)  
pyautogui.hotkey("ctrl", "c")  

效果驗證

print(f"當前鼠標位置:{pyautogui.position()}")  # 輸出實時坐標  

2. 截屏與圖像識別

場景:通過屏幕上的圖標定位并點擊按鈕。

# 截取屏幕并保存  
screenshot = pyautogui.screenshot()  
screenshot.save("screenshot.png")  # 查找圖標位置(需提前保存圖標圖片)  
button_location = pyautogui.locateOnScreen("submit_button.png")  
if button_location:  # 計算圖標中心點并點擊  button_center = pyautogui.center(button_location)  pyautogui.click(button_center)  
else:  print("圖標未找到!")  

輸出示例

圖標位置:Box(left=200, top=150, width=50, height=30)  

3. 腳本調試與異常處理

問題場景:圖像識別失敗導致腳本崩潰。
解決方案

try:  # 設置超時時間為 5 秒  button_location = pyautogui.locateOnScreen(  "save_icon.png",  confidence=0.8,  # 允許 80% 相似度  grayscale=True   # 灰度匹配提升速度  )  if not button_location:  raise Exception("圖標匹配失敗!")  
except Exception as e:  print(f"錯誤:{e}")  # 回退到手動輸入坐標  pyautogui.click(100, 200)  

調試技巧

  • 使用 pyautogui.PAUSE = 1 控制操作間隔
  • 啟用 pyautogui.FAILSAFE = True(鼠標移至左上角強制停止腳本)

實戰案例

案例 1:自動化填寫表單

場景:批量填寫 Excel 表格中的數據到某個桌面應用。

import pyautogui  
import pandas as pd  # 讀取 Excel 數據  
data = pd.read_excel("data.xlsx")  for index, row in data.iterrows():  # 定位輸入框并填寫  pyautogui.click(300, 400)  # 姓名輸入框  pyautogui.write(row["姓名"])  pyautogui.press("tab")      # 跳轉到年齡輸入框  pyautogui.write(str(row["年齡"]))  # 提交表單  pyautogui.press("enter")  time.sleep(1)  # 等待頁面刷新  

輸出示例

已提交姓名:張三,年齡:25  
已提交姓名:李四,年齡:30  
案例 2:模擬游戲中的簡單操作

場景:自動玩“鍵盤反應速度”游戲。

# 監聽屏幕特定區域的變化  
game_region = (400, 200, 200, 100)  while True:  # 截取游戲區域  region_screenshot = pyautogui.screenshot(region=game_region)  # 檢測紅色方塊出現  if pyautogui.pixelMatchesColor(500, 250, (255, 0, 0)):  pyautogui.press("space")  # 按空格鍵得分  
案例 3:批量重命名文件

場景:將文件夾中的 100 張圖片按規則重命名。

import os  
import pyautogui  # 打開文件資源管理器  
os.system("explorer.exe .\\images")  
time.sleep(2)  # 依次重命名文件  
for i in range(1, 101):  pyautogui.hotkey("ctrl", "a")    # 全選文件  pyautogui.press("f2")            # 重命名  pyautogui.write(f"photo_{i:03d}")  # 格式化名稱(photo_001)  pyautogui.press("enter")  time.sleep(0.5)  

擴展思考

1. PyAutoGUI 與其他工具的結合
  • 與 Selenium 結合
    # 用 Selenium 處理網頁,PyAutoGUI 處理下載彈窗  
    driver.get("https://example.com/download")  
    pyautogui.press("enter")  # 自動確認下載對話框  
    
  • 打包為可執行文件
    pip install pyinstaller  
    pyinstaller --onefile your_script.py  
    
2. 安全性和法律合規性
  • 風險提示
    • 避免自動化操作金融交易、社交賬號等敏感場景
    • 部分軟件(如游戲)可能禁止自動化腳本
  • 合規建議
    • 僅用于個人效率提升或授權場景
    • 遵守《計算機軟件保護條例》和平臺規則

總結

通過本實戰,你已掌握:

  1. PyAutoGUI 的核心操作(鼠標、鍵盤、圖像識別)
  2. 復雜任務的異常處理與調試技巧
  3. 從表單填寫到游戲模擬的完整案例
  4. 自動化腳本的法律邊界與安全實踐

下集預告
《No25: Python 并發編程:從多線程到異步 IO》將帶你突破單線程性能瓶頸,實現高并發任務處理!


附:運行環境

  • 環境要求:Python 3.7+、Windows/macOS/Linux

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/72412.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72412.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72412.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一周學會Flask3 Python Web開發-SQLAlchemy查詢所有數據操作-班級模塊

鋒哥原創的Flask3 Python Web開發 Flask3視頻教程: 2025版 Flask3 Python web開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili 我們來新建一個的藍圖模塊-班級模塊,后面可以和學生模塊,實現一對多的數據庫操作。 blueprint下新建g…

Neural Architecture Search for Transformers:A Survey

摘要 基于 Transformer 的深度神經網絡架構因其在自然語言處理 (NLP) 和計算機視覺 (CV) 領域的各種應用中的有效性而引起了極大的興趣。這些模型是多種語言任務(例如情緒分析和文本摘要)的實際選擇,取代了長短期記憶 (LSTM) 模型。視覺 Tr…

TCP 全連接隊列 內核層理解socket

TCP 全連接隊列 理解 listen 的第二個參數 int listen(int sockfd, int backlog);backlog 參數表示 全連接隊列(accept 隊列)的最大長度。 那什么是全連接隊列呢? 三次握手 & accept() 處理流程 客戶端發送 SYN,服務器收到并…

程序化廣告行業(18/89):交易模式與關鍵概念解析

程序化廣告行業(18/89):交易模式與關鍵概念解析 大家好呀!一直以來,我都在深入研究程序化廣告這個充滿挑戰與機遇的領域,在學習過程中收獲了很多,也迫不及待想和大家分享。寫這篇博客&#xff…

在離線情況下如何使用 Python 翻譯文本

以下是在離線環境下使用Python進行文本翻譯的兩種主流方案,包含本地模型部署和輕量級詞典兩種方法: 方案一:使用本地神經網絡翻譯模型(推薦) # 安裝依賴(需提前下載) # pip install argos-tra…

OpenEuler-22.03-LTS上利用Ansible輕松部署MySQL 5.7

一、需求 使用ansible自動化部署mysql二進制部署mysql部署mysql并創建JDBC用戶 二、環境信息 本文涉及的代碼,配置文件地址: 鏈接:百度網盤 請輸入提取碼 提取碼:1g6y 軟件名稱版本備注Ansible2.9.27All modules — Ansible Doc…

基于javaweb的SpringBoot農資商城購物商城系統設計與實現(源碼+文檔+部署講解)

技術范圍:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容:免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論…

angular打地鼠

說明:我計劃用angular做一款打地鼠的小游戲, 打地鼠游戲實現文檔 🎮 游戲邏輯 ?游戲場景 采用 3x3 網格布局的 9 個地鼠洞?核心機制 地鼠隨機從洞口彈出點擊有效目標獲得積分30 秒倒計時游戲模式 ?難度系統 簡單模式:生成間…

博客網站(springboot)整合deepseek實現在線調用

🎉🎉🎉🎉🎉🎉 歡迎訪問的個人博客:https://swzbk.site/,加好友,拉你入福利群 🎉🎉🎉🎉🎉🎉 1、de…

Kubernetes 單節點集群搭建

Kubernetes 單節點集群搭建教程 本人嘗試基于Ubuntu搭建一個單節點K8S集群,其中遇到各種問題,最大的問題就是網絡,各種鏡像源下載不下來,特此記錄!注意:文中使用了幾個鏡像,將看來可能失效導致安…

【PTA題目解答】7-3 字符串的全排列(20分)next_permutation

1.題目 給定一個全由小寫字母構成的字符串,求它的全排列,按照字典序從小到大輸出。 輸入格式: 一行,一個字符串,長度不大于8。 輸出格式: 輸出所有全排列,每行一種排列形式,字典序從小到大。 輸入樣例…

專題三0~n-1中缺失的數字

1.題目 給一個數組,單調性是遞增的,需要找到缺失的數字,加上這個數字就變為等差數組了。 2.算法原理 這里用二分來解決,而二段性是根據下標區分,臨界值前的數字于下標相對應,臨界值后的于下標相差1&#x…

【圖像處理】ISP(Image Signal Processor) 圖像處理器的用途和工作原理?

ISP(圖像信號處理器)是數字影像設備的“視覺大腦”,負責將傳感器捕獲的原始電信號轉化為我們看到的高清圖像。以下從用途和工作原理兩方面通俗解析: 一、ISP的核心用途:讓照片“更像眼睛看到的” 提升畫質&#xff1a…

python學習筆記-mysql數據庫操作

現有一個需求,調用高德api獲取全國縣級以上行政區數據并保存為json文件,使用python獲取: import requests import json# 高德API Key api_key "your_api_key"# 調用行政區域查詢API def fetch_districts():url f"https://r…

Redisson 實現分布式鎖源碼淺析

大家好,我是此林。 今天來分享Redisson分布式鎖源碼。還是一樣,我們用 問題驅動 的方式展開講述。 1. redis 中如何使用 lua 腳本? Redis內置了lua解釋器,lua腳本有兩個好處: 1. 減少多次Redis命令的網絡傳輸開銷。…

【軟件】免費的PDF全文翻譯軟件,能保留公式圖表的樣式

轉載請注明出處:小鋒學長生活大爆炸[xfxuezhagn.cn] 如果本文幫助到了你,歡迎[點贊、收藏、關注]哦~ 很多PDF全文翻譯軟件都是收費的,而劃線翻譯看著又很累。這個開源的PDF全文翻譯軟件非常好用,并且能夠保留公式、圖表、目錄和注…

CentOS 7 系統上安裝 SQLite

1. 檢查系統更新 在安裝新軟件之前,建議先更新系統的軟件包列表,以確保使用的是最新的軟件源和補丁。打開終端,執行以下命令: sudo yum update -y -y 選項表示在更新過程中自動回答 “yes”,避免手動確認。 2. 安裝 …

Gin(后端)和 Vue3(前端)中實現 Server-Sent Events(SSE)推送

在 Gin(后端)和 Vue3(前端)中實現 Server-Sent Events(SSE)推送,主要分為以下幾個步驟: 后端(Gin)實現 SSE Gin 框架可以使用 c.SSEvent 方法來推送 SSE 事…

大模型微調中顯存占用和訓練時間的影響因素

BatchSize 顯存占用:與batch_size呈線性關系,可理解為 M t o t a l M f i x e d B a t c h S i z e ? M p e r ? s a m p l e M_{total}M_{fixed}BatchSize*M_{per-sample} Mtotal?Mfixed?BatchSize?Mper?sample?,其中 M f i x e d…

【排序算法對比】快速排序、歸并排序、堆排序

排序算法對比:快速排序、歸并排序、堆排序 1. 快速排序(Quick Sort) 原理 快速排序采用 分治法(Divide and Conquer),通過選取基準值(pivot),將數組劃分為 小于基準值…