ChatGPTや他3種の生成AIに、自動でマウス操作をするコードを聞いて、結果を比較 →どれも正常動作

#   はじめに

本稿では、下記の記事で記載した、自動でマウス操作を行うコードの作成について、
4種の生成AI、ChatGPT・Phind・Microsoft Copilot・Google Gemini、のコード生成結果を比較します。

https://qiita.com/dl_from_scratch/items/8318e99052b7118022e8

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

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

#   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

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


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

ChatGPTでなく、(アカウント不要の)Phindに聞いてみます。全く同じ質問をしていきます。

https://www.phind.com/

質問中の画面例: 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606924/9daf0d8d-5c65-d879-a690-46e375dd9fef.png)

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

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

**▼Phind(自動応答)**
Pythonでマウスの入力操作を行うことは可能で、`PyAutoGUI`というライブラリを使用することで、マウス操作やキーボード操作を自動化することができます。`PyAutoGUI`は、Windows、MacOS、Linuxなどのオペレーティングシステムで動作し、Python2とPython3の両方で利用できます。このライブラリを使用することで、マウスカーソルの移動、クリック、ドラッグ、文字入力、特殊キー入力など、さまざまな操作を自動化することができます。また、`PyAutoGUI`は無料で使用でき、その使い方も比較的簡単です。

例えば、マウスカーソルを特定の位置に移動させるには以下のようにします。

```python
import pyautogui

# マウスカーソルを指定した位置に移動させる
pyautogui.moveTo(100, 150)
```

クリック操作を自動化するには、以下のようにします。

```python
import pyautogui

# マウスカーソルを指定した位置に移動させ、クリックする
pyautogui.click(100, 150)
```

ドラッグ操作も同様に簡単に実装できます。

```python
import pyautogui

# マウスカーソルを指定した位置から別の位置へドラッグする
pyautogui.dragTo(200, 250, duration=1)
```

特に、文字入力や特殊キー入力を自動化する際には、`pyperclip`ライブラリを`PyAutoGUI`と組み合わせて使用することで、より効率的な操作が可能になります。例えば、日本語のテキストをクリップボードにコピーし、それを貼り付けることで、日本語入力を自動化することができます。

```python
import pyperclip
import pyautogui

# 入力したい文字列をクリップボードにコピー
pyperclip.copy('こんにちは、世界！')

# Ctrl+vで貼り付け
pyautogui.hotkey('ctrl', 'v')
```

これらの操作を行う際には、`PyAutoGUI`が動作を制御している間は、手動での入力動作が不規則になるため、注意が必要です。また、直接操作できないアプリケーションの自動化にも役立つため、様々な用途で活用することができます。

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

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

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

**▼Phind(自動応答)**
PythonとPyAutoGUIを使用して、指定された画面位置(x1, y1)を1分に1回クリックする動作を行うコードは以下のようになります。このコードでは、`pyautogui.click()`関数を使用して指定された座標にクリックを行い、`time.sleep()`関数を使用して1分間の待機を行います。

```python
import pyautogui
import time

#  クリックを行う座標を指定
x1, y1 =  100,  200  #  ここに実際の座標を指定してください

while True:
    pyautogui.click(x1, y1)  #  指定された座標にクリック
    time.sleep(60)  #  60秒待機
```

このコードは無限ループになっているため、プログラムを停止するにはスクリプトを強制終了する必要があります。また、`pyautogui`ライブラリを使用する前に、`pip install pyautogui`コマンドでインストールする必要があります[1][2].

なお、`pyautogui`はマウスやキーボードの操作を自動化するためのライブラリであり、特にGUI操作を自動化する場合に便利です。ただし、このような自動化スクリプトを使用する際には、スクリプトが意図しない操作を行わないように注意が必要です[3][4].

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

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

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

**▼Phind(自動応答)**
`pyautogui.click(x1, y1)`を使用してクリックを行う際、どんなウィンドウでもクリックできます。`pyautogui`ライブラリはマウスやキーボードの操作を自動化するためのライブラリであり、指定された座標(x1, y1)に移動した上でクリックを行います。この操作はOSのGUI環境に依存しており、ウィンドウの状態やアクティブなウィンドウに関わらず実行可能です。

