Python PyAutoGUI

2023-11-16

筆記自動化與爬蟲工具系列之 PyAutoGUI Library,如何利用自動化與爬蟲技術提高工作效率。

logo

說明

pip install pyautogui

座標管理

因為在設計 PyAutoGUI 的過程中會使用到大量的座標點,建議使用以下方式管理與存取。

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])

coords = {
    'start': Point(115, 350),
    'button': Point(900, 350),
    'end': Point(1702, 337)
}

pyautogui.moveTo(*coords['start'])

游標操作

pyautogui.size()
# 取得螢幕解析度
# Size(width=2560, height=1440)
pyautogui.moveTo(x, y)
# 游標移動到特定座標

pyautogui.moveTo(x, y, duration = 2, tween=pyautogui.easeInOutQuad)
# 加入游標移動的過程

pyautogui.move(x_offset, y_offset)
# 將游標向 x 軸與 y軸相對進行移動量
pyautogui.click()
# 游標點擊

pyautogui.click(x, y)
# 游標點擊特定座標
pyautogui.dragTo(x, y, duration=1)
# 從目標的游標拖曳到特定座標

pyautogui.drag(x_offset, y_offset, duration=1)
# 從目標的游標拖曳相對 x 與 y 的移動量
pyautogui.displayMousePosition()
# 動態取得目前游標所在的座標以及 Pixel RGB
pyautogui.scroll(500)
pyautogui.scroll(-500)
# 滑鼠滾輪操作

輸入內容

pyautogui.typewrite("text")
# 輸入指定的內容

pyautogui.hotkey("ctrl", "v")
# 貼上記憶體中的內容

pyautogui.write('Hello World!', interval=0.25)
# 輸入內容並控制輸入間隔
pyautogui.keyDown('shift')
pyautogui.press('2')
pyautogui.keyUp('shift')

# 持續按壓 Shift,模擬輸入 @ 的過程

偵測畫面

pyautogui.screenshot("screenshot.png")
# 截圖並儲存

pyautogui.locateOnScreen("image.png")
# 尋找特定圖片是否存在於螢幕畫面中,並回傳座標
window = pyautogui.getWindowsWithTitle('Notepad')[0]
window.maximize()

Failsafe

pyautogui.FAILSAFE = True

為了在自動化過程有狀況,啟用 FAILSAFE 可以讓使用者將游標移動到 (0, 0) 或者是輸入 Ctrl + Alt + Delete 時,停止自動化。

搭配的 Library

經常與 PyAutoGUI 搭配的 Library:

import pyperclip
pyperclip.copy('text keep in clip')
# 將資料儲存在 clip

pyautogui.typewrite(pyperclip.paste())
# 從 clip 輸入到介面

pyautogui.hotkey("ctrl", "v")
# 從 clip 貼上到介面
import time

threshold = 600

start_time = time.time()
end_time = time.time()

if end_time - start_time > threshold:
  print(f'已經執行超過 {threshold} 秒')