ChatGPTではじめてのPyAutoGUI(Google Map データ移行)
やりたいことと前提条件
- 以前所属していた組織のGoogle アカウントをずっと使っていたが,それが停止されるということで,新しいアカウントにデータ移行したい.
- 移行するデータはGoogle Mapのお気に入りリスト(スターではなく,ハート)
- 移行するデータは約1000件(手動では無理)
使った技術
- PythonのPyAutoGUI
失敗したこと
PyAutoGUIについて
Google Map のAPI を使ったデータのインポートエクスポートは,どうやらできないことが判明したので(後述),お気に入りリストに登録されている店舗を新しいアカウントの Google Map上でお気に入りリストにコツコツ登録するしかないという結論に到達した. そのため,そのコツコツ登録する部分をPyAutoGUI で自動化することにしました.
環境構築
- MacBook Air (M1)
- Python 3.11.4 (Anaconda)
を使用しました.
PyAutoGUIのインストール(ChatGPT,BingAI頼み)
せっかくなので流行りのChatGPTとBingAIに聞きながらやってみることにしました. pipが使えませんといったら,手動インストールの手順を教えてくれたので,condaは使えることをお伝えしました. condaを使ってインストールして,サンプルプログラムを実行するとエラーが出たので,エラーメッセージをそのままChatGPTに投げました.(本当はもっと長いです.一部だけ掲載しています) すると,親切にエラーの内容と解決法を教えてくれました. つづき すると,(案の定)エラーは解決しなかったので,次の方法として教えてもらったWebページを見に行きましたが,404NotFoundでした. ChatGPTはここで手詰まりです.
そこで,GPT4が使えると噂のBingAIにも同じエラーメッセージを貼り付けて,解決法を聞いてみることにしました. updateしてもダメなので,新しいconda環境を作成して無事エラーが消えてパッケージのインストールが完了しました.
コーディング
無事パッケージのインストールが終わったので,目的のプログラムを作成していきますが,PyAutoGUIパッケージの使い方がさっぱりわからないので,これも教えてもらうことにしました.
import pyautogui # 画面サイズを取得 screenWidth, screenHeight = pyautogui.size() # マウスカーソルの現在位置を取得 currentMouseX, currentMouseY = pyautogui.position() # マウスカーソルをx座標100、y座標150に移動 pyautogui.moveTo(100, 150) # 現在位置でクリック pyautogui.click() # x座標200、y座標220でクリック pyautogui.click(200, 220) # マウスカーソルを10ピクセル下に移動 pyautogui.move(None, 10) # ダブルクリック pyautogui.doubleClick() # マウスカーソルをx座標500、y座標500に2秒かけて移動 pyautogui.moveTo(500, 500, duration=2, tween=pyautogui.easeInOutQuad) # 'Hello world!'と入力(各キーの間隔は0.25秒) pyautogui.write('Hello world!', interval=0.25) # Escキーを押す pyautogui.press('esc') # Shiftキーを押し続ける pyautogui.keyDown('shift') # 左キーを6回押す pyautogui.write(['left', 'left', 'left', 'left', 'left', 'left']) # Shiftキーを離す pyautogui.keyUp('shift') # Ctrl + c のホットキーを押す pyautogui.hotkey('ctrl', 'c')
これがわかったら大体やりたいことはできそうなので,次のようなコードを書いて無事完了です.
import pyautogui import pyperclip import csv #お気に入りの店舗の情報が保存されているcsvファイル読み込み stores = [] with open('favorites_stores.csv', 'r', encoding='utf-8') as f: for row in csv.reader(f): stores.append(row[2]) #spotlight の座標 1231 12 #spotlightを起動 pyautogui.click(1231, 12) pyautogui.click() pyautogui.PAUSE = 1 #1秒待ちを入れる pyautogui.click() pyautogui.sleep(0.2) #spotlightからgoogle chromeを起動 pyautogui.write('google chrome', interval=0.05) pyautogui.press('return') #アドレスバーに移動 #画面の真ん中あたりをクリックして,chromeをアクティブにする pyautogui.moveTo(622,413) pyautogui.click(622,413) for s in stores: #アドレスバーの内容を削除 pyautogui.hotkey("command", "l") pyautogui.press('backspace') #リストのurlをクリップボードに格納 pyperclip.copy(s) pyautogui.hotkey("command","v") pyautogui.press('return') pyautogui.PAUSE = 1 #保存アイコンをクリック pyautogui.moveTo(217,551) pyautogui.click(217,551) #お気に入りリストに追加 pyautogui.moveTo(220,590) pyautogui.click(220,590) #読み込み待ち pyautogui.PAUSE = 3 #秒待つ
最後に注意点をいくつか記載します.
- 実際の画面遷移を伴うので,画面読み込み等のために適宜PAUSEを入れています.
- google chrome上のクリックしたい場所は事前にpuautogui.positionで取得しておきます.
- ウインドウが表示される場所によってクリックしたい座標が変わるので,クリックしたい座標を取得したらアプリケーションを閉じたりせずにプログラムを実行してしまいましょう.
- 1000件くらいで,おそらく3-4時間程度かかりました(寝るまえに実行して,朝起きたら終わってました)