ChatGPTに、自動でマウス操作をするコードを聞いて、実際に実行させてみる →そのままで正常動作

#   はじめに

画面内のある位置を1分ごとに押しておいてほしい…(何かの表示更新などの用途で)、簡易的なコードがさっくりほしいけれど、わざわざこんなことのために検索して読み調べてコードを作るのは(簡単なコードであっても)面倒くさいな…、と思ってしまいます。

そこで、ChatGPTに聞いて、マウス操作を行うサンプルプログラムを作ってもらい、うまく動作するかを試してみます。

#   ChatGPTにサンプルプログラムを聞いてみる

Pythonのコードで出来るかどうかをまず聞いてみます。

https://chat.openai.com/

質問中の画面例: 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606924/cbc94667-31fb-fef5-ab50-5db56744186c.png)

##   Pythonでマウスの入力操作は出来る？

**▼私(人間)**
Pythonでマウスの入力操作は出来る？

**▼ChatGPT(自動応答)**
はい、Pythonでマウスの入力操作を行うことができます。一般的には、PyAutoGUIというライブラリが使われます。PyAutoGUIを使用すると、マウスの移動、クリック、ドラッグなどの操作が可能です。

PyAutoGUIは、pipを使用して簡単にインストールできます。以下のコマンドを使用してインストールできます:
```
pip install pyautogui
```

インストールが完了したら、以下のようにしてPythonスクリプト内でPyAutoGUIを使用できます:
```python
import pyautogui

# マウスを指定の位置に移動する
pyautogui.moveTo(x=100, y=100, duration=1)  # xとyは移動先の座標、durationは移動にかかる時間（秒）

# マウスをクリックする
pyautogui.click()

# マウスをドラッグする
pyautogui.dragTo(x=200, y=200, duration=1)  # ドラッグ先の座標と移動にかかる時間を指定

# その他の操作も可能です
```
ただし、PyAutoGUIを使ってマウスを操作する際は、正しい座標を指定することが重要です。また、スクリーン解像度や操作対象のアプリケーションの大きさによって、スクリプトの動作が変わる可能性があるので、注意が必要です。

:::note info
上記の自動応答の回答は、質問の意図通りとなる、正しい情報でした。
:::

##   1分に1回クリックするコードは？

**▼私(人間)**
PyAutoGUIを用いて、画面位置(x1, y1)の所を1分に1回クリックする動作をするコードは？

**▼ChatGPT(自動応答)**
以下は、PyAutoGUIを使用して指定した画面位置 `(x1, y1)` に1分に1回クリックするコードです。

```python
import pyautogui
import time

# 画面位置の指定
x1 = 100
y1 = 100

try:
    while True:
        # 指定した位置をクリック
        pyautogui.click(x=x1, y=y1)
        
        # 1分待つ
        time.sleep(60)
except KeyboardInterrupt:
    print("プログラムを終了します。")
```

このスクリプトは、Ctrl+Cを押すまで指定した位置 `(x1, y1)` に1分に1回クリックし続けます。Ctrl+Cを押すとプログラムが終了します。

:::note info
上記の自動応答の回答は、質問の意図通りとなる、正しいコードでした。
:::

##   どんなウィンドウでもクリックできますか？

**▼私(人間)**
上記のpyautogui.click(x1, y1)で、どんなウィンドウでもクリックできますか？

**▼ChatGPT(自動応答)**
`pyautogui.click(x, y)`関数は、指定した座標 `(x, y)` に対してクリックを行います。この関数は、現在のマウスカーソル位置から指定した座標までの移動と、クリックを行います。そのため、どんなウィンドウでも指定した座標に対してクリックすることができます。

ただし、クリックが行われるウィンドウが前面に表示されている必要があります。つまり、クリックされる対象のウィンドウがバックグラウンドに隠れている場合、クリックが正常に動作しない可能性があります。

:::note info
上記の自動応答の回答は、質問の意図通りとなる、正しい情報でした。
:::

##   どうやって座標を調べたらいい？

**▼私(人間)**
クリックしたい位置(x1, y1)は、どうやって座標を調べたらいい？