ただし、`pyautogui`を使用する際には、操作を行う前に目的のウィンドウがアクティブであることを確認する必要があります。これは、`pyautogui`がマウスやキーボードの操作をスクリーン全体に対して行うため、アクティブなウィンドウが操作の対象となります。ウィンドウがアクティブでない場合、操作は意図したアプリケーションに影響を与えない可能性があります。

また、`pyautogui`はマウスクリックだけでなく、ドラッグやマウスの位置の移動など、さまざまなマウス操作を自動化することができます。これらの操作もウィンドウの状態に関わらず実行可能ですが、操作の対象がどのアプリケーションかによって、実行結果が異なる場合があります[0][1][2][3][4].

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

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

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

**▼Phind(自動応答)**
クリックしたい位置(x1, y1)の座標を調べるには、`PyAutoGUI`ライブラリの`position()`関数を使用することができます。この関数は現在のマウスカーソルの座標を取得します。マウスカーソルを目的の位置に移動させた後、`position()`関数を呼び出すことで、その位置の座標(x, y)を取得できます。

以下に、マウスカーソルの現在位置を取得し、その座標を表示する簡単なコード例を示します。

```python
import pyautogui

#  マウスカーソルの現在位置を取得
x, y = pyautogui.position()

#  取得した座標を表示
print(f"現在のマウス位置: ({x}, {y})")
```

このコードを実行する前に、`PyAutoGUI`ライブラリがインストールされていることを確認してください。インストールされていない場合は、ターミナルやコマンドプロンプトで`pip install pyautogui`コマンドを実行してインストールできます。

また、`PyAutoGUI`を使用する際には、マウスやキーボードの操作がスクリーン全体に影響を与えるため、操作を行う前に目的のウィンドウがアクティブであることを確認する必要があります。これにより、意図した操作が正しく行われることを保証できます[0].

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

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

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

**▼Phind(自動応答)**
ユーザーにクリックしたい位置を入力させ、その位置を1分に1回クリックする動作を行うPythonコードは以下のようになります。このコードでは、`input()`関数を使用してユーザーから座標を入力させ、`pyautogui.click()`関数と`time.sleep()`関数を使用して指定された座標に1分ごとにクリックを行います。

```python
import pyautogui
import time

# ユーザーにクリックしたい位置を入力させる
print("クリックしたい位置を入力してください。例: 100, 200")
x1, y1 = map(int, input().split(','))

# 指定された座標に1分ごとにクリック
while True:
    pyautogui.click(x1, y1) # 指定された座標にクリック
    time.sleep(60) # 60秒待機
```

このコードを実行する前に、`PyAutoGUI`ライブラリがインストールされていることを確認してください。インストールされていない場合は、ターミナルやコマンドプロンプトで`pip install pyautogui`コマンドを実行してインストールできます。

また、`PyAutoGUI`を使用する際には、マウスやキーボードの操作がスクリーン全体に影響を与えるため、操作を行う前に目的のウィンドウがアクティブであることを確認する必要があります。これにより、意図した操作が正しく行われることを保証できます。

このコードは無限ループになっているため、プログラムを停止するにはスクリプトを強制終了する必要があります。また、`pyautogui`ライブラリはマウスやキーボードの操作を自動化するためのライブラリであり、特にGUI操作を自動化する場合に便利です。ただし、このような自動化スクリプトを使用する際には、スクリプトが意図しない操作を行わないように注意が必要です。

:::note info
クリック位置座標を数値で入力したい訳ではなく、質問の指定不足であったようで、より細かい指定を付けて質問し直します。
:::

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

**▼Phind(自動応答)**
`pyautogui.position()`を使用してユーザーが指定した位置を1分に1回クリックする動作を行うコードを組み合わせることができます。このコードでは、ユーザーにマウスカーソルを目的の位置に移動させてもらい、その位置を取得してから、その座標に対して1分に1回クリックを行います。

以下に、そのような動作を行うPythonスクリプトの例を示します。

