lisz-works

技術と興味の集合体

Pythonでマウス操作していみた!操作が自動化できちゃう?!

【スポンサーリンク】

Python ロゴ Pythonでマウス操作をする方法を試してみました!

マウス操作が自動化できるうえ、設定次第で移動モーションも見れるので結構楽しいですよ!

そして更に実用的!

インストール

pipでインストールできます。

コマンドは

pip install PyAutoGUI

こんな感じで出力されます。

出力内容を見るには、[表示]をクリック→

c:\>pip install PyAutoGUI
Collecting PyAutoGUI
  Downloading PyAutoGUI-0.9.36.tar.gz (46kB)
    100% |████████████████████████████████| 51kB 235kB/s
Collecting pymsgbox (from PyAutoGUI)
  Downloading PyMsgBox-1.0.6.zip
Collecting PyTweening>=1.0.1 (from PyAutoGUI)
  Downloading PyTweening-1.0.3.zip
Requirement already satisfied: Pillow in c:\users\xxx\appdata\local\continuum\an
aconda3\lib\site-packages (from PyAutoGUI)
Collecting pyscreeze (from PyAutoGUI)
  Downloading PyScreeze-0.1.13.tar.gz
Collecting olefile (from Pillow->PyAutoGUI)
  Downloading olefile-0.45.1.zip (112kB)
    100% |████████████████████████████████| 112kB 1.7MB/s
Building wheels for collected packages: PyAutoGUI, pymsgbox, PyTweening, pyscreeze, olefile
  Running setup.py bdist_wheel for PyAutoGUI ... done
  Stored in directory: C:\Users\xxx\AppData\Local\pip\Cache\wheels\9f\cb\d6\e1a8
e98f118b45631ce4e6b35f7a6a8781a850ca0e04404dde
  Running setup.py bdist_wheel for pymsgbox ... done
  Stored in directory: C:\Users\xxx\AppData\Local\pip\Cache\wheels\c1\cb\86\c3c2
e3c39f9f0d015cf0f94ab6ca41e14f8c2083846e82b91d
  Running setup.py bdist_wheel for PyTweening ... done
  Stored in directory: C:\Users\xxx\AppData\Local\pip\Cache\wheels\04\86\59\70a9
3cd378740b5266c51e11c36ee3fc8b9dfef4b3bc72fd82
  Running setup.py bdist_wheel for pyscreeze ... done
  Stored in directory: C:\Users\xxx\AppData\Local\pip\Cache\wheels\83\6e\b7\972c
8bbecac72a1b6dbee849d36cf373f7e19e633151409537
  Running setup.py bdist_wheel for olefile ... done
  Stored in directory: C:\Users\xxx\AppData\Local\pip\Cache\wheels\75\f2\18\9f07
3aab5b308aaccec50c17d4afb33dffc3265254e7962d67
Successfully built PyAutoGUI pymsgbox PyTweening pyscreeze olefile
Installing collected packages: pymsgbox, PyTweening, pyscreeze, PyAutoGUI, olefile
Successfully installed PyAutoGUI-0.9.36 PyTweening-1.0.3 olefile-0.45.1 pymsgbox-1.0.6 pyscreez
e-0.1.13

主な関数

関数名 概要
size() 画面サイズを取得
Width,Heightがタプルで返ってくる
position() マウスの現在位置を取得
Width,Heightがタプルで返ってくる
moveTo(x, y, duration=N) マウスを絶対座標指定で動かす
durationでカーソル移動速度を指定できる
0でノーモーション
moveRel(x, y, duration=N) マウスを相対座標指定で動かす
durationでカーソル移動速度を指定できる
0でノーモーション
click(x, y) 絶対座標位置をクリックする
dragRel(x, y, duration=N) 相対座標位置までドラッグを行う
durationでカーソル移動速度を指定できる
0でノーモーション
scroll(M) スクロールする
引数はスクロールする量
正数:上へ、負数:下へ

duration 多少付けとくと見た目に分かりやすい あと勝手に動くさまを見てるのなんか自動化っぽくて楽しい

遊びやお試しの時は付けてみるといいかも

試してみる

pyautogui」をインポートする。

毎度入力は面倒なので、pguiというエイリアスを付けました。

>>> import pyautogui as pgui

画面サイズの取得

タプルで返ってくるので、このようにすると縦横どちらも取得できます。

>>> # 画面サイズを取得
...
>>> width, height = pgui.size()
>>> width
1920
>>> height
1080

マウスを動かす

これでマウスが動きます。

動くだけです。

durationは

(早)0 <---> 1.0(遅)

といった感じ。

0はノーモーションで瞬間移動状態になります。

>>> # 絶対座標で移動
...
>>> pgui.moveTo(100, 100, duration=0.25)
>>> pgui.moveTo(100, 100, duration=0.0)
>>> pgui.moveTo(100, 100, duration=1.0)
>>> 
>>> for i in range(3):
...   pgui.moveTo(100, 100, duration=0.25)
...   pgui.moveTo(200, 100, duration=0.25)
...   pgui.moveTo(200, 200, duration=0.25)
...   pgui.moveTo(100, 200, duration=0.25)
...
>>>
>>> # 相対座標で移動
...
>>> pgui.moveRel(100, 0, duration=0.25)
>>> pgui.moveRel(100, 0, duration=0.25)
>>> pgui.moveRel(100, 0, duration=0.25)

現在位置を取得

これもタプルで取得できる。楽チンだね!

取得した値+相対座標での操作を行えば、おおざっぱな処理なら座標を知らなくてもだいたい操作することができるかもしれません。

>>> # マウスの現在位置を取得
...
>>> x, y = pgui.position()
>>> x
441
>>> y
659

クリック

これも座標さえわかっちゃえば簡単に処理できます。

for等で座標を加算しながら処理とかすれば、連続して順番にクリック……

なんてことも簡単に作ることができます。

例では+1ずつなので、1pixelずつ斜め右下にクリックしていきます。

x = 100
y = 100
for ii in range(10):
    pgui.click(x, y)
    x += 1
    y += 1

ドラッグ

dragRel()は相対座標で動きます。

なので、事前にmoveTo()等で場所を指定しておくと想定通りにしやすいかもしれません。

移動した箇所から、グルっと四角くドラッグします。

pgui.moveTo(100, 100)
distance = 200
pgui.dragRel(distance, 0, duration=0.5)     # →
pgui.dragRel(0, distance, duration=0.5)     # ↓
pgui.dragRel(-distance, 0, duration=0.5)    # ←
pgui.dragRel(0, -distance, duration=0.5)    # ↑

Windows標準のペイント等を開いておいて実行すると楽しいですよ!

参考

コチラを参考にしました。

https://automatetheboringstuff.com/chapter18/

ここは英語のページですが、日本語で書かれたものが書籍化されています。

英語のページでも、コードと原文、Google翻訳を合わせれば読めなくはないです。

が、「日本語がいい!」という方は、書籍の購入を検討してみるといいかもしれません!

あとがき

PythonでまさかGUI操作までできるとは思っていなかったので、コレをみたときは驚きました。

Pythonのライブラリほんと強いし豊富。

Pythonでの自動化に限らず、色々なツールを使って、日常を自動化できたらなーと目論んでいたりします。
(行動が追い付いてない)

今回の自動化は、キー操作も行うことができたりするらしい!

なのでまだまだコレは今回のモノは、氷山の一角でしかありません。

ぼくももっと見ていこうと思います!