返回文章列表

PyAutoGUI 自動化視窗鍵盤控制

本文介紹 PyAutoGUI 函式庫,探討其在視窗和鍵盤控制方面的應用,包含取得視窗資訊、操控視窗、模擬鍵盤輸入、執行熱鍵組合等功能,並提供程式碼範例及圖表說明,最後提出 GUI 自動化設定技巧、日誌記錄及錯誤檢查方法,以及 PyAutoGUI 的一些常用函式。

Python 自動化

PyAutoGUI 是一個 Python 函式庫,能控制滑鼠和鍵盤,方便實作 GUI 自動化測試和任務。它可以取得視窗大小、位置等資訊,並能移動、最大化、最小化視窗。利用 pyautogui.getAllTitles() 可以取得所有可見視窗標題,pyautogui.getActiveWindow() 則能取得目前活躍視窗,並操作其屬性。PyAutoGUI 也能模擬鍵盤輸入,pyautogui.write() 輸入文字,pyautogui.press() 模擬按鍵,pyautogui.hotkey() 執行熱鍵組合。這些功能讓開發者能控制視窗和鍵盤,實作自動化操作。

控制視窗和鍵盤輸入

PyAutoGUI 是一個強大的 Python 函式庫,允許您控制視窗和鍵盤輸入。您可以使用它來自動化任務、測試應用程式,甚至建立自己的 GUI 自動化工具。

控制視窗

PyAutoGUI 提供了多種方法來控制視窗,包括取得視窗的大小和位置、移動視窗、最大化和最小化視窗等。您可以使用 pyautogui.getAllTitles() 函式來取得所有可見視窗的標題。

import pyautogui

# 取得所有可見視窗的標題
titles = pyautogui.getAllTitles()
print(titles)

您也可以使用 pyautogui.getActiveWindow() 函式來取得目前活躍的視窗,並使用其屬性來取得視窗的大小和位置。

import pyautogui

# 取得目前活躍的視窗
active_win = pyautogui.getActiveWindow()
print(active_win.width)  # 取得視窗的寬度
print(active_win.topleft)  # 取得視窗的左上角座標

您可以使用 pyautogui 函式來移動視窗、最大化和最小化視窗等。

import pyautogui

# 移動視窗到新的位置
active_win.topleft = (800, 400)

# 最大化視窗
active_win.maximize()

# 最小化視窗
active_win.minimize()

控制鍵盤輸入

PyAutoGUI 也提供了多種方法來控制鍵盤輸入,包括傳送虛擬鍵盤按鍵和輸入文字等。您可以使用 pyautogui.write() 函式來輸入文字。

import pyautogui

# 輸入文字
pyautogui.write("Hello, World!")

您也可以使用 pyautogui.press() 函式來傳送虛擬鍵盤按鍵。

import pyautogui

# 按下 Enter 鍵
pyautogui.press("enter")

圖表翻譯

圖表翻譯:

此圖表展示了 PyAutoGUI 的功能,包括取得所有可見視窗的標題、取得目前活躍的視窗、取得視窗的大小和位置、移動視窗、最大化和最小化視窗、傳送虛擬鍵盤按鍵和輸入文字等。每個步驟都與 PyAutoGUI 的函式相對應,展示瞭如何使用 PyAutoGUI 來控制視窗和鍵盤輸入。

使用 PyAutoGUI 實作自動化輸入

PyAutoGUI 是一種 Python 函式庫,允許您控制滑鼠和鍵盤,以實作自動化任務。以下是使用 PyAutoGUI 實作自動化輸入的範例。

安裝 PyAutoGUI

首先,您需要安裝 PyAutoGUI 函式庫。您可以使用 pip 安裝:

pip install pyautogui

基本使用

以下是使用 PyAutoGUI 實作自動化輸入的基本範例:

import pyautogui

# 移動滑鼠到 (100, 200) 位置並點選
pyautogui.click(100, 200)

# 輸入 "Hello, world!" 字串
pyautogui.write('Hello, world!')

這個範例會移動滑鼠到 (100, 200) 位置並點選,然後輸入 “Hello, world!” 字串。

新增暫停

您可以新增暫停時間到 write() 函式中,以控制輸入速度:

pyautogui.write('Hello, world!', 0.25)

這個範例會在輸入每個字元後暫停 0.25 秒。

指定鍵名

PyAutoGUI 提供了一系列鍵名,您可以使用它們來模擬按鍵。例如:

pyautogui.write(['a', 'b', 'left', 'left', 'X', 'Y'])

這個範例會輸入 “a”、“b”、向左箭頭鍵 (兩次)、“X” 和 “Y”。

鍵盤鍵字串

PyAutoGUI 提供了一系列鍵盤鍵字串,您可以使用它們來模擬按鍵。以下是部分鍵盤鍵字串:

鍵盤鍵字串意義
‘a’, ‘b’, ‘c’單個字元鍵
‘A’, ‘B’, ‘C’單個字元鍵 (大寫)
‘1’, ‘2’, ‘3’數字鍵
‘!’, ‘@’, ‘#’特殊字元鍵
’enter’ (或 ‘return’ 或 ‘\n’)ENTER 鍵
’esc’ESC 鍵

您可以使用 pyautogui.KEYBOARD_KEYS 列表來檢視所有可用的鍵盤鍵字串。

鍵盤按鍵對應表

在處理鍵盤事件時,瞭解不同按鍵的對應名稱是非常重要的。以下是鍵盤按鍵與其對應的字串表示法:

修改鍵

  • shiftleftshiftright:分別對應左側和右側的 Shift 鍵。
  • altleftaltright:分別對應左側和右側的 Alt 鍵。
  • ctrlleftctrlright:分別對應左側和右側的 Ctrl 鍵。

編輯鍵

  • tab(或 \t):對應 Tab 鍵。
  • backspacedelete:分別對應 Backspace 和 Delete 鍵。
  • pageuppagedown:分別對應 Page Up 和 Page Down 鍵。
  • homeend:分別對應 Home 和 End 鍵。

方向鍵

  • updownleftright:分別對應上、下、左、右箭頭鍵。

功能鍵

  • f1f2f3 等:分別對應 F1 到 F12 鍵。

音量控制鍵

  • volumemutevolumedownvolumeup:分別對應靜音、降低音量和提高音量的按鍵。注意,一些鍵盤可能沒有這些按鍵,但作業系統仍能夠識別並處理相關事件。

內容解密:

上述列表提供了鍵盤按鍵與其字串表示之間的對映關係。這在處理鍵盤事件時尤為重要,因為它允許開發者以標準化的方式識別和回應不同的按鍵操作。例如,在JavaScript中,當使用者按下某個按鍵時,可以透過事件物件的 key 屬性獲得該按鍵的字串表示,從而進行相應的處理。

圖表翻譯:

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title PyAutoGUI 自動化視窗鍵盤控制

package "資料視覺化流程" {
    package "資料準備" {
        component [資料載入] as load
        component [資料清洗] as clean
        component [資料轉換] as transform
    }

    package "圖表類型" {
        component [折線圖 Line] as line
        component [長條圖 Bar] as bar
        component [散佈圖 Scatter] as scatter
        component [熱力圖 Heatmap] as heatmap
    }

    package "美化輸出" {
        component [樣式設定] as style
        component [標籤註解] as label
        component [匯出儲存] as export
    }
}

load --> clean --> transform
transform --> line
transform --> bar
transform --> scatter
transform --> heatmap
line --> style --> export
bar --> label --> export

note right of scatter
  探索變數關係
  發現異常值
end note

@enduml

這個流程圖描述了從使用者按下按鍵到識別按鍵並執行相應動作的整個過程。透過這個過程,開發者可以根據不同的按鍵輸入實作各種功能。

使用 PyAutoGUI 處理鍵盤事件

PyAutoGUI 是一個 Python 函式庫,允許您控制滑鼠和鍵盤事件。以下是使用 PyAutoGUI 處理鍵盤事件的範例。

按壓和釋放鍵盤按鍵

PyAutoGUI 提供了 keyDown()keyUp() 函式來模擬按壓和釋放鍵盤按鍵。這些函式需要一個鍵盤按鍵字串作為引數。例如:

pyautogui.keyDown('shift')
pyautogui.press('4')
pyautogui.keyUp('shift')

這行程式碼會按住 Shift 鍵,按下 4 鍵,然後釋放 Shift 鍵。

執行熱鍵組合

熱鍵組合是指同時按下多個鍵盤按鍵來執行某個功能。PyAutoGUI 提供了 hotkey() 函式來模擬熱鍵組合。這個函式需要多個鍵盤按鍵字串作為引數。例如:

pyautogui.hotkey('ctrl', 'c')

這行程式碼會按住 Ctrl 鍵,按下 C 鍵,然後釋放 C 鍵和 Ctrl 鍵。

鍵盤按鍵字串

PyAutoGUI 支援多種鍵盤按鍵字串,包括:

  • pause: 暫停鍵
  • capslock: 大寫鎖定鍵
  • numlock: 數字鎖定鍵
  • scrolllock: 捲動鎖定鍵
  • insert: 插入鍵
  • printscreen: 印表機螢幕鍵
  • winleftwinright: 左和右 Windows 鍵(在 Windows 系統上)
  • command: 命令鍵(在 macOS 系統上)
  • option: 選項鍵(在 macOS 系統上)

範例程式碼

以下是使用 PyAutoGUI 處理鍵盤事件的範例程式碼:

import pyautogui

