使用 Python 自動化滑鼠操作!PyAutoGUI 完整指南【影像辨識・點擊・日文輸入對應】

目次

1. 引言(使用Python自動化滑鼠操作的優點・應用實例)

電腦上日常重複進行的作業大多是透過滑鼠操作與鍵盤輸入的組合來完成的。特別是需要多次重複相同步驟的情況下,人手操作難免會變得麻煩,或容易發生錯誤。因此,備受矚目的是「使用Python進行滑鼠操作的自動化」。 Python是一種從程式設計初學者到工程師廣泛使用的語言,但事實上,只需撰寫簡單的程式碼,就能自動化滑鼠游標的移動、點擊、拖曳,甚至利用影像辨識的自動操作等多樣化的滑鼠操作。這能大幅提升業務效率並減少作業錯誤,這是最大的魅力。 例如,在以下類似的情境中,使用Python的滑鼠自動化能發揮巨大力量。
  • 定型資料輸入,或多次點擊相同位置的簡單作業自動化
  • 網頁或應用程式的定期檢查,或擷取螢幕截圖
  • 遊戲內的周回或重刷等,固定模式的重複操作
  • 業務軟體的批次處理,或作為RPA(機器人流程自動化)的一部分活用
實際上,使用Python進行滑鼠操作自動化時,透過使用如「PyAutoGUI」等專用函式庫,任何人皆能輕鬆建立屬於自己的自動化工具。透過活用此類機制,能劇烈提升日常作業的效率,或縮短作業時間,因此不僅在商業場景中,在興趣或副業上也能廣泛派上用場。 本文將從Python滑鼠操作自動化的基礎到應用,仔細說明實踐方法。無論是首次挑戰自動化的讀者,還是追求更高階應用的讀者,請務必閱讀至最後。

2. 前提知識與準備

為了使用Python自動化滑鼠操作,需要一些基礎知識和事前準備。本章將說明必要的環境、程式庫,以及最初應進行的設定。 首先,前提是電腦上已安裝Python本體。Python可在Windows、Mac、Linux等環境中使用,但本文主要以一般的Windows環境為中心說明。Mac或Linux也能以幾乎相同的步驟自動化滑鼠操作。 接下來需要的是,能輕鬆自動化滑鼠操作的「PyAutoGUI」程式庫。PyAutoGUI具備從滑鼠移動、點擊、拖拉操作、滾動,到取得畫面座標或透過影像辨識進行自動點擊等廣泛功能。此外,對於日文自動輸入,通常會一併使用「pyperclip」這個剪貼簿操作的程式庫。 這些程式庫可以使用Python的套件管理工具「pip」輕鬆安裝。請開啟命令提示字元或終端機,依序輸入以下指令。
pip install pyautogui
pip install pyperclip pillow
pyautogui是滑鼠操作的本體,pyperclip是日文輸入的輔助,pillow是為了支援影像處理而必要。安裝完成後,請執行下列簡單腳本,確認程式庫是否正確運作。
import pyautogui
print(pyautogui.position())
執行此程式碼後,會顯示目前滑鼠游標的座標。如果正常顯示,即表示環境建置完成。 使用Python和PyAutoGUI,就能以程式自動化麻煩的滑鼠操作。從下一章開始,將說明實際自在操作滑鼠的基本技巧。

3. 使用 Python 進行滑鼠操作的基礎

使用 Python 和 PyAutoGUI,就可以隨心所欲地自動化滑鼠的動作。本章將詳細說明日常中常用到的基本滑鼠操作,並穿插實用範例。

3-1. 滑鼠游標的移動方法

要將滑鼠游標移動到畫面上的指定位置,請使用pyautogui.moveTo()函數。例如,要將游標移動到畫面左上方的座標(100, 200),請如下所述。
import pyautogui
pyautogui.moveTo(100, 200)
此外,透過使用duration引數,還可以讓移動看起來更平滑。以下是花費 2 秒移動游標的範例。
pyautogui.moveTo(500, 300, duration=2)
另外,如果想從目前位置相對地移動,請使用moveRel()(或move())。
pyautogui.moveRel(50, 0)  # 向右移動 50px

3-2. 點擊操作(單擊/雙擊/右鍵點擊)

