pywinautoのクリック操作をマスター!PythonでGUIを自動化する方法

はじめに

本記事では、Windowsアプリケーションを自動操作するためのPythonライブラリ「pywinauto」を使って、クリック操作を行う方法を分かりやすく紹介します。

pywinautoは、GUI(Graphical User Interface)の制御をプログラムで行える強力なツールです。
例えば、繰り返し操作やテストなど、人間が手作業で行うと時間がかかる作業を自動化することができます。

pywinauto クリック操作

pywinautoのクリック操作について理解を深めるために、以下の順番で説明します。

  • 2種類のクリック操作の特徴や違い
  • メッセージ方式のクリック操作について
  • マウス入力式のクリック操作について

pywinautoのクリック操作は以下の通り2種類あります。

方式 概要・特徴
メッセージ方式
  • マウスカーソル自体は実際に移動しない
  • 画面上はカーソルが動かないため、操作を見せる必要がないバックグラウンド処理向け
マウス入力方式
  • 実際にマウスカーソルを動かし、クリックをシミュレート
  • 画面上でカーソルが動くため、リモート操作や動作の見た目が必要な場合に便利

クリック操作(メッセージ方式)

それでは、クリック操作(メッセージ方式)の使い方を説明していきます。
メッセージ方式のクリック操作では、以下の3つのメソッドを使用することが出来ます。

  • click()
  • double_click()
  • right_click()

それぞれのメソッドの簡単な説明、基本操作、指定できる引数を説明していきます。

click():最も基本的なクリック操作

click()は、メッセージ方式でGUIにクリックイベントを送信するメソッドです。
このメソッドを使うと、マウスを実際に動かすことなく、内部的にクリックイベントだけを発行してくれます。

from pywinauto import Application

app = Application(backend="win32").start("calc.exe")
calc_window = app["電卓"]  # Windowsの電卓アプリを例とする

# 例えば「1」ボタンをclick()で押す
button_one = calc_window["1"]
button_one.click()
click()の主な引数
引数 デフォルト 説明
button 'left' クリックするマウスボタンを指定(’left’ / ‘right’ / ‘middle’ など)
coords (None, None) ターゲット要素の左上を基準にした相対座標を指定(例:(10, 5)
pressed '' シフトキーやコントロールキーなど、同時に押す修飾キーを文字列で指定(例:'shift'
double False Trueにするとダブルクリックと同等の挙動
wheel_dist 0 スクロール量を指定。通常のクリックのみでは使わないが、マウスホイール関連操作に用いる
use_log True pywinautoのログに出力するかどうか
pressed_duration 0.0 クリックの押下を持続させる時間(秒)

double_click():ダブルクリックのイベントを送信

名前の通り、double_click()はダブルクリックを行いたい時に利用します。
ファイルを開く操作や、特定のアイテムを素早く選択する動作を再現したい場合などに活用できます。

# 「電卓」アプリにダブルクリックの例は少ないですが、
# 仮にリストアイテムがあるUIを想定すると、次のように書けます。

list_item = calc_window["アイテム名"]
list_item.double_click()
double_click()の主な引数
引数 デフォルト 説明
coords (None, None) ターゲット要素の左上を基準にした相対座標
pressed '' 同時に押す修飾キー(例:'ctrl'
use_log True ログに出力するかどうか
pressed_duration 0.0 ボタン押下を持続させる時間(秒)

right_click():右クリックメニューを開く操作

right_click()は、右クリックを行いたい時に利用するメソッドです。
コンテキストメニュー(右クリックメニュー)の自動操作が可能になります。

# 右クリックを例示
right_click_target = calc_window["2"]
right_click_target.right_click()

# 右クリックメニューが出たら、続けてサブメニューをクリックするなどの流れ
right_click()の主な引数
引数 デフォルト 説明
coords (None, None) ターゲット要素の左上を基準にした相対座標
pressed '' 同時に押す修飾キー(例:'shift'
use_log True ログに出力するかどうか
pressed_duration 0.0 ボタン押下を持続させる時間(秒)

クリック操作(マウス入力式)

それでは、クリック操作(メッセージ方式)の使い方を説明していきます。
メッセージ方式のクリック操作では、以下の3つのメソッドを使用することが出来ます。

  • click_input()
  • double_click_input()
  • right_click_input()

click_input():実際のマウスクリック動作に近い基本操作

click_input()は、実際のマウスイベントをシミュレートするメソッドです。
そのため、ターゲットウィンドウやコントロールが表示されている必要があり、時にはウィンドウが前面にあることが望まれます。
一方で、メッセージ方式では動作しないUIでもクリックが認識されるケースが多く、より確実に操作したい場合には有力な手段になります。

from pywinauto import Application

# Windowsの電卓を例に起動
app = Application(backend="win32").start("calc.exe")

# メインウィンドウ(電卓)を取得
calc_window = app["電卓"]

# 「1」ボタンを取得してマウスイベント方式でクリック
button_one = calc_window["1"]
button_one.click_input()
click_input()の主な引数
引数 デフォルト 説明
coords (None, None) ターゲット要素の左上を基準とした相対座標。
特定の座標をクリックしたい場合に指定する。
button 'left' クリックするマウスボタンを指定。
例:'left', 'right', 'middle'など
pressed '' 同時に押す修飾キーを指定。
例:'shift', 'ctrl'など
double False Trueにするとダブルクリックと同等の挙動。
absolute False 座標をディスプレイ全体の絶対座標とするかどうか。
use_log True pywinautoの動作ログに出力するかどうか。
pressed_duration 0.0 クリックを押下し続ける時間(秒)。

double_click_input():マウスのダブルクリック動作をエミュレート

名前の通り、double_click_input()はダブルクリックを行うためのメソッドです。
アイコンを開く操作や、フォルダをダブルクリックで開く動作を自動化したい時に役立ちます。
先ほどのclick_input()の引数にdouble=Trueを指定する方法もありますが、可読性を高めるために敢えてdouble_click_input()を使うケースもあります。

# 仮にリストアイテムがあるUIを想定
list_item = calc_window["アイテム名"]
list_item.double_click_input()
double_click_input()の主な引数
引数 デフォルト 説明
coords (None, None) ターゲット要素の左上からの相対座標
button 'left' クリックするボタンの種類。通常は左クリックを想定
pressed '' 同時に押す修飾キー
absolute False 座標を画面全体で扱うかどうか
use_log True ログ出力の有無
pressed_duration 0.0 クリックを押下し続ける時間(秒)

right_click_input():右クリックメニューを表示・操作

right_click_input()は、右クリックを行うマウスイベントを発行します。
通常の右クリックと同じ動作をするため、コンテキストメニュー(右クリックメニュー)を開き、表示されたメニュー項目をさらに操作する流れの自動化に便利です。

# 電卓の「2」ボタンを右クリックする例
right_click_target = calc_window["2"]
right_click_target.right_click_input()

# 右クリックメニューが出たら、続けてメニューアイテムを検索しクリック
# (アプリによってはさらにウィンドウ取得や識別が必要)

right_click_input()の主な引数
引数 デフォルト 説明
coords (None, None) ターゲット要素の左上からの相対座標
pressed '' 同時に押す修飾キー
absolute False 座標を画面全体で扱うかどうか
use_log True ログ出力の有無
pressed_duration 0.0 クリックを押下し続ける時間(秒)

公式ドキュメント

What is pywinauto — pywinauto 0.6.8 documentation

関連記事

RPA--PYWINAUTO
「RPA--PYWINAUTO」の記事一覧です。

コメント

タイトルとURLをコピーしました