```python
import pyautogui
import time

# ユーザーにマウスカーソルを目的の位置に移動させてもらう
print("マウスカーソルをクリックしたい位置に移動してください。")
input("準備ができたらEnterキーを押してください。")

# 現在のマウスカーソルの位置を取得
x, y = pyautogui.position()

# 取得した座標を表示
print(f"クリックする位置: ({x}, {y})")

# 指定された座標に対して1分に1回クリックを行う
while True:
    pyautogui.click(x, y) # 指定された座標にクリック
    time.sleep(60) # 60秒待機
```

このスクリプトを実行する前に、`PyAutoGUI`ライブラリがインストールされていることを確認してください。インストールされていない場合は、ターミナルやコマンドプロンプトで`pip install pyautogui`コマンドを実行してインストールできます。

このスクリプトを実行すると、ユーザーにマウスカーソルを移動させる指示が表示され、マウスカーソルを目的の位置に移動させてもらった後、その位置に対して1分に1回クリックを行います。スクリプトを停止するには、スクリプトを実行しているコンソールやターミナルを閉じるか、プログラムを強制終了する必要があります。

なお、`PyAutoGUI`を使用する際には、マウスやキーボードの操作がスクリーン全体に影響を与えるため、操作を行う前に目的のウィンドウがアクティブであることを確認する必要があります。これにより、意図した操作が正しく行われることを保証できます[0].

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

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

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


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

ChatGPTでなく、Microsoft Copilotに聞いてみます。全く同じ質問をしていきます。

https://www.bing.com/chat?q=

質問中の画面例: 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606924/1dfc1781-998f-71da-7413-ef5a5187fc8b.png)

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

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

**▼Microsoft Copilot(自動応答)**
もちろん、**Python**を使ってマウスの入力操作を自動化することができます！具体的には、**PyAutoGUI**というライブラリを使用します。以下に、マウス操作の基本的な方法を紹介します。

1. **PyAutoGUI**のインストール:
    - まず、**PyAutoGUI**をインストールしましょう。ターミナルまたはコマンドプロンプトで以下のコマンドを実行してください:
        ```
        pip install pyautogui
        ```
    - インストールが完了したら、Pythonスクリプト内で**PyAutoGUI**をインポートします:
        ```python
        import pyautogui
        ```

2. **マウス操作**:
    - **クリック**:
        - マウスの左クリックは `pyautogui.click()` で行います。
        - クリック位置を指定する方法は3つあります:
            1. 現在のマウスカーソル位置をクリック: `pyautogui.click()`
            2. モニター上の座標 `(x, y)` をクリック: `pyautogui.click(x, y)`
            3. 画像を指定してクリック: `pyautogui.click('button.png')`
        - 画像を指定する場合、ボタンなどの位置を直接クリックできます。

    - **マウスカーソルの移動**:
        - 絶対位置または相対位置でマウスカーソルを移動できます。
        - 絶対位置を指定して移動: `pyautogui.moveTo(x, y)`
        - 相対位置を指定して移動: `pyautogui.move(x, y)`

    - **その他の操作**:
        - 右クリック: `pyautogui.rightClick()`
        - ダブルクリック: `pyautogui.doubleClick()`
        - マウスホイール操作（画面スクロール）: `pyautogui.scroll(amount)`

3. **座標の確認**:
    - 現在のマウスカーソルの座標を取得: `pyautogui.position()`

以上の方法を組み合わせて、Pythonでマウスの入力操作を自動化できます。¹⁴⁵

注意点として、マウス操作はアプリケーションやウィンドウの位置に依存するため、環境によって調整が必要です。¹⁴⁵

ソース:
(1) 【自動化】Pythonでマウスとキーボードを操る #Python - Qiita. https://qiita.com/konitech913/items/301bb63c8a69c3fcb1bd.
(2) Pythonでマウスを操作する方法 | Pythonマスターブログ. http://it-programming-beginner.com/2023/10/06/python-mouse-control/.
(3) 作業自動化に使えるPyAutoGUI紹介 【マウス・キーボード操作 .... https://qiita.com/suipy/items/a50c95293126c41bcca0.
(4) 【Python】マウスを自動操作する方法＠PyAutoGUI. https://bing.com/search?q=Python+%e3%83%9e%e3%82%a6%e3%82%b9+%e5%85%a5%e5%8a%9b+%e6%93%8d%e4%bd%9c.
(5) PythonでWindows APIを使ったマウス操作 #Python - Qiita. https://qiita.com/safin/items/09e41718f60d126aa99d.
(6) undefined. https://pyautogui.readthedocs.io/en/latest/mouse.html.

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

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

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