要在指定的座標進行滑鼠點擊,請使用pyautogui.click()。以下是在座標 (400, 400) 進行一次左鍵點擊的範例。
pyautogui.click(400, 400)
如果要進行雙擊或右鍵點擊,請使用click()的引數或專用的函數。
pyautogui.doubleClick(400, 400)      # 雙擊
pyautogui.rightClick(400, 400)       # 右鍵點擊
pyautogui.click(400, 400, button='right')  # 右鍵點擊(指定引數也可)
pyautogui.click(400, 400, clicks=3, interval=0.5)  # 連續點擊 3 次(間隔 0.5 秒)

3-3. 拖曳&放下操作

檔案移動或範圍選取等操作中非常方便的,就是拖曳&放下的自動化。使用dragTo()dragRel(),就可以一邊按住游標一邊移動到目的地。
# 從 (300, 300) 拖曳到 (600, 600),花費 2 秒
pyautogui.moveTo(300, 300)
pyautogui.dragTo(600, 600, duration=2)
或者,如果想從目前位置相對地拖曳,請使用dragRel()
pyautogui.dragRel(100, 0, duration=1)  # 從目前位置向右拖曳 100px

3-4. 使用滑鼠滾輪進行滾動

如果想自動滾動網頁或 Excel 工作表,請使用pyautogui.scroll()。正值表示向上方向,負值表示向下方向。
pyautogui.scroll(500)   # 向上滾動 500px
pyautogui.scroll(-300)  # 向下滾動 300px
透過組合這些基本操作,從日常的簡單作業到複雜動作,都可以實現廣泛的自動化。下一章將說明「座標取得」或「影像辨識自動點擊」等,更實務的技巧。

4. 座標取得・影像辨識的自動點擊

自動化滑鼠操作時,「點擊哪裡」「將滑鼠移動到哪裡」等座標指定非常重要。此外,自動偵測螢幕上的特定影像或按鈕並點擊的「影像辨識」也是實務中常用到的技巧。本章將說明其具體方法與訣竅。

4-1. 螢幕座標的取得方法

製作自動化腳本時,需要調查想點擊的位置或拖拉的起始點等「座標」。 PyAutoGUI 有個名為 pyautogui.position() 的函數,可取得目前滑鼠游標的位置。 執行以下腳本,將滑鼠移動到想知道的位置後按 Enter 鍵,即可輕鬆取得座標。
import pyautogui
input("將滑鼠游標移動到想取得座標的位置,按 Enter 鍵:")
print(pyautogui.position())
如此取得的座標,可用於滑鼠移動或點擊的自動化。 此外,若想「目視取得座標並多次調整」時,反覆執行並確認座標會更有效率。PyAutoGUI 也附有顯示滑鼠目前位置的「滑鼠座標顯示工具」。
pyautogui.displayMousePosition()
在終端機執行此指令,即會開啟一個即時顯示游標位置的視窗。

4-2. 使用影像匹配(影像辨識)特定點擊位置

若想點擊的按鈕或圖示座標每次都不同,或應用程式畫面會動態變化時,使用「影像辨識」的自動化就很有效。利用 PyAutoGUI 的 locateOnScreen()click() 函數,即可在螢幕上搜尋與指定影像一致的部分,並自動點擊。 首先,準備想點擊的按鈕或圖示的螢幕截圖影像(例如:button.png)。之後,使用類似以下的程式碼即可執行影像辨識點擊。
import pyautogui

# 在螢幕上搜尋與 button.png 一致的位置,並點擊其中央
location = pyautogui.locateCenterOnScreen('button.png', confidence=0.8)
if location is not None:
    pyautogui.click(location)
else:
    print("找不到影像。")
confidence 參數是用來調整影像匹配的嚴格度,將其設定為 0.8~0.9 左右可提高辨識率(此功能需要 pillow)。影像辨識的訣竅・注意事項
  • 螢幕截圖影像盡可能與實際顯示的解析度或大小相符
  • 因作業系統或螢幕放大率的差異可能無法匹配
  • 按鈕顏色或設計變更時難以辨識
失敗時,請試著重新擷取影像或調整 confidence 值。 如此,透過區分使用座標指定與影像辨識的技巧,即可在各種情境中實現靈活且穩定的滑鼠自動化。下一章將說明結合滑鼠操作與鍵盤自動輸入的應用技巧。
侍エンジニア塾

5. 與鍵盤自動輸入的聯動技巧

除了滑鼠操作的自動化之外,如果也能自動化鍵盤輸入,作業的範圍就會大幅擴大。例如,表單輸入或檔案名稱的指定、複製貼上操作等,將滑鼠與鍵盤結合的一連串動作,也能用 Python 輕鬆自動化。本章將介紹使用 PyAutoGUI 的鍵盤操作基礎,以及對應日文輸入的實踐技巧。

