Python PyAutoGUI 使用教學

本篇 ShengYu 將介紹如何用 Python 搭配 PyAutoGUI 模組來模擬鍵盤、模擬滑鼠,Python 如何模擬鍵盤按下按鍵與模擬滑鼠移動滑鼠與點擊,將在以下教學內容解釋。

以下 Python PyAutoGUI 將分為這幾部分介紹,

  • Python PyAutoGUI 模擬鍵盤
  • Python PyAutoGUI 模擬滑鼠
  • Python PyAutoGUI 螢幕截圖
  • 其他
  • Python PyAutoGUI 常用 API 列表

那我們開始吧!

在執行 Python 如果遇到 ImportError: No module named ‘pyautogui’ 這錯誤訊息就是需要安裝 pyautogui,或參考這篇安裝吧!

1
pip install pyautogui

Python PyAutoGUI 模擬鍵盤

這邊介紹 Python PyAutoGUI 模擬鍵盤的按鍵、組合鍵的範例,
用 PyAutoGUI 模擬按下按鍵的話,例如按下 a 鍵跟 enter 鍵,

1
2
3
4
import pyautogui

pyautogui.press('a') # 按 a
pyautogui.press('enter') # 按 enter

用 PyAutoGUI 模擬按下組合鍵的話,以複製貼上為例,

1
2
3
4
5
6
7
import pyautogui

pyautogui.hotkey('ctrl', 'c') # 複製
pyautogui.hotkey('ctrl', 'v') # 貼上

pyautogui.hotkey('command', 'c') # macOS 複製
pyautogui.hotkey('command', 'v') # macOS 貼上

用 PyAutoGUI 模擬輸入 hello world 的話,用 pyautogui.typewrite() 或者 pyautogui.write() 都可以,

1
2
3
4
5
6
7
import pyautogui

pyautogui.typewrite('hello world')
pyautogui.typewrite('hello world', interval=0.5) # 每個字的按鍵間隔 0.5 秒

pyautogui.write('hello world')
pyautogui.write('hello world', interval=0.5) # 每個字的按鍵間隔 0.5 秒

不是所有的鍵都很容易用單個文字字元來表示。例如 Shift 鍵或左箭頭鍵,PyAutoGUI 要組合輸入這些特殊鍵的話可以這樣寫,

1
2
3
import pyautogui

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

常用的一些按鍵整理如下表:

用法 說明
press(‘a’) a
press(‘enter’) 回車鍵
press(‘esc’) Esc
press(‘space’) space 空白鍵
press(‘backspace’) 返回鍵
press(‘up’)
press(‘down’)
press(‘left’)
press(‘right’)
press(‘pgup’) Page Up
press(‘pgdn’) Page Down
press(‘playpause’) 播放/暫停
press(‘volumeup’) 大聲
press(‘volumedown’) 小聲
press(‘volumemute’) 靜音
press(‘printscreen’) Print Screen
press(‘ctrl’) Ctrl
press(‘shift’) Shift
press(‘alt’) Alt
press(‘option’) Option

更多按鍵資訊可參考
https://pyautogui.readthedocs.io/en/latest/keyboard.html

Python PyAutoGUI 模擬滑鼠

這邊介紹 Python PyAutoGUI 來模擬滑鼠的移動、拖曳、點擊。這邊需要解釋一下螢幕上的座標軸,這樣接下來才清楚滑鼠要往哪邊移動。

以下範例為 1920 x 1080 的螢幕解析度示意。

1
2
3
4
5
6
7
8
9
10
(0, 0)        X 增加 -->    (1919, 0)
+---------------------------+
| |
| | Y 增加
| 1920 x 1080 screen | |
| | |
| | V
| |
+---------------------------+
(0, 1079) (1919, 1079)

取得螢幕解析度

1
2
3
>>> import pyautogui
>>> width, height = pyautogui.size()
(1920, 1080)

取得滑鼠當前的座標位置

1
2
3
>>> import pyautogui
>>> pyautogui.position()
(300, 200)

移動滑鼠到絕對位置
語法:moveTo(width, height, duration)
移動到(300, 200)絕對位置

1
2
3
4
5
6
import pyautogui

pyautogui.moveTo(300, 200) # 移動到(300, 200)
pyautogui.moveTo(None, 400) # 移動到(300, 400)
pyautogui.moveTo(500, None) # 移動到(500, 200)
pyautogui.moveTo(300, 200, duration = 1.5) # 花1.5秒移動到(300, 200)

移動滑鼠到相對位置