**▼ChatGPT(自動応答)**
クリックしたい位置の座標を調べる方法はいくつかあります。以下の方法が一般的です。

1. **マウスの位置を表示するツール**: いくつかのオペレーティングシステムには、現在のマウスの位置を表示するツールが付属しています。マウスを移動すると、現在の座標が表示されるので、その位置を控えます。

2. **Pythonスクリプト**: PythonのPyAutoGUIライブラリを使用して、マウスの現在の座標を取得することもできます。以下のスクリプトを使用して、マウスの現在の座標を取得できます。

```python
import pyautogui

try:
    while True:
        # 現在のマウス座標を取得
        x, y = pyautogui.position()
        print(f"x: {x}, y: {y}")
except KeyboardInterrupt:
    print("プログラムを終了します。")
```

このスクリプトを実行すると、マウスを移動するたびに現在の座標が表示されます。クリックしたい位置の座標を確認するために使用できます。

どちらの方法でも、クリックしたい位置の座標を確認することができます。

:::note info
上記の自動応答の回答は、質問の意図通りとなる、正しいコードでした。
:::

##   これまでを組み合わせてコードにする

**▼私(人間)**
上記を組み合わせて、クリックしたい位置を開始時にユーザーに聞いて、その位置を1分に1回クリックする動作をするコードは？

**▼ChatGPT(自動応答)**
以下は、PyAutoGUIを使用してユーザーにクリックしたい位置を聞き、その位置を1分に1回クリックするコードです。

```python
import pyautogui
import time

try:
    # ユーザーにクリックしたい位置を聞く
    print("クリックしたい位置を指定してください。")
    print("マウスを移動して、クリックしたい位置にカーソルを合わせてください。")
    print("位置を指定するときはCtrl+Cを押してください。")
    while True:
        # 現在のマウス座標を取得
        x1, y1 = pyautogui.position()
        print(f"クリックしたい位置: x={x1}, y={y1}")
        time.sleep(0.5)  # クリック位置が変わるのを待つ
except KeyboardInterrupt:
    pass

try:
    while True:
        # 指定した位置をクリック
        pyautogui.click(x=x1, y=y1)
        
        # 1分待つ
        time.sleep(60)
except KeyboardInterrupt:
    print("プログラムを終了します。")
```

このスクリプトは、ユーザーにクリックしたい位置を聞き、その位置を指定してから1分に1回クリックします。ユーザーがCtrl+Cを押すと、位置の選択が終了し、クリックが開始されます。Ctrl+Cを再度押すとプログラムが終了します。

:::note info
上記の自動応答の回答は、質問の意図通りとなる、期待通りの完璧なコードでした。ほしかった機能を実現するコードが得られました。
:::

##   実際に実行させてみる→期待通りの動作OK

上記の自動応答で得られたコードは、実際に実行してみると、修正の必要なく、完全に期待通りの動作をするものになっており、非常に優秀。ほしかった機能を実現するコードが得られました。


#   まとめ

本稿で設定したタスク(Pythonでマウスの入力操作)に対して、ChatGPTが生成したコードは、実際に実行してみると、修正の必要なく、完全に期待通りの動作をするものになっており、非常に優秀なことが分かります。**ほしかった機能を実現するコードが日本語を書いただけで簡単に得られました**。

一般的によくある機能・内容であれば、ほとんど正しいコード例が得られて、そのままエラーなく実行可能ということが分かります。
**ちょっとした機能が欲しい(けれど検索して調べてコード作って…が面倒な)時**に、**ほしいものを聞くだけでコードが得られる**、とても便利なツールであることが分かります。

以前、下記の記事で、ChatGPTにメジャーではない処理のコードを聞いてみると、生成されたコードが全く意図と違って全然使えなかった結果を記載しましたが、本稿のような一般的によくある機能であれば、ほとんど正しいコード例が得られて、とても便利なことが分かります。

https://qiita.com/dl_from_scratch/items/fec09443ca0c1d6ea8fa


#   参考

##   ChatGPTの始め方

記事: 【無料】チャットGPTの始め方を解説！

https://www.minotake-gadget.net/chatgpt-howto/

##   バージョン

ChatGPT 3.5