5-1. 文字輸入與特殊鍵操作

PyAutoGUI 擁有用來自動化鍵盤輸入的write()press()hotkey() 等函式。
import pyautogui

pyautogui.write('Hello, world!')          # 英數字的輸入
pyautogui.press('enter')                  # 按下 Enter 鍵
pyautogui.hotkey('ctrl', 'a')             # 傳送 Ctrl + A(全選)
pyautogui.hotkey('ctrl', 'c')             # Ctrl + C(複製)
pyautogui.hotkey('ctrl', 'v')             # Ctrl + V(貼上)
像這樣,能自動化英數字或符號、快捷鍵等各種輸入操作。

5-2. 自動化日文輸入的訣竅

PyAutoGUI 的write() 雖然對英數字很強,但並未對應日文輸入。因此,如果想自動輸入日文的情況下,使用pyperclip 程式庫將字串先複製到剪貼簿,再以「貼上(Ctrl+V)」來應對,這是標準做法。
import pyautogui
import pyperclip
import time

text = "你好,Python 自動化!"
pyperclip.copy(text)                           # 將字串複製到剪貼簿
pyautogui.hotkey('ctrl', 'v')                 # 以 Ctrl + V 貼上
time.sleep(0.2)                               # 為了保險起見稍等片刻
pyautogui.press('enter')                      # 以 Enter 鍵確定
這種方法,就能正確自動輸入漢字、平假名、片假名等。

5-3. 滑鼠與鍵盤的聯動範例

用滑鼠點擊特定位置後自動輸入文字,或將日文貼到輸入欄等,透過結合多個動作,就能進一步提升業務自動化的效率。 例如,能製作像下面這樣簡單的自動輸入腳本。
import pyautogui
import pyperclip
import time

# 點擊輸入欄
pyautogui.click(500, 350)

# 貼上日文並按 Enter
pyperclip.copy("測試訊息")
pyautogui.hotkey('ctrl', 'v')
time.sleep(0.2)
pyautogui.press('enter')
像這樣,透過結合滑鼠操作與鍵盤輸入,就能應對更高階的自動化或多樣化的作業。下一章將介紹使用這些技術的實踐範例程式碼。

6. 常用實踐範例程式碼集

這裡介紹幾個實際可用的滑鼠操作自動化範例。這些範例都採用簡單的結構,您可以在自己的環境中立即試用。請根據您的工作內容或想法進行自訂。

6-1. 指定座標自動點擊的腳本

如果您想定期點擊特定位置,以下這種腳本會很有幫助。
import pyautogui
 import time

 # 10 次、間隔 2 秒點擊座標 (400, 500)
 for i in range(10):
     pyautogui.click(400, 500)
     time.sleep(2)

6-2. 使用影像辨識尋找並點擊按鈕

要尋找畫面上顯示的特定按鈕或圖示並點擊,可以利用影像辨識。
import pyautogui
 import time

 for i in range(5):
     location = pyautogui.locateCenterOnScreen('button.png', confidence=0.8)
     if location is not None:
         pyautogui.click(location)
         print("已點擊按鈕")
     else:
         print("找不到按鈕")
     time.sleep(1)
button.png請準備要點擊按鈕的螢幕截圖影像。

6-3. 切換多個視窗並自動操作

如果想切換多個應用程式或視窗並進行自動操作,也可以自動化 Alt+Tab 或視窗焦點。
import pyautogui
 import time

 # 使用 Alt + Tab 切換視窗,並點擊
 pyautogui.hotkey('alt', 'tab')
 time.sleep(0.5)
 pyautogui.click(300, 300)

6-4. 滑鼠操作+鍵盤操作的聯動

這是點擊後自動化鍵盤輸入或貼上的範例。
import pyautogui
 import pyperclip
 import time

 # 點擊輸入欄,並貼上自動化測試訊息
 pyautogui.click(600, 400)
 pyperclip.copy("自動化測試訊息")
 pyautogui.hotkey('ctrl', 'v')
 time.sleep(0.2)
 pyautogui.press('enter')
透過應用這些範例程式碼,不僅能提升例行工作或簡單重複作業的效率,還能激發意想不到的新自動化點子。下一章將進一步說明進階應用技巧及疑難排解。

7. 應用技巧・故障排除

