【Python】PyAutoGUIでマウスクリックを制御する:右クリック・連打・間隔指定

目次

概要

PyAutoGUIの click() 関数を使用して、マウスのクリック操作を自動化する方法を解説します。

単なる左クリックだけでなく、右クリック、ダブルクリック(連打)、クリック間の待機時間の設定など、パラメータを駆使した多様な操作パターンを網羅します。

仕様(入出力)

  • 入力:
    • クリックしたい座標 (x, y)
    • クリックするボタンの種類(左、右、中)
    • クリック回数
    • クリック間のインターバル時間
  • 出力:
    • 実際のマウスデバイスによるクリック動作
  • 前提:
    • pyautogui ライブラリのインストールが必要です。

基本の使い方

指定した座標を右クリックする基本的な実装です。

Python

import pyautogui

# フェイルセーフ有効化
pyautogui.FAILSAFE = True

# 座標(100, 100)を右クリック
pyautogui.click(x=100, y=100, button='right')

コード全文

シングルクリック、ダブルクリック、連続クリックなどのパターンを関数化し、パラメータの違いによる挙動を確認できる完全なサンプルコードです。

Python

import pyautogui
import time

def demonstrate_click_patterns():
    """
    様々なクリックパターンを実行するデモ関数です。
    """
    # フェイルセーフ:マウスを画面四隅に移動させると強制停止
    pyautogui.FAILSAFE = True
    
    print("3秒後にデモを開始します。マウスから手を離してください...")
    time.sleep(3)

    try:
        # 1. 基本の左クリック (現在位置)
        print("左クリック実行")
        pyautogui.click()
        time.sleep(1)

        # 2. 座標指定の右クリック
        # コンテキストメニューを開く動作などを想定
        target_x, target_y = 500, 300
        print(f"座標({target_x}, {target_y})へ移動して右クリック")
        pyautogui.click(x=target_x, y=target_y, button='right')
        time.sleep(1)

        # 3. ダブルクリック (clicksパラメータを使用)
        # 同じ場所を2回クリック。intervalで間隔を調整可能
        print("ダブルクリック実行 (間隔0.2秒)")
        pyautogui.click(clicks=2, interval=0.2, button='left')
        time.sleep(1)

        # 4. 複数回連打
        # ゲームや特定のUI操作で必要な連打
        print("5回連打実行 (間隔0.1秒)")
        pyautogui.click(clicks=5, interval=0.1)

        print("全ての操作が完了しました。")

    except pyautogui.FailSafeException:
        print("\n強制停止されました。")
    except Exception as e:
        print(f"エラーが発生しました: {e}")

if __name__ == "__main__":
    demonstrate_click_patterns()

カスタムポイント

click() 関数は多数のオプション引数を持っており、これらを組み合わせることで複雑な操作を実現できます。

主要なパラメータとその意味は以下の通りです。

パラメータ名デフォルト意味・役割
xintNoneクリックを行うX座標。省略時は現在のマウス位置を使用。
yintNoneクリックを行うY座標。省略時は現在のマウス位置を使用。
clicksint1クリックする回数。2を指定すればダブルクリックと同義。
intervalfloat0.0clicks が2以上の場合の、クリック間の待機時間(秒)。
buttonstr‘left’クリックするボタン。'left', 'middle', 'right' から指定。

補足

  • intervalの重要性:
    • OSやアプリケーションによっては、クリック間隔が速すぎると(interval=0.0)、ダブルクリックとして認識されなかったり、2回目のクリックが無視されたりします。適度な interval(例: 0.1〜0.25)を設定するのがコツです。
  • 移動とクリックの統合:
    • x, y を指定すると、「移動してからクリック」までを1行で実行してくれます。moveTo() を個別に書く必要がなくコードがスッキリします。

注意点

  1. durationとの違い
    • click() 関数にも duration パラメータ(移動にかける時間)を指定できますが、移動が必要な場合のみ有効です。
    • コードの可読性を上げるため、移動時間が重要な場合は明示的に moveTo() を使うか、引数名を書いて指定することをお勧めします。
  2. アプリケーションの反応速度
    • Python側の処理速度は速いため、アプリの画面遷移やメニュー表示が完了する前にクリックを実行してしまうことがあります。
    • 確実な操作のためには、time.sleep() や画像認識による待機処理を挟むことが重要です。

応用

click() を使用せず、ボタンを「押す(Down)」動作と「離す(Up)」動作を個別に制御するドラッグ操作の応用例です。

click() はこれらの一連の動作(Down -> Up)をラップした関数です。

Python

import pyautogui
import time

def exact_drag_operation():
    """
    click関数を使わず、mouseDownとmouseUpで
    精密なドラッグ操作を行います。
    """
    pyautogui.FAILSAFE = True
    
    start_x, start_y = 400, 400
    end_x, end_y = 600, 400
    
    print("ドラッグ操作開始")
    
    # 始点へ移動
    pyautogui.moveTo(start_x, start_y)
    
    # マウスボタンを押し下げる(離さない)
    pyautogui.mouseDown(button='left')
    time.sleep(0.5) # 掴む動作の演出
    
    # 押したまま移動(ドラッグ)
    pyautogui.moveTo(end_x, end_y, duration=1.0)
    
    # 終点でマウスボタンを離す
    pyautogui.mouseUp(button='left')
    
    print("ドラッグ操作終了")

if __name__ == "__main__":
    exact_drag_operation()

まとめ

pyautogui.click() は最も頻繁に使用される関数です。

単発のクリックだけでなく、clicks と interval を調整することでダブルクリックや連打を表現できるほか、button 引数で右クリックも簡単に実装できます。操作対象のアプリの挙動に合わせて、適切な間隔(interval)を設定することが安定稼働の鍵です。

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

この記事を書いた人

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

目次