【初心者向け】PythonでWindowsの操作を自動化する方法【PyAutoGui】

この記事は約6分で読めます。

PyAutoGuiを使ってWindows操作を自動化してみました。
普段操作してるマウス操作やキー操作を自動化するので
直観的に理解できPython初心者にも扱いやすく
実用的なライブラリです。
数個の命令の使い方が分かれば、
いろんなことが自動化できます。
まず参考になるYoutubeで基本を押さえていただき
初心者が、はまりそうなところを補足していきます。
Pythonの実行環境がパソコンに入ってない人は
無料で入れられるので調べて入れておいてください。

環境: Windows10, Anaconda, JupiterNotebook,Python 3
GoogleColabratoryではできないか、できても簡単ではない。
当記事のコードをJupiternotebookにコピペして使うと
’などが全角になるときがあります半角に直してください。

Youtubeで基本をマスター

実際の動きを見ながら教えてくれるのでわかりやすいです。
Python解説動画_もなかさんの
【効率化】めんどくさい作業を完全自動化 PyAutoGUI完全マスター ~マウスクリックからキーボードタイピングまでPythonが全部代わりにやってくれます~
30分ですが必要なさそうなところは早送りしてみるとすぐ終わります。
Youtubeで早送りはキーボードの→キーを押すと5秒ごと先にスキップします。

PyAutoGui のメリット・デメリット

メリット

  • 普段のキー、マウス操作をプログラムに置き換えるのでわかりやすい。
  • 数個の命令(マウスを移動する。クリックする。キー入力)ぐらいを覚えるだけで、
    かなりのことができる。

デメリット

  • 操作対象のWindowを最前面に表示させておかなければいけないので他の作業ができない。
    (Youtubeなどで音だけ聞くことはできるが画面は見れない。)

実際に使用する際に初心者がはまること

上の動画を見ていただいた前提で話を進めていきます。
使用するライブラリ(importするもの)や
変数pagは上のYoutubeのものをそのまま使ってます。

思い通りの操作ができない。

アクティブ(最前面に出ている画面)なWindowが
JupiterNotebookなどになっているからです。
プログラムを実行して、ただ待っていても
JupiterNotebookに対して処理が実行されてしまいます。

ですのでプログラムを実行したらすぐに
処理したいWindowをアクティブ(最前面に持ってくる)にする必要があります。
またはプログラムの中でターゲットのソフトを起動する方法があります。
対策例3が1番実用的です。

対策例1:
プログラムの1番先頭に time.sleep(5)を書き5秒以内に
操作対象のWindowを最前面に表示させる。

対策例2:
Alt+Tabは現在開いているWindowが順番にアクティブになります。
キー操作でALT+Tabをやってみると動作が分かります。
なので操作対象のWindowを直前に表示させ
その後Jupiternotebookに戻って
以下をプログラムの先頭に書いた
プログラムを実行すれば操作したいWindowがアクティブになります。

time.sleep(1)
pag.hotkey("alt","tab")
time.sleep(3)

うまくいかないときはsleepの時間をのばすと動作が安定します。

対策例3:
プログラムを起動させる。
エッジの場合以下のコードで実行できます。(ファイルの場所はそれぞれ違う)

import subprocess
subprocess.run(r'C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe')

カッコの中はr’起動したいプログラムのある場所’と記述します。
起動したいプログラムのある位置は書くプログラムを右クリックしてプロパティを表じさせると
リンク先というところが場所になります。
それをコピペすればいいんですが。
そのままではエラーになります。
先頭にr(raw 文字列)をつけることでうまくできます。

座標がよくわからない。

基本的にmoveToなど~To命令を使うようにしましょう。
~To命令で指定する座標は絶対座標なので画面の左上を原点に
固定した座標を指定することになります。
座標を指定する際、大事なのがWindowを最大化しておくことです。
中途半端な大きさのWindowに対して座標を指定しても
Windowの大きさが変わってしまえば座標も変わります。
なので最大で操作することを前提に座標を決めましょう。

座標の調べ方ですがYoutubeではMouseControlFunctionという
コマンドプロンプトで実行するプログラムを紹介していましたが
私はエラーになって実行できませんでした。
(コマンドプロンプトで実行する環境が私の場合うまくいかないことが多い)
便利そうですがなくても何とかなります。
以下のようなマウスのポジションを返してくれる命令だけ実行します。
命令の前には
sleepを入れて5秒の間に知りたいところにマウスを移動します。
その際、調べたいWindowは最大にし
JupiterNotebookはできるだけ小さくしておきます。
調べたいWindowの知りたい位置をJupiternotebookが上にあっても
見えるようにJupiternotebookの位置を変えておいてください。

time.sleep(5)
pag.position()

5秒後にマウスの位置が表示されます。
目次へ

できるだけショートカットキーを使う

普段使わないとなじみがないですが
ショートカットキーを使ったほうが便利です。
例えば画面スクロールなどpag.scroll()を使うより
pag.press(‘pagedown’)を使ったほうが座標を指定しなくて済むので楽です。

止めたい(FaleSafe 機能)

実行中止めたい場合はマウスを画面の左上(0,0)に持っていけば
FaleSafe 機能が働いてエラーでプログラムが止まります。

しかし例えば座標100,100に30秒かけてマウスを移動したい場合
pag.moveTo(100,100,30)とすると
30秒間マウスのコントロールができません。
なので下のよう time.sleepを使って変更すると
29秒はマウスが自由に操作できるので
その間に0,0の座標にマウスをもっていけばフェールセーフ機能で
プログラムを止めることができます。

time.sleep(29) 
pag.moveTo(100,100,1)

止めたい(alertを使う)

alertを使ってアラートを表示しOKボタン待ちの状態にすると。
OKボタンを押したあと
JupiterNotebookに戻って停止ボタンでプログラムを止められる。
開発中は、alertをいっぱい使ってプログラムを止めながらやった方がいい。
プログラムを止めたあとアラート表示が残っているがOKを押せば消える。

pag.alert(text='一旦停止’,title='状況',button='OK')

コピペがうまくいかない

どこかにキーを使ってコピペするとき

コピー
pag.hotkey("ctrl","c")
ペースト
pag.hotkey("ctrl","v")

全角モード(Windows右下の文字入力モードが「あ」)になってるとうまくいきません。
半角モード (Windows右下の文字入力モードが「A」)にしてプログラムを実行しましょう。

画像認識はあまり使わない方がいい?

個人的な意見ですが、locateCenterOnScreenは動作が不安定です。
私の場合だけかも?
使わなくてもできるので、
原因を調べるよりうまくいかない場合は早めに見切った方がいい。

目次へ

MENTAやってます(ichige)

コメント

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