Python 的滑鼠自動化非常方便,但實際運作時,可能會遇到意外的故障或「無法正常運作…」的情形。本節將彙整更實用的使用方法、容易卡住的要點,以及故障時的應對方式。

7-1. 點擊無效時的檢查清單

自動點擊無法正常運作時,請確認以下要點。
  • 視窗的前置化 操作目標的視窗或應用程式若未顯示在「最前面」,可能無法如預期般點擊。pyautoguihotkey() 等功能,使用 Alt+Tab 將視窗前置的技巧也很有效。
  • 座標偏移・畫面解析度的差異 開發環境與實際運作環境的畫面解析度或縮放設定若不同,指定的座標可能會偏移。統一環境,或結合影像辨識來提升座標指定的彈性是重點。
  • 影像辨識無法運作 按鈕或圖示影像的解析度或色調僅稍有不同,就可能無法辨識。請重新擷取影像,或調整 confidence 值後再試。

7-2. 迴圈處理・固定間隔的自動點擊

重複點擊或計時器般的動作,可以結合 Python 的 whilefor 迴圈,以及 time.sleep() 來輕鬆自動化。 長時間執行的情況下,設計成途中可停止會更安心。
import pyautogui
 import time

 try:
     while True:
         pyautogui.click(400, 500)
         time.sleep(60)  # 每分點擊一次
 except KeyboardInterrupt:
     print("手動停止了")

7-3. 自動化執行中的安全措施(PAUSE 和 FAILSAFE)

自動化腳本可能會發生意外的誤動作或失控,因此加入「隨時可手動強制停止」的機制會更安心。
  • pyautogui.PAUSE 所有 pyautogui 函式執行後,自動插入等待時間的設定。與人類操作的兼顧或動作穩定化也很有效。
  import pyautogui
  pyautogui.PAUSE = 0.5  # 所有動作之間等待 0.5 秒
  • pyautogui.FAILSAFE 將滑鼠移動到畫面左上角,即可強制停止腳本(預設為啟用)。
  import pyautogui
  pyautogui.FAILSAFE = True  # 啟用安全裝置(預設)

7-4. 各 OS(Windows/Mac/Linux)的差異・注意事項

PyAutoGUI 雖然支援多平台,但各 OS 的動作會有細微差異。
  • 快捷鍵(例如 Ctrl 和 Cmd 的差異)需注意
  • 影像辨識的精度或視窗管理的規格可能因 OS 而異
  • 特定功能或按鍵輸入可能僅在某些 OS 上支援
首次在 PC 或環境上運作時,請務必充分測試後再進行正式運作。 本章介紹的技巧與故障排除,若事先了解,就能更穩定且安全地活用滑鼠自動化腳本。 接下來,將介紹 GUI 工具化、批次化、exe 化等進階的使用方式。

8. 向 GUI 工具、批次化、exe 化的發展

如果您已經習慣使用 Python 和 PyAutoGUI 來自動化滑鼠操作,為了進一步提升實用性,也可以考慮將操作「可視化」或轉換成易於散布的形式。本章將說明 GUI(圖形使用者介面)工具化、批次處理化、exe 化(執行檔化)等進階的活用方法。

8-1. GUI 工具化(PySimpleGUI 的活用)

對於不熟悉命令列執行的使用者,或是想與其他成員分享工具的情況,使用按鈕或輸入欄就能直覺操作的 GUI 工具化會很方便。 Python 的「PySimpleGUI」等程式庫,就能輕鬆製作簡單的 GUI 應用程式。
import PySimpleGUI as sg
 import pyautogui
 import time

 layout = [
     [sg.Text('點擊座標 (X, Y):')],
     [sg.InputText('400', key='X'), sg.InputText('500', key='Y')],
     [sg.Button('點擊開始'), sg.Button('結束')]
 ]

 window = sg.Window('滑鼠自動點擊工具', layout)

 while True:
     event, values = window.read()
     if event in (None, '結束'):
         break
     if event == '點擊開始':
         x = int(values['X'])
         y = int(values['Y'])
         pyautogui.click(x, y)
         sg.popup('已點擊')
 window.close()
使用這樣的 GUI,就能讓座標輸入和執行變得更易懂。

8-2. 批次處理化・多個動作的一括執行

如果想註冊多種自動化作業內容並一括處理,可以從批次檔案(.bat)或殼腳本(.sh)呼叫 Python 腳本來管理。 例如,在 Windows 中建立「.bat」檔案,並如以下描述。
@echo off
 python my_mouse_script.py
 pause
