在執行長時間自動化任務(例如模型訓練、爬蟲、資料處理)時,
電腦若自動進入休眠,常常會造成工作中斷。
本篇教學帶你用 Python 的 pyautogui 搭配 threading,
快速打造一個「滑鼠自動移動」工具,讓你的電腦不會自動睡著!
目錄
- 為什麼要自動移動滑鼠?
- 安裝 pyautogui 套件
- threading 是什麼?為什麼要用?
- 防休眠腳本原理與寫法
- 完整範例程式碼解析
- 常見問題與注意事項
- 結語
為什麼要自動移動滑鼠?
多數作業系統會在一段時間無操作後:
- 熄螢幕
- 進入待機/休眠
- 啟動螢幕保護程式
長時間運算或自動化時,這些「貼心」設計反而會中斷工作。
最簡單的解法:讓滑鼠定時自動動一下!
安裝 pyautogui 套件
pip install pyautogui
threading 是什麼?為什麼要用?
什麼是 threading?
- threading 是 Python 內建的多執行緒模組。
- 允許你同時在同一個程式裡執行多個「任務」。
- 這些「任務」叫做執行緒(thread)。
為什麼要用 threading?
- 如果你直接在主程式用
while True
做防休眠,主程式就卡住,不能做其他事。 - 用 threading,可以讓「自動移動滑鼠」這件事在背景執行,
而你的主程式(如資料處理、模型訓練)可以同時進行,互不干擾。
關鍵語法說明
import threading
t = threading.Thread(target=prevent_sleep, daemon=True)
t.start()
target=prevent_sleep
:指定執行緒要做的「任務」是哪個函數。daemon=True
:設為「守護執行緒」,主程式結束時它會自動關掉,不會殘留。t.start()
:真正啟動這個執行緒。
防休眠腳本原理與寫法
核心思路:
- 每隔一段時間自動移動滑鼠一點點(1像素),
- 用
threading
讓它在背景一直執行, - 主程式同時可以繼續運作!
完整範例程式碼解析
import pyautogui
import time
import threading
# 禁用安全機制(不推薦)
# 在 import pyautogui 後添加
#pyautogui.FAILSAFE = False
"""
PyAutoGUI 有一個內建的安全機制:
當滑鼠游標移動到螢幕角落時(通常是左上角),
它會觸發 `FailSafeException`
以停止所有自動化操作。
這個安全機制是為了防止自動化腳本失控,
讓您有機會通過手動將滑鼠移到角落來中斷腳本。
"""
def prevent_sleep(interval=60):
"""
每 interval 秒移動一下滑鼠,防止電腦自動休眠。
"""
while True:
pyautogui.move(1, 0) # 向右移動1像素
pyautogui.move(-1, 0) # 再移回來
#pyautogui.press('f15') #模擬按F15的虛擬鍵盤更安全
#pyautogui.screenshot() #截圖但不存檔
#pyautogui.screenshot('screenshot.png') #截圖存檔
time.sleep(interval) # 等待 interval 秒
# 這一行就是關鍵:啟動「防休眠」的背景執行緒
t = threading.Thread(target=prevent_sleep, daemon=True)
t.start()
# daemon=True 代表主程式結束時自動關閉這個防休眠執行緒
# 以下是你的主程式(可以是資料處理、模型訓練等)
for i in range(5):
print(f"主程式正在執行第 {i+1} 次")
time.sleep(90) # 模擬長時間任務
移動滑鼠防休眠的話,
有可能觸發
pyautogui.FailSafeException:
PyAutoGUI fail-safe triggered from mouse moving to a corner of the screen.

背景執行的防休眠程式雖然FailSafeException
但不影響主程式執行
更安全的防休眠:
pyautogui.press(‘f15’) #模擬按F15的虛擬鍵盤更安全
pyautogui.screenshot() #截圖但不存檔
部分code:

重點整理:
threading.Thread(target=prevent_sleep, daemon=True)
把prevent_sleep
這個功能丟到背景執行,不會卡住主程式。daemon=True
:如果主程式結束,防休眠執行緒也會自動結束。
- 守護線程 (daemon=True):
- 在背景運行
- 當主程式結束時自動終止
- 適合用於服務類任務,如防休眠功能
- 非守護線程 (daemon=False):
- 默認設置
- 會阻止程式結束,直到線程完成
- 適合必須完成的關鍵任務
常見問題與注意事項
- pyautogui.move(1, 0) 的「1」單位是什麼?
→ 答:螢幕上的 1 個像素(pixel)。 - 這樣會不會打斷我滑鼠操作?
→ 幾乎感覺不到,但如果你正在快速移動滑鼠,可能有極小干擾。 - 怎麼結束?
→ 關掉 Python 視窗,或 Ctrl+C。
結語
用 Python 的 pyautogui
搭配 threading
,
只要幾行程式就能防止電腦自動休眠。
把防休眠功能寫成背景執行緒,可讓你的主要程式同時運作,
再也不用擔心長時間自動化會被中斷!
推薦hahow線上學習python: https://igrape.net/30afN
近期留言