# 按壓和釋放 Shift 鍵
pyautogui.keyDown('shift')
pyautogui.press('4')
pyautogui.keyUp('shift')

# 執行熱鍵組合:Ctrl + C
pyautogui.hotkey('ctrl', 'c')

這個範例程式碼會按壓和釋放 Shift 鍵,然後執行熱鍵組合:Ctrl + C。

使用 PyAutoGUI 進行 GUI 自動化

PyAutoGUI 是一個 Python 函式庫,允許您控制滑鼠和鍵盤,以便自動化圖形使用者介面 (GUI) 的任務。以下是使用 PyAutoGUI 的一些技巧和方法。

熱鍵功能

PyAutoGUI 的 hotkey() 函式可以用來模擬熱鍵組合。例如,pyautogui.hotkey('ctrl', 'c') 可以複製目前的選取內容。

設定 GUI 自動化指令碼

要設定 GUI 自動化指令碼,您需要考慮以下幾點:

  • 使用相同的螢幕解析度,以確保視窗位置不變。
  • 將應用程式視窗最大化,以確保按鈕和選單 항상位於相同的位置。
  • 在等待內容載入時新增足夠的暫停,以避免指令碼在應用程式準備好之前開始點選。
  • 使用 locateOnScreen() 來找到要點選的按鈕和選單,而不是依賴座標。
  • 使用 getWindowsWithTitle() 來確保應用程式視窗存在,並使用 activate() 方法將視窗置於前景。

日誌記錄和錯誤檢查

您可以使用 logging 模組來記錄指令碼的執行過程,以便在指令碼中斷時可以從中斷點繼續執行。另外,新增足夠的錯誤檢查以確保指令碼在遇到意外情況時可以正確地處理。

PyAutoGUI 函式庫概覽

以下是 PyAutoGUI 中一些常用的函式:

  • sleep():暫停程式執行一段時間。
  • moveTo(x, y):將滑鼠遊標移動到指定的 x 和 y 座標。
  • move(xOffset, yOffset):將滑鼠遊標相對於目前位置移動。
  • dragTo(x, y):在按住滑鼠左鍵的情況下將滑鼠遊標移動到指定的 x 和 y 座標。
  • drag(xOffset, yOffset):在按住滑鼠左鍵的情況下將滑鼠遊標相對於目前位置移動。
  • click(x, y, button):模擬滑鼠點選,預設為左鍵。

範例程式碼

import pyautogui

# 暫停 3 秒
pyautogui.sleep(3)

# 移動滑鼠遊標到 (100, 200) 位置
pyautogui.moveTo(100, 200)

# 相對於目前位置移動滑鼠遊標 50 個單位
pyautogui.move(50, 0)

# 在按住滑鼠左鍵的情況下將滑鼠遊標移動到 (300, 400) 位置
pyautogui.dragTo(300, 400)

# 點選滑鼠左鍵
pyautogui.click()

這些範例展示瞭如何使用 PyAutoGUI 來控制滑鼠和鍵盤,以便自動化 GUI 任務。

PyAutoGUI程式設計:自動化您的桌面工作

PyAutoGUI是一個強大的Python函式庫,允許您自動化桌面工作,模擬滑鼠和鍵盤操作。這個函式庫提供了一系列功能,讓您可以控制滑鼠和鍵盤,從而實作自動化任務。

滑鼠操作

PyAutoGUI提供了多種滑鼠操作功能,包括:

  • rightClick(): 模擬右鍵點選
  • middleClick(): 模擬中鍵點選
  • doubleClick(): 模擬雙擊左鍵
  • mouseDown(x, y, button): 模擬按下滑鼠鍵在指定位置
  • mouseUp(x, y, button): 模擬釋放滑鼠鍵在指定位置
  • scroll(units): 模擬滑鼠滾輪操作

鍵盤操作

PyAutoGUI也提供了多種鍵盤操作功能,包括:

  • write(message): 輸入指定的字串
  • write([key1, key2, key3]): 輸入指定的鍵盤鍵
  • press(key): 按下指定的鍵盤鍵
  • keyDown(key): 模擬按下指定的鍵盤鍵
  • keyUp(key): 模擬釋放指定的鍵盤鍵
  • hotkey(key1, key2, key3): 模擬按下多個鍵盤鍵

圖片操作

PyAutoGUI還提供了圖片操作功能,包括:

  • screenshot(): 擷取螢幕截圖
  • getActiveWindow(): 取得目前活躍的視窗
  • getAllWindows(): 取得所有視窗
  • getWindowsAt(): 取得指定位置的視窗
  • getWindowsWithTitle(): 取得指定標題的視窗

訊息盒

PyAutoGUI提供了訊息盒功能,允許您顯示訊息給使用者並接收輸入。有四種訊息盒功能:

  • pyautogui.alert(text): 顯示訊息並傳回「OK」或「Cancel」
  • pyautogui.prompt(text): 顯示訊息並傳回使用者輸入的字串
  • pyautogui.password(text): 顯示訊息並傳回使用者輸入的密碼

