画面のクリック、文字の入力を自動化する 【Python & pyautogui】

Python

Python の pyautogui を使って、あらかじめ登録しておいた画像領域のクリック、文字入力、キー操作を自動で行うスクリプトについてまとめておきます。Windows パソコンを使います。
以下の環境で動作確認をしています。
環境: Windows パソコン、Anaconda、Python 3.x (pyautogui、OpenCV インストール済み)

背景

Python の pyautogui を使って、日ごろからパソコン作業の自動化を進めています。

Windows のスクリーンキャプチャの機能([ウィンドウ]のキー+[shift]キー+[s]キー)などで、クリックしたい部分の画像を切り取って登録しておくと、画像が一致する場所を探し出してクリックし、文字入力などを行うスクリプトについてまとめておきます。
これで一連の作業について、自動で起動し、文字入力する等の作業が自動化できます。

サンプルスクリプトでは、Windows 10 の画面下のタスクバーで「ここに入力して検索」の欄に “calc” という文字を入力し、Windows の電卓アプリを自動起動する事例としました。
画像を差し替えれば/追加すれば、任意の場所をクリックして文字入力するなど、自由にカスタマイズできます。

なお、pyautogui で画像を見つける際に OpenCV の機能を使っています。
OpenCV のインストールをしていない場合は事前にインストールが必要です(あるいは、スクリプトで moveTo1() 関数の confidence の部分を削除する必要があります)。
Anaconda 環境での OpenCV のインストールの手順については、下記の関連リンクにまとめていますので、参考にしてみてください。

設定手順

① パソコンのデスクトップなどにフォルダを作成してください。
② ①のフォルダ内に pyautogui_test1.py 等の名前でテキストファイルを作成し、下記のスクリプトをコピー&ペーストして保存してください。
③ さらに、①のフォルダ内に “folder1” という名前でフォルダを作成し、このフォルダ内に以下の画像を保存してください。

画像: image01.png

なお、Windows のデスクトップで「ここに入力して検索」の画像が表示されていない場合は、パソコンの画面上でクリックしたい部分の画像を別途作成し、image01.png の名前で保存してください。
④ ②の pyautogui_test1.py を実行してください。

→ 検索欄に calc + [enter] が入力され、電卓アプリが起動したら成功です。

うまく動いたら

・ うまく動いたら、画像を入れ替えるなどして、パソコン上の作業の自動化をテストしてみてください。
・ サンプルでは、click_img1( “image01.png” ) とすることで、image01.png の画像を1回だけクリックする事例としています。
サンプルと同様に click_img1( “image02.png” ) 、click_img1( “image03.png” ) といった記載をスクリプトに追加し、画像 image02.png、image03.png といった画像を追加していけば、複数の画像を自動でクリックすることができます。
・ ダブルクリックをしたい場合は、click_img1() 関数の代わりに doubleclick_img1() 関数を使うと可能です。
・ また、typewrite1( ) 関数で、文字列を入力しています。文字列を入れ替えれば、任意の文字列をタイピングできます。サンプルスクリプトでは、欄をクリックした後、typewrite1() 関数を実行していますので、欄を見つけたらクリックし、以後、タイピングをする動きとなります。
・ 通常文字は typewrite1() 関数に文字列を入れることでタイピングできますが、キーボードの特殊キーを押したい場合は、press_key1() を使うことで操作できます。
たとえば、”enter” の代わりに “up”、”down” とすると、上下の矢印キーの操作が可能です。

参考:クリックする部分の画像の作り方

ご参考までに、Windows の画面上でクリックしたい部分などの画像を切り出す方法についてまとめておきます。
① Windows パソコンで、[ウィンドウ] キー+[shift] キー + [s] キーを押して、「切り取り&スケッチ」ソフトウェアを起動します。
② 続いて、パソコンの画面上で、任意の場所をドラッグして、画像を切り出します。
③ 切り出した画像部分をタップし、さらにフロッピーディスクのアイコンをクリックして、画像を保存します。

★ 背景色など画像が変わってしまうと、該当箇所を見つけ出せなくなることがあります。色や形が変わらない場所を切り取るようにすると、安定して動くと思います。
または、v1 = 0.8 としたところで、閾値を設定していますので、この値を調整することで、多少、画像が一致しなくても見つけ出すように設定できます。(この場合、多少画像が変わってもクリックできることと、間違ったところをクリックしてしまうこと、のトレードオフをみて値を調整・最適化することになります。)

まとめ

Python の pyautogui を使って、指定した画像部分をクリックし、文字入力等を行うスクリプトについてまとめました。
これで、Windows 上での作業の自動化も自由自在です。

関連リンク
・ ウェブ検索と結果の取得を自動化する【Python & selenium】
・ OpenCV のインストール時にエラーが出たとき 【Anaconda】
・ pyautogui で特殊文字( : @ ^ )を自動入力したいとき 【Python】

サンプルスクリプト

import pyautogui as pa1 
import time as tm1 
import os 

def moveTo1( img0, v1=0.8 ): 
    ret1 = -1 
    try: 
        global path1 
        img1 = path1 + img0 
        pos1 = pa1.locateCenterOnScreen( img1, confidence=v1 ) 
        if pos1 is None: 
            print( "error:" + img1 ) 
        else: 
            x1, y1 = pos1 
            pa1.moveTo( x1, y1, 1 ) 
            ret1 = 1 
    except Exception as ex1: 
        print( ex1 ) 
    return ret1 

def click_img1( img0, v1=0.8 ): 
    ret1 = moveTo1( img0, v1 ) 
    if ret1 > 0: 
        pa1.click() 
    tm1.sleep( 2 ) 

def click_img2( img0, n1 ): 
    ret1 = moveTo1( img0 ) 
    if ret1 > 0: 
        for i1 in range( n1 ): 
            pa1.click() 
            tm1.sleep( 0.2 ) 

def doubleclick_img1( img0, v1=0.8 ): 
    ret1 = moveTo1( img0, v1 ) 
    if ret1 > 0: 
        pa1.doubleClick() 
    tm1.sleep( 2 ) 

def typewrite1( str1 ): 
    pa1.typewrite( str1, interval=0.25 ) 

def press_key1( str1 ): 
    pa1.press( str1 ) 
    tm1.sleep( 3 ) 

def press_key_updown1( str1, n1 ): 
    for i1 in range( n1 ): 
        pa1.press( str1 ) 

path1 = os.path.dirname(__file__) + "\\folder1\\" 
tm1.sleep( 3 ) 

click_img1( "image01.png" ) 
typewrite1( "calc" ) 
press_key1( "enter" ) 

 

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