pyautoguiのあれこれ

#はじめに
今回は自作RPAに心強い味方の**pyautogui**について詳しく紹介していきます！
[こちら ~会社の業務をRPAで効率化した話~](https://qiita.com/hideto1198/items/d0641d9a9dacbb786bc2)でも使用したライブラリです

##開発環境
- iMac 2019 Big sur(Boot Campでwindows使用)
- Python 3.8.6
- IDE 3.8
- PyAutoGUI 0.9.51

##インストール方法
- macOS&Linux > `python3 -m pip install pyautogui`
- Windows > `pip install pyautogui`

##キーボード操作編
###-文字入力
```python
import pyautogui

pyautogui.write('Hello python!')
pyautogui.write('Hello python!', interval = 0.25)
```
>`interval=(秒)`１文字入力する間隔、省略すると一瞬
>日本語入力は直接は不可能
>キャラ文字のみ対応、「shift」や「F1」キーは`write()`では使えない

###-キー操作
```python
import pyautogui

pyautogui.press('enter')
pyautogui.press(['left','left','left'])    #or pyautogui.press('left', presses=3)
pyautogui.keyDown('shift')
pyautogui.keyUp('shift')
pyautogui.hotkey('ctrl','c')
```
|  | 機能 |
|:--|:--|
|  press()   |押すだけ。['','']またはpressesの指定で連打可能|
|  keyDown() |押し続ける。|
|  keyUp()   |keyDown()の解除|
|  hotkey()  |２つ以上のキーの同時押し|
####使えるキーコード一覧
<img height ="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186268/589fe34d-40c9-276e-2e92-7cbd0aff8347.png">

####-日本語の入力方法
```python
import pyautogui

pyautogui.press('kanji')
pyautogui.write('ohayougozaimasu.')
pyautogui.press('enter')
```
英字から、半角/全角変換キーを押してローマ字入力させる方法が一番簡単にできます。
漢字変換は少し難しいような気がしますが、、、
定型文のコピペであれば`pyautogui.hotkey()`でなんとかなるでしょう！

##マウス操作編

###-ムーブ、ドラッグ系
```python
import pyautogui

pyautogui.size()        #画面のサイズ取得    return -> (width,height)
pyautogui.position()    #現在のマウスの座標  return -> (X,Y)

pyautogui.moveTo(X,Y)
pyautogui.move(width,height)
pyautogui.dragTo(X,Y,button='left')
pyautogui.drag(width,height,button='right')
```
|  | 機能 |
|:--|:--|
|moveTo(X,Y)|画面の座標（X,Y）に移動する|
|move(width,height)|現在のマウスの座標からwidth,height分動かす|
|dragTo(X,Y)|画面の座標（X,Y）までドラッグする|
|drag(X,Y)|現在のマウスの座標からwidth,height分ドラッグする|
>durationを指定すると動かす時間を決めることができる

###-クリック系
```python
import pyautogui

pyautogui.click()                           #現在のマウスの座標をクリック
pyautogui.click(button='right')             #右クリック
pyautogui.click(clicks=2,interval=0.25)     #0.25秒の間隔で2回クリック
pyautogui.click(x=100,y=200)                #座標(X,Y)をクリック
pyautogui.doubleClick()                     #ダブルクリック
```
###-スクロール系
```python
import pyautgoui

pyautogui.scroll(10)                #上に10スクロール
pyautogui.scroll(-10)               #下に10スクロール
pyautogui.scroll(10,x=100,y=100)    #座標(x,y)に移動後,上にスクロール
pyautogui.hscroll(10)               #横方向にスクロール
```
##スクリーンショット編
```python:sample.py
import pyautogui

pyautogui.screenshot()                         #スクリーンショット撮影
pyautogui.screenshot('hoge.png')               #スクリーンショット撮影後に'hoge.png'で保存

pyautogui.locateOnScreen('hoge.png')
pyautogui.locateAllOnScreen('hoge.png')
pyautogui.locateCenterOnScreen('hoge.png')
```

|  | 機能 |
|:--|:--|
|locateOnScreen|画面上で一番最初に見つけたターゲットの(Left,Top,Width,Height)をRETURNする|
|locateAllOnScreen|画面上に存在するターゲット全ての(Left,Top,Width,Height)をRETURNする|
|locateCenterOnScreen|画面上で一番最初に見つけたターゲットの中心座標(x,y)をRETURNする|
>いずれも、存在しない場合は**None**を返す。

##メッセージボックス編
###-アラート表示
```python
pyautogui.alert(text='入力ミスがあります',title='注意',button='OK')
```
>戻り値 : **buttonに指定したテキスト**

![スクリーンショット 2020-12-14 121406.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186268/6cdab6bc-e77a-091d-581c-707f3fd9acf0.png)

###-確認メッセージ
```python
pyautogui.confirm(text='終了しても良いですか？',title='確認',buttons=['OK','Cancel'])
```
>戻り値 : **buttonsに指定したテキスト**

![スクリーンショット 2020-12-14 121441.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186268/df7e661a-388a-e596-40a9-91117a834e3f.png)

###-入力画面
```python
pyautogui.prompt(text='生年月日を入力してください',title='入力',default='YYYY/MM/DD')
```
>戻り値 : **入力したテキスト、キャンセル時はNone**

![スクリーンショット 2020-12-14 121630.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186268/1e677cec-59f4-97ac-df79-954ad9d1c361.png)

###-パスワード入力画面
```python
pyautogui.password(text='パスワードを入力してください',title='パスワード',default='',mask='*')
```
>戻り値 : **入力したテキスト、キャンセル時はNone**
>**入力時、maskに指定した文字に置き換える**

![スクリーンショット 2020-12-14 121706.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186268/a08a611c-b49d-bc23-1549-778c49cdf8df.png)

今回はこれで終わりにします！
意外とGUI用のメソッドがあって驚きです💦
それじゃ、じゃあの～✋