PyAutoGUI練習題與程式設計

練習題

  1. 如何觸發PyAutoGUI的失敗安全機制來停止一個程式? 2.哪個函式傳回目前螢幕的解析度? 3.哪個函式傳回滑鼠遊標目前位置的座標? 4.pyautogui.moveTo()和pyautogui.move()之間的差異是什麼? 5.哪些函式可以用來拖動滑鼠? 6.哪個函式呼叫可以輸出"Hello, world!“的字元? 7.如何執行特殊鍵的按鍵,例如鍵盤的左箭頭鍵? 8.如何將目前螢幕的內容儲存為一張名為screenshot.png的圖片檔? 9.哪行程式碼可以在每個PyAutoGUI函式呼叫後設定2秒鐘的暫停? 10.如果你想要自動化瀏覽器內的點選和按鍵,應該使用PyAutoGUI還是Selenium? 11.什麼使得PyAutoGUI容易出錯? 12.如何找到所有螢幕上包含"Notepad"字串在其標題中的視窗大小? 13.如何使Firefox瀏覽器變成活躍並在所有其他視窗之前顯示?

練習程式

保持活躍

許多即時通訊程式會根據你是否已經10分鐘沒有動作來判斷你是否已經閒置或離開電腦。也許你離開電腦,但不想讓你的即時通訊狀態變成閒置模式,以免給人留下你在偷懶的印象。寫一個指令碼來輕微地移動滑鼠遊標,然後10秒鐘後再移動一次。這個移動應該足夠小巧,不會干擾你使用電腦。

讀取文字欄位內容

雖然你可以使用pyautogui.write()將按鍵輸入到應用程式的文字欄位,但你不能單獨使用PyAutoGUI來讀取文字欄位內的內容。這就是pyperclip模組可以幫助的地方。你可以使用PyAutoGUI來取得文字編輯器(如Mu或Notepad)的視窗,將它帶到螢幕前面,點選文字欄位,然後送出CTRL-A或-A熱鍵來選擇所有文字,然後送出CTRL-C或-C熱鍵來複製到剪貼簿。你的Python指令碼可以使用pyperclip.paste()來讀取剪貼簿上的文字。

寫一個程式來遵循這個程式,以複製視窗文字欄位的內容。使用pyautogui.getWindowsWithTitle(‘Notepad’)(或你選擇的文字編輯器)來取得Window物件。這個Window物件的top和left屬性可以告訴你視窗在哪裡,而activate()方法可以確保它在螢幕前面。然後,你可以使用pyautogui.click()點選文字編輯器的主要文字欄位,例如在top和left屬性值上方100或200畫素。呼叫pyautogui.hotkey(‘ctrl’, ‘a’)和pyautogui.hotkey(‘ctrl’, ‘c’)來選擇所有文字並複製到剪貼簿。最後,呼叫pyperclip.paste()來從剪貼簿上讀取文字,並將它印出到你的Python程式中。

注意:PyAutoGUI的視窗函式僅在Windows上工作(截至PyAutoGUI版本1.0.0),而不適用於macOS或Linux。

寫一個遊戲機器人

有一個老舊的Flash遊戲叫做Sushi Go Round。遊戲涉及點選正確的食材按鈕來填充顧客的壽司訂單。越快填充訂單而不犯錯誤,你就能得到越多分數。這是一個非常適合GUI自動化程式的任務——同時也是作弊以獲得高分數的一種方式!雖然Flash作為一種產品已經停止,但仍有關於如何在電腦上離線播放它的指示,以及一份主持Sushi Go Round遊戲的網站列表。

Python原始碼為遊戲機器人。展示機器人玩遊戲的影片。

從技術架構視角來看,PyAutoGUI 提供了簡潔易用的 API,讓 Python 開發者能輕鬆控制鍵盤滑鼠,實作 GUI 自動化。其核心功能涵蓋視窗控制、鍵盤輸入、螢幕截圖以及與作業系統的互動,有效降低了桌面應用程式自動化的門檻。分析其技術實作,PyAutoGUI 底層依賴作業系統提供的 API,因此跨平臺支援性良好,但同時也受限於各系統 API 的差異,部分功能在不同平臺上的表現可能存在細微差異。這也意味著,開發者在設計跨平臺自動化指令碼時,需要仔細考量平臺相容性問題,並針對不同平臺進行適當的調整。展望未來,GUI 自動化需求將持續增長,PyAutoGUI 可望持續發展,整合更多進階功能,例如更精確的圖形辨識、更智慧的流程控制,以及更強大的錯誤處理機制。對於追求效率的開發者而言,PyAutoGUI 值得深入學習並應用於日常工作流程中,以提升生產力。