【Python】PyAutoGUIでデスクトップ操作を自動化する基本レシピ

目次

概要

Pythonライブラリ PyAutoGUI を使用して、マウスの移動、クリック、キーボード入力といったデスクトップ操作をプログラムから自動制御するレシピです。

定型的なデータ入力作業や、GUIテストの自動化などに役立ちます。また、Linux環境(Ubuntu等)で動作させるための依存ライブラリについても触れます。

仕様(入出力)

  • 入力: 自動化したい操作シーケンス(座標、文字列、キー操作)
  • 出力: デスクトップ上でのマウス・キーボード操作の実行
  • 要件:
    • pyautogui ライブラリ
    • Linuxの場合は scrot, python3-tk, python3-dev 等のOS側パッケージが必要になる場合がある

基本の使い方

import pyautogui

# マウスを画面の (100, 100) の位置へ 1秒かけて移動
pyautogui.moveTo(100, 100, duration=1.0)

# その場で左クリック
pyautogui.click()

コード全文

安全のためフェイルセーフ機能を有効にし、画面サイズを取得してマウスを動かし、最後にテキスト入力を行うデモコードです。

※メモ帳などのテキストエディタを開いてアクティブにした状態で実行することを想定しています。

import pyautogui
import time

def main():
    # 1. 安全装置(フェイルセーフ)の設定
    # マウスカーソルを画面の四隅のいずれかに移動させると、強制的にプログラムが停止します。
    # 誤動作(暴走)した際に緊急停止させるために必須の設定です。
    pyautogui.FAILSAFE = True

    # 動作ごとの待機時間を設定(速すぎて失敗するのを防ぐ)
    pyautogui.PAUSE = 0.5

    print("自動化を開始します。中止する場合はマウスを画面左上に移動してください。")
    print("3秒後に開始します。テキストエディタをアクティブにしてください...")
    time.sleep(3)

    # 2. 画面情報の取得
    screen_width, screen_height = pyautogui.size()
    print(f"画面サイズ: {screen_width} x {screen_height}")

    # 3. マウス操作
    # 画面の中央へ 2秒かけて移動
    pyautogui.moveTo(screen_width / 2, screen_height / 2, duration=2.0)
    
    # 現在位置をクリック(エディタへのフォーカスなどを想定)
    pyautogui.click()

    # 4. キーボード操作
    # 文字列の入力(intervalで1文字ごとの入力間隔を指定)
    # 日本語入力はクリップボード経由などの工夫が必要なため、英数字推奨
    pyautogui.typewrite("Hello, World!", interval=0.1)
    
    # 特殊キーの入力(エンターキーで改行)
    pyautogui.press('enter')
    
    # 複数行の入力
    pyautogui.typewrite("This is an automated message.", interval=0.05)
    pyautogui.press('enter')

    print("完了しました。")

if __name__ == "__main__":
    main()

カスタムポイント

インストールコマンド

環境に合わせて必要なライブラリをインストールしてください。

  • 共通(Pythonライブラリ)Bashpip install pyautogui
  • Linux (Ubuntu/Debian系) の場合画像認識やスクリーンショット機能を使用するために、以下のOSパッケージが必要です。Bashsudo apt update sudo apt install scrot python3-tk python3-dev

主要な操作メソッド

メソッド名説明
moveTo(x, y, duration)指定座標へ移動。durationで移動時間を指定。moveTo(100, 200, duration=1)
click(x, y)指定座標をクリック。省略すると現在位置。click()
typewrite(message, interval)文字列を入力。typewrite("test", interval=0.1)
press(key)特殊キー(enter, esc, ctrl等)を押す。press('enter')
hotkey(key1, key2)ショートカットキー(同時押し)を実行。hotkey('ctrl', 'c')

注意点

  1. 緊急停止(FAILSAFE)の周知自動化スクリプトがループに入り、マウス操作を奪われて制御不能になることがあります。pyautogui.FAILSAFE = True を設定し、「マウスを画面の角(通常は左上 0,0)に持っていくと例外が発生して止まる」仕様を必ず理解しておいてください。
  2. 日本語入力の制限typewrite 関数は直接日本語(マルチバイト文字)を入力できません。日本語を入力したい場合は、pyperclip モジュールを使ってクリップボードにコピーし、hotkey(‘ctrl’, ‘v’) で貼り付ける方法が一般的です。
  3. 座標の環境依存画面解像度が異なるPCでは、指定した座標 (x, y) が意図した場所(ボタン等)とずれる可能性があります。画像認識機能(locateOnScreen)を使うと、ボタンの見た目で場所を探せるため堅牢になります。

バリエーション

スクリーンショット撮影

画面全体を撮影し、ファイルとして保存する機能です。Linuxの場合は scrot がインストールされている必要があります。

import pyautogui
import datetime

def take_screenshot():
    # ファイル名を現在時刻から生成
    filename = datetime.datetime.now().strftime('screenshot_%Y%m%d_%H%M%S.png')
    
    # スクリーンショットを撮影して保存
    pyautogui.screenshot(filename)
    print(f"{filename} を保存しました。")

if __name__ == "__main__":
    take_screenshot()

まとめ

PyAutoGUIを使用すれば、複雑なAPIがないアプリケーションでも、ユーザーの操作を模倣することで自動化が可能になります。

ただし、誤動作のリスクがあるため、必ず FAILSAFE を有効にし、影響の少ない環境でテストを行ってから本番運用してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次