**▼Microsoft Copilot(自動応答)**
もちろん、**PyAutoGUI**を使って指定した画面位置 `(x1, y1)` を1分に1回クリックするコードを作成できます。以下はその例です。

```python
import pyautogui
import time

# 画面位置 (x1, y1) を1分に1回クリック
def click_at_interval(x, y):
    while True:
        pyautogui.click(x, y)
        time.sleep(60)  # 1分待機

# 画面位置 (100, 100) を1分に1回クリックする例
click_at_interval(100, 100)
```

このコードは、指定した座標 `(x1, y1)` を1分ごとにクリックします。必要に応じて座標を変更してください。¹⁴⁵

ソース: 
(1) 作業自動化に使えるPyAutoGUI紹介 【マウス・キーボード操作 .... https://qiita.com/suipy/items/a50c95293126c41bcca0.
(2) 作業自動化に使えるPyAutoGUI紹介 【スクショ・指定画像位置 .... https://qiita.com/suipy/items/15fe275d649c19a51a3e.
(3) 【Python基礎】PyAutoGUIでマウスやキーボードの操作を自動 .... https://3pysci.com/pyautogui-1/.
(4) [Python] PyAutoGUI 画像認識のクリック・待機処理を関数化 - Qiita. https://qiita.com/takafi/items/48f146e1315ff19444bb.
(5) PyAutoGUIでデスクトップの座標取得 - システムブック. https://boook24.com/?p=348.

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

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

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

**▼Microsoft Copilot(自動応答)**
`pyautogui.click(x, y)` は、指定した座標 `(x, y)` に対してクリック操作を行います。この関数は、**どんなウィンドウでも**クリックできます。ウィンドウの内容や種類には依存しません。

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

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

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

**▼Microsoft Copilot(自動応答)**
画面上の特定の位置の座標を調べるためには、以下の方法を試してみてください。

1. **PyAutoGUIの`position()`関数を使用する**:
    - Pythonスクリプト内で`pyautogui.position()`を呼び出すと、現在のマウスカーソルの座標が表示されます。この方法は、特定の位置をクリックするためにマウスカーソルを移動させる場合に便利です。

2. **スクリーンショットを撮影して座標を調べる**:
    - 画面上の特定の位置をクリックしたい場合、スクリーンショットを撮影して、画像編集ソフトウェア（例：Paint、GIMP、Photoshopなど）を使用して座標を調べることができます。

3. **ウィンドウの位置を調べる**:
    - 特定のウィンドウ内の座標を調べたい場合、ウィンドウの位置を調べてから、そのウィンドウ内での相対座標を計算できます。

座標を調べる際には、これらの方法を組み合わせて使うことで、目的の位置を正確に特定できるでしょう。

:::note info
上記の自動応答の回答は、質問の意図通りとなる、正しいコードでした。(ただ、「3.ウィンドウの位置を調べる:」の部分は、関係のない不要な情報。)
:::

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

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

**▼Microsoft Copilot(自動応答)**
もちろんです！以下は、ユーザーにクリックしたい位置を尋ねて、その位置を1分ごとにクリックするPythonスクリプトの例です。

```python
import pyautogui as pag
import time

# ユーザーにクリックしたい位置を尋ねる関数
def get_click_position():
    print("クリックしたい位置を指定してください。")
    print("画面上でマウスカーソルを移動させ、Enterキーを押してください。")
    input("Enterキーを押すと座標が表示されます...")

    # 現在のマウスカーソルの座標を取得
    x, y = pag.position()
    print(f"クリック位置の座標: ({x}, {y})")
    return x, y

# 指定した位置を1分ごとにクリックする関数
def click_at_interval(x1, y1):
    while True:
        pag.click(x1, y1)  # 座標 (x1, y1) をクリック
        time.sleep(60)  # 60秒待機

# ユーザーにクリックしたい位置を尋ねる
click_x, click_y = get_click_position()

# 指定した位置を1分ごとにクリック
click_at_interval(click_x, click_y)
```

このスクリプトは、ユーザーにクリックしたい位置を尋ね、その位置を1分ごとにクリックします。必要に応じて、座標を変更してください。

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

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

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


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

ChatGPTでなく、Google Geminiに聞いてみます。全く同じ質問をしていきます。

https://gemini.google.com/app

質問中の画面例: 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606924/27679b7f-5def-e663-2e8e-6979e49c25fb.png)

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

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

**▼Google Gemini(自動応答)**
はい、**Python**で**マウス操作**を自動化することは可能です。

**必要なライブラリ:**

* **pyautogui:** Pythonでマウスとキーボード操作を自動化するライブラリです。

**インストール方法:**

```
pip install pyautogui
```

**基本的な操作:**

* **クリック:**
    * `pyautogui.click()` : 現在のカーソル位置をクリックします。
    * `pyautogui.click(x, y)` : 指定した座標(x, y)をクリックします。
    * `pyautogui.click('button.png')` : 画像認識で指定した画像をクリックします。
* **移動:**
    * `pyautogui.moveTo(x, y)` : マウスカーソルを指定した座標(x, y)に移動します。
    * `pyautogui.move(x, y)` : マウスカーソルを現在の位置から相対的に(x, y)だけ移動します。
* **ドラッグ:**
    * `pyautogui.dragTo(x, y)` : マウスボタンを押しながら、マウスカーソルを指定した座標(x, y)までドラッグします。
    * `pyautogui.drag(x, y)` : マウスボタンを押しながら、マウスカーソルを現在の位置から相対的に(x, y)だけドラッグします。

**その他:**

* スクロール: `pyautogui.scroll(x, y)`
* ホイールクリック: `pyautogui.middleClick()`
* 右クリック: `pyautogui.rightClick()`
* ダブルクリック: `pyautogui.doubleClick()`

**詳細:**

* PyAutoGUI 公式ドキュメント: [https://pyautogui.readthedocs.io/en/latest/](https://pyautogui.readthedocs.io/en/latest/)
* Pythonでマウス操作を完全マスターするための12の手順: [https://jp-seemore.com/iot/python/10260/](https://jp-seemore.com/iot/python/10260/)
* 【PyAutoGUI】Pythonでマウスとキーボードを操作する: [https://tech-blog.rakus.co.jp/entry/20220613/python](https://tech-blog.rakus.co.jp/entry/20220613/python)
* 【自動化】Pythonでマウスとキーボードを操る: [https://qiita.com/run1000dori/items/301bb63c8a69c3fcb1bd](https://qiita.com/run1000dori/items/301bb63c8a69c3fcb1bd)
* 作業自動化に使えるPyAutoGUI紹介 【マウス・キーボード操作】 #Python: [https://qiita.com/suipy/items/a50c95293126c41bcca0](https://qiita.com/suipy/items/a50c95293126c41bcca0)

**例:**

```python
import pyautogui

# 画面中央をクリック
pyautogui.click(x=960, y=540)

# 左上隅から100px, 100pxの位置に移動
pyautogui.moveTo(x=100, y=100)

# 画像認識で "button.png" をクリック
pyautogui.click('button.png')

# マウスボタンを押しながら、画面中央までドラッグ
pyautogui.dragTo(x=960, y=540, button='left')
```

**注意:**

* マウス操作を自動化するときは、誤操作に注意が必要です。
* テスト環境で動作を確認してから本番環境で使用しましょう。

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

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

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

**▼Google Gemini(自動応答)**
```python
import pyautogui
import time

# クリックする座標
x1 = 100
y1 = 100

# 1分間隔でクリック
while True:
    pyautogui.click(x1, y1)
    time.sleep(60)
```

**解説:**

* `pyautogui.click(x1, y1)` : 指定した座標(x1, y1)をクリックします。
* `time.sleep(60)` : 60秒間待機します。

**注意事項:**

* このコードは、無限ループになっています。停止したい場合は、`Ctrl` + `C` キーを押してください。
* クリックする座標は、ご自身の環境に合わせて変更してください。

**応用:**

* クリックする間隔を変更したい場合は、`time.sleep()` の引数を変更してください。
* クリックする回数を制限したい場合は、`for` ループを使用してください。
* 画像認識を使用して、画像をクリックするコードも書けます。

**参考:**

* PyAutoGUI 公式ドキュメント: [https://pyautogui.readthedocs.io/en/latest/](https://pyautogui.readthedocs.io/en/latest/)
* Pythonでマウス操作を完全マスターするための12の手順: [https://jp-seemore.com/iot/python/10260/](https://jp-seemore.com/iot/python/10260/)
* 【PyAutoGUI】Pythonでマウスとキーボードを操作する: [https://tech-blog.rakus.co.jp/entry/20220613/python](https://tech-blog.rakus.co.jp/entry/20220613/python)
* 【自動化】Pythonでマウスとキーボードを操る: [https://qiita.com/run1000dori/items/301bb63c8a69c3fcb1bd](https://qiita.com/run1000dori/items/301bb63c8a69c3fcb1bd)
* 作業自動化に使えるPyAutoGUI紹介 【マウス・キーボード操作】 #Python: [https://qiita.com/suipy/items/a50c95293126c41bcca0](https://qiita.com/suipy/items/a50c95293126c41bcca0)

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

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

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

**▼Google Gemini(自動応答)**
はい、**pyautogui.click(x1, y1)** は、**どんなウィンドウでもクリック**できます。

**理由:**

* pyautogui は、**画面全体のピクセル情報**を取得して操作を行うため、ウィンドウの境界やアクティブ状態に依存せずにクリックできます。
* ただし、**ウィンドウが非表示**または**最小化**されている場合は、クリックできません。
* また、**複数のウィンドウが重なり合っている**場合は、**最前面**のウィンドウのみクリックできます。

**注意点:**

* クリックする座標は、**画面全体の座標**である必要があります。
* ウィンドウ内の座標を取得するには、**pyautogui.position()`** などの関数を使用する必要があります。

**参考:**

* PyAutoGUI 公式ドキュメント: [https://pyautogui.readthedocs.io/en/latest/](https://pyautogui.readthedocs.io/en/latest/)
* Pythonでマウス操作を完全マスターするための12の手順: [https://jp-seemore.com/iot/python/10260/](https://jp-seemore.com/iot/python/10260/)
* 【PyAutoGUI】Pythonでマウスとキーボードを操作する: [https://tech-blog.rakus.co.jp/entry/20220613/python](https://tech-blog.rakus.co.jp/entry/20220613/python)
* 【自動化】Pythonでマウスとキーボードを操る: [https://qiita.com/run1000dori/items/301bb63c8a69c3fcb1bd](https://qiita.com/run1000dori/items/301bb63c8a69c3fcb1bd)
* 作業自動化に使えるPyAutoGUI紹介 【マウス・キーボード操作】 #Python: [https://qiita.com/suipy/items/a50c95293126c41bcca0](https://qiita.com/suipy/items/a50c95293126c41bcca0)

**例:**

```python
import pyautogui

# 画面中央をクリック
pyautogui.click(x=960, y=540)

# ウィンドウのタイトルバーをクリック
title = "My Window"
x, y = pyautogui.locateOnScreen(f"{title}.png")
pyautogui.click(x=x + 5, y=y + 5)
```

**補足:**

* 上記の例では、**画像認識**を使用して、ウィンドウのタイトルバーをクリックしています。
* 画像認識を使用する場合は、**ウィンドウのタイトルバーが常に表示されている**必要があります。

:::note info
上記の自動応答の回答は、概ね、質問の意図通りとなる、正しい情報でした。(「pyautogui.locateOnScreen(f"{title}.png")」のコードは別途.pngを用意しないといけないはずですが、唐突に出て来て特に説明がなく分かりづらい。このコードは、このままでは実行不可。)
:::

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

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

**▼Google Gemini(自動応答)**
クリックしたい位置(x1, y1)の座標を調べる方法はいくつかあります。

**方法1: マウスの動きを視覚的に確認**

1. **pyautogui.displayMousePosition()** を実行します。
2. マウスカーソルを動かすと、画面左上に座標が表示されます。
3. クリックしたい位置の座標をメモします。

**方法2: 画像認識を使用**

1. クリックしたい位置を含む画像を用意します。
2. **pyautogui.locateOnScreen()** を使用して、画像の座標を取得します。

**方法3: ウィンドウの要素の座標を取得**

1. **pyautogui.position()** を使用して、ウィンドウ左上の座標を取得します。
2. ウィンドウ内の要素の座標を、ウィンドウ左上の座標から相対的に取得します。

**方法4: 外部ツールを使用**

* **ScreenRuler** などのツールを使用して、画面上の座標を取得できます。

**参考:**

* PyAutoGUI 公式ドキュメント: [https://pyautogui.readthedocs.io/en/latest/](https://pyautogui.readthedocs.io/en/latest/)
* Pythonでマウス操作を完全マスターするための12の手順: [https://jp-seemore.com/iot/python/10260/](https://jp-seemore.com/iot/python/10260/)
* 【PyAutoGUI】Pythonでマウスとキーボードを操作する: [https://tech-blog.rakus.co.jp/entry/20220613/python](https://tech-blog.rakus.co.jp/entry/20220613/python)
* 【自動化】Pythonでマウスとキーボードを操る: [https://qiita.com/run1000dori/items/301bb63c8a69c3fcb1bd](https://qiita.com/run1000dori/items/301bb63c8a69c3fcb1bd)
* 作業自動化に使えるPyAutoGUI紹介 【マウス・キーボード操作】 #Python: [https://qiita.com/suipy/items/a50c95293126c41bcca0](https://qiita.com/suipy/items/a50c95293126c41bcca0)

**例:**

```python
import pyautogui

# マウスの動きを視覚的に確認
pyautogui.displayMousePosition()

# 画像認識を使用して座標を取得
image_path = "image.png"
x, y = pyautogui.locateOnScreen(image_path)

# ウィンドウの要素の座標を取得
window_title = "My Window"
x, y = pyautogui.position()
x_element, y_element = pyautogui.locateOnScreen(f"{window_title}.png")

# 外部ツールを使用
# ScreenRuler を使用して座標を取得
```

:::note info
上記の自動応答の回答は、質問の意図通りとなる、正しいコードでした。(「pyautogui.locateOnScreen(f"{window_title}.png")」のコードは別途.pngを用意しないといけないはずですが、唐突に出て来て特に説明がなく分かりづらい。このコードは、このままでは実行不可。)
:::

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

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

**▼Google Gemini(自動応答)**
```python
import pyautogui
import time

# ユーザーにクリックしたい位置を聞く
x1, y1 = input("クリックしたい位置の座標を入力してください(x, y): ").split(",")
x1 = int(x1)
y1 = int(y1)

# 1分間隔でクリック
while True:
    pyautogui.click(x1, y1)
    time.sleep(60)
```

**解説:**

* `input()` 関数を使用して、ユーザーにクリックしたい位置の座標を入力してもらいます。
* 入力された座標を `int()` 関数を使用して整数に変換します。
* `pyautogui.click(x1, y1)` で、指定された座標をクリックします。
* `time.sleep(60)` で、60秒間待機します。

**注意事項:**

* このコードは、無限ループになっています。停止したい場合は、`Ctrl` + `C` キーを押してください。
* ユーザーが入力した座標が誤っている場合は、エラーが発生します。

**応用:**

* クリックする間隔を変更したい場合は、`time.sleep()` の引数を変更してください。
* クリックする回数を制限したい場合は、`for` ループを使用してください。

**参考:**

* PyAutoGUI 公式ドキュメント: [https://pyautogui.readthedocs.io/en/latest/](https://pyautogui.readthedocs.io/en/latest/)
* Pythonでマウス操作を完全マスターするための12の手順: [https://jp-seemore.com/iot/python/10260/](https://jp-seemore.com/iot/python/10260/)
* 【PyAutoGUI】Pythonでマウスとキーボードを操作する: [https://tech-blog.rakus.co.jp/entry/20220613/python](https://tech-blog.rakus.co.jp/entry/20220613/python)
* 【自動化】Pythonでマウスとキーボードを操る: [https://qiita.com/run1000dori/items/301bb63c8a69c3fcb1bd](https://qiita.com/run1000dori/items/301bb63c8a69c3fcb1bd)
* 作業自動化に使えるPyAutoGUI紹介 【マウス・キーボード操作】 #Python: [https://qiita.com/suipy/items/a50c95293126c41bcca0](https://qiita.com/suipy/items/a50c95293126c41bcca0)

:::note info
クリック位置座標を数値で入力したい訳ではなく、質問の指定不足であったようで、より細かい指定を付けて質問し直します。
:::

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

**▼Google Gemini(自動応答)**
```python
import pyautogui
import time

# ユーザーにクリックしたい位置を聞く
print("ウィンドウ左上の座標を取得します。")
time.sleep(3)
x0, y0 = pyautogui.position()
print(f"ウィンドウ左上の座標: ({x0}, {y0})")

print("クリックしたい位置をマウスで動かしてください。")
time.sleep(3)
x1, y1 = pyautogui.position()
print(f"クリックしたい位置: ({x1}, {y1})")

# 1分間隔でクリック
while True:
    pyautogui.click(x1, y1)
    time.sleep(60)
```

**解説:**

1. 最初に `pyautogui.position()` を使用して、ウィンドウ左上の座標を取得します。
2. ユーザーにマウスでクリックしたい位置を動かしてもらい、その座標を取得します。
3. 取得した座標を使用して、1分間隔でクリックします。

**注意事項:**

* このコードは、無限ループになっています。停止したい場合は、`Ctrl` + `C` キーを押してください。
* ユーザーが誤った位置をクリックした場合は、誤った位置をクリックし続けます。

**改善点:**

* ユーザーがクリックした位置を視覚的に確認できるように、クリックした位置に何か表示する。
* ユーザーが誤った位置をクリックした場合、再度クリック位置を入力できるようにする。

**参考:**

* PyAutoGUI 公式ドキュメント: [https://pyautogui.readthedocs.io/en/latest/](https://pyautogui.readthedocs.io/en/latest/)
* Pythonでマウス操作を完全マスターするための12の手順: [https://jp-seemore.com/iot/python/10260/](https://jp-seemore.com/iot/python/10260/)
* 【PyAutoGUI】Pythonでマウスとキーボードを操作する: [https://tech-blog.rakus.co.jp/entry/20220613/python](https://tech-blog.rakus.co.jp/entry/20220613/python)
* 【自動化】Pythonでマウスとキーボードを操る: [https://qiita.com/run1000dori/items/301bb63c8a69c3fcb1bd](https://qiita.com/run1000dori/items/301bb63c8a69c3fcb1bd)
* 作業自動化に使えるPyAutoGUI紹介 【マウス・キーボード操作】 #Python: [https://qiita.com/suipy/items/a50c95293126c41bcca0](https://qiita.com/suipy/items/a50c95293126c41bcca0)

:::note info
上記の自動応答の回答は、質問の意図通りとなる、期待通りの完璧なコードでした。ほしかった機能を実現するコードが得られました。(ただ、冒頭の「"ウィンドウ左上の座標を取得します。"」部分のコードは、意味のない不要なゴミコードが混ざっている。)
:::

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

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


#   まとめ

本稿で設定したタスク(Pythonでマウスの入力操作)に対しては、

* ChatGPT
* Phind
* Microsoft Copilot
* Google Gemini

のそれぞれ4種の生成AIが生成したコードは、どれも殆ど似たようなコードになりました。
そして、実際に実行してみると、どれも修正の必要なく、完全に期待通りの動作をするものになっており、非常に優秀なことが分かります。**ほしかった機能を実現するコードが日本語を書いただけで簡単に得られました**。

強いて言えば、ChatGPTが、よりよく質問の意図を推測してくれて、質問をやり直す必要なく、無駄なコード生成のない回答になっている気がします。
一方で、Phindは、最終的に得られたコードが最もシンプルで素直な形になり、最も好ましいと感じました。

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

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

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


#   参考

##   ChatGPTの始め方

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

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

##   バージョン

ChatGPT 3.5
Phind-34B Model
Microsoft Copilot: GPT-4 (詳細不明)
Google Gemini: (詳細不明)