語法:moeRel(width, height, duration)
移到相對位置,以當前滑鼠位置為基準點

1
2
3
4
5
6
7
import pyautogui

pyautogui.moveRel(0, 100) # 往下移 100
pyautogui.moveRel(-100, 0) # 往左移 100

pyautogui.moveRel(0, 100, duration=0.5) # 花1.5秒逐漸往下移 100
pyautogui.moveRel(-100, 0, duration=0.5) # 花1.5秒逐漸往左移 100

滑鼠拖曳

1
2
3
4
5
import pyautogui

pyautogui.dragTo(100, 200, button='left') # drag mouse to (100, 200) while holding down left mouse button
pyautogui.dragTo(300, 400, 2, button='left') # drag mouse to (300, 400) over 2 seconds while holding down left mouse button
pyautogui.drag(30, 0, 2, button='right') # drag the mouse left 30 pixels over 2 seconds while holding down the right mouse button

滑鼠點擊
語法:click(width, height, button)

1
2
3
4
5
6
7
import pyautogui

button = 'left', 'middle', 'right'

pyautogui.click() #在當前位置點擊(預設左鍵)
pyautogui.click(width, height) #在(width, height)點擊滑鼠(預設左鍵)
pyautogui.click(width, height, button='left') #點擊滑鼠左鍵

更多滑鼠資訊可參考 https://pyautogui.readthedocs.io/en/latest/mouse.html

Python PyAutoGUI 螢幕截圖

這邊介紹 PyAutoGUI 螢幕快照截圖功能,除此之外,PyAutoGUI 還可以比對圖片找出圖片在螢幕的那個位置,在搭配滑鼠或鍵盤的模擬操作,進行一連串的自動化操作。
要將目前的螢幕畫面擷取下來,可以使用 PyAutoGUI 的 screenshot(),

1
2
3
4
import pyautogui

image1 = pyautogui.screenshot() # 擷取螢幕畫面
image2 = pyautogui.screenshot('screenshot.png') # 擷取螢幕畫面,同時儲存檔案

其他

暫停幾秒鐘

1
2
3
import pyautogui

pyautogui.PAUSE = 1.5

Fail-Safes (預設false)
當滑鼠一道螢幕左上角時,觸發 pyautogui 的FailSafeException 異常

1
2
3
4
import pyautogui

pyautogui.FAILSAFE = True # enables the fail-safe
pyautogui.FAILSAFE = False # disables the fail-safe

詳情請看https://pyautogui.readthedocs.io/en/latest/introduction.html#fail-safes

Python PyAutoGUI 常用 API 列表

這邊列出 Python PyAutoGUI 常用 API 列表,方便快速查詢使用,

moveTo(x, y):將滑鼠移動到指定的 x、y 坐標。
moveRel(xOffset, yOffset):相對於當前位置移動滑鼠。
dragTo(x, y):按下左鍵並移動滑鼠。
dragRel(xOffset, yOffset):按下左鍵,相對於當前位置移動滑鼠。
click(x, y, button):模擬點擊(預設是左鍵)。
rightClick():模擬右鍵點擊。
doubleClick():模擬左鍵雙擊。
middleClick():模擬中鍵點擊。
mouseDown(x, y, button):模擬在 x、y 處按下指定滑鼠按鍵。
mouseUp(x, y, button):模擬在 x、y 處釋放指定滑鼠按鍵。
scroll(units):模擬滾動滾輪。正參數表示向上滾動,負參數表示向下滾動。
typewrite(message):逐一輸入給定的字串。
typewrite([key1, key2, key3]):輸入給定鍵字串。
press(key):按下並釋放給定鍵。
keyDown(key):模擬按下給定鍵。
keyUp(key):模擬釋放給定鍵。
hotkey([key1, key2, key3]):模擬按順序按下給定鍵字串,然後以相反的順序釋放。
screenshot():回傳螢幕快照的 Image。
screenshot('screenshot.png'):螢幕快照並存檔且回傳螢幕快照的 Image。

另外 pyautogui 還有 Message BoxScreenshot 改天再研究吧!
對 Python 自動化有興趣可以參考《Python 自動化的樂趣》這本書中的自動化專題實作章節。

參考
PyAutoGUI : 使用Python控制電腦 - Yanwei Liu - Medium
https://medium.com/@yanweiliu/662cc3b18b80
Python学习笔记——用GUI自动化控制键盘和鼠标 - 简书
https://www.jianshu.com/p/41463c82ec8f

其它相關文章推薦
Python 安裝 PyAutoGUI 模組