這樣就能透過雙擊來執行自動化腳本。

8-3. exe 化(使用 PyInstaller 製作散布用執行檔)

如果想在未安裝 Python 的 PC 上使用自動化工具,可以將腳本轉換成 exe 檔案(Windows 執行檔)來散布。「PyInstaller」這個工具是最常見的做法。 首先安裝 PyInstaller。
pip install pyinstaller
接著,在命令提示字元中執行以下指令。
pyinstaller --onefile my_mouse_script.py
生成的「dist」資料夾中會有 exe 檔案。散布這個檔案,就能讓未安裝 Python 的環境也能使用工具。 如此一來,透過活用 GUI 化和 exe 化,不僅自己,周圍的人也能以易用的形式使用滑鼠自動化工具。

9. 總結・今後的發展

本文在這裡,從基礎到應用,廣泛說明了使用Python進行滑鼠操作自動化的內容,甚至包括工具化和exe化。 PyAutoGUI為中心的滑鼠自動化,不僅能提升日常例行工作的效率,還能減少人為錯誤,根據想法可以應用在各種業務或興趣,是強大的手段。 特別是,以下這些要點很重要。
  • 重複作業或簡單操作的自動化所帶來的「時間縮短」與「品質提升」
  • 與影像辨識或鍵盤輸入自動化的組合,帶來多樣的活用
  • 意識到故障時的對策・安全設計,從而能穩定運作
  • GUI化或exe化等,容易與周圍分享的形式的發展性
Python的自動化,從小小的想法或問題解決開始,熟練使用後,能開啟更高階的自動化或「自製RPA工具」開發的道路。例如,加入OCR(從影像辨識文字)或API聯動,就能實現更複雜的工作流程自動化。 最後,透過滑鼠自動化的實踐所獲得的知識和經驗,一定會在其他程式設計領域或業務改善中派上用場。作為日常業務或興趣自動化・效率化的一步,請務必參考本文內容來挑戰看看。

10. FAQ(常見問題與解答)

在這裡,我們以問答形式彙整了使用 Python 進行滑鼠操作自動化的常見疑問與容易卡住的要點。請作為解決問題或應用提示來活用。

Q1. Windows・Mac・Linux 都能運作嗎?

A. PyAutoGUI 基本上在主要作業系統(Windows、macOS、Linux)上都能運作。不過,快捷鍵或某些特殊功能等,可能因作業系統而異。在首次使用的環境中,請務必進行測試,確認是否如預期運作。

Q2. 日文輸入無法順利進行時的對策是?

A. PyAutoGUI 的write()函數不支援日文。如果要輸入日文或表情符號,請使用pyperclip複製文字,然後以pyautogui.hotkey('ctrl', 'v')貼上,這是最可靠的方法。在非 Windows 的作業系統上,也能以類似方法應對多數情況。

Q3. 影像辨識點擊無法進行・失敗時該怎麼辦?

A. 如果影像辨識無法順利進行,請確認以下事項。
  • 螢幕截圖影像是否與實際的按鈕或圖示相同大小・色調
  • 畫面放大率或解析度是否未變更
  • 調整 confidence 值(例如:0.8 或 0.9)來提高辨識率
  • 按鈕或圖示的設計是否未變更
如果檢視這些仍無法解決,請試試其他影像或方法。

Q4. 執行中腳本停止・發生錯誤的原因是什麼?

A. 如果視窗未置於最前方,或座標或影像找不到時,可能會發生錯誤。請事先將視窗切換至最前方,使用例外處理(try-except)來設計錯誤時的行為等,注意安全的設計。

Q5. 想調整點擊速度或動作間隔時該怎麼做?

A.pyautogui.click()moveTo()可以透過duration引數指定動作時間。此外,也能使用time.sleep()插入任意等待時間,或使用pyautogui.PAUSE調整整體間隔。 例:pyautogui.click(400, 500, clicks=5, interval=0.3)

Q6. 除了滑鼠操作(鍵盤或畫面擷取等)也能自動化嗎?

A. 是的,PyAutoGUI 不僅支援滑鼠,還具備鍵盤操作、畫面擷取、螢幕截圖儲存等多樣自動化功能。透過官方文件或其他 Python 函式庫的組合,能實現更高度的自動化。 這些問答是基於實際常見的疑問與問題彙整而成。如果無法自行解決或想更詳細了解,請參考 PyAutoGUI 官方文件,或 Python 社群的問答網站等。
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール