【Python】pyautoguiでフォームを自動入力する
機能
pyautoguiでフォームを自動入力するPythonプログラムです。
Excelの内容をフォームに転記して送信します。
- フォーム
selenium版もあります。
サンプル動画
プログラム
#! python3 # 機能 # pyautoguiでフォームを自動入力する # 使い方 # 1.Pythonを実行する # 実行コマンド # python form_filler.py import os import time import openpyxl import pyperclip import pyautogui import webbrowser # フォームURL form_url = "https://docs.google.com/forms/d/e/1FAIpQLSdme2vmct8SLoy2HhT0uz29LBlwEnAdEh0nKg1ABI13_q26QA/viewform" # 先頭項目の座標 first_field_xy = (500, 510) # 「別の回答を送信」リンクの座標 another_link_xy = (540, 350) # GUI操作の間隔 pyautogui.PAUSE = 0.5 # Excel読み込み path = os.path.join(os.path.dirname(__file__), "入力一覧.xlsx") wb = openpyxl.load_workbook(path) sheet = wb.worksheets[0] # フォームを開く webbrowser.open(form_url) for row in range(2, sheet.max_row + 1): print("5秒間一時停止中。中断するにはCtrl+Cを押してください。") time.sleep(5) # 行読み込み no = sheet.cell(row=row, column=1).value text = sheet.cell(row=row, column=2).value long_text = sheet.cell(row=row, column=3).value radio_button = sheet.cell(row=row, column=4).value pull_down = sheet.cell(row=row, column=5).value check_box = sheet.cell(row=row, column=6).value print("No.{}の情報を入力中...".format(no)) # 記述式 pyautogui.click(first_field_xy[0], first_field_xy[1]) pyperclip.copy(text) pyautogui.hotkey("ctrl", "v") pyautogui.typewrite("\t") # 記述式(長文) pyperclip.copy(long_text) pyautogui.hotkey("ctrl", "v") pyautogui.typewrite("\t") # ラジオボタン if radio_button == "ラジオボタン1": pyautogui.typewrite([" "]) elif radio_button == "ラジオボタン2": pyautogui.typewrite(["down"]) elif radio_button == "ラジオボタン3": pyautogui.typewrite(["down", "down"]) pyautogui.typewrite(["\t"]) # プルダウン if pull_down == "プルダウン1": pyautogui.typewrite(["down"]) elif pull_down == "プルダウン2": pyautogui.typewrite(["down", "down"], 0.1) elif pull_down == "プルダウン3": pyautogui.typewrite(["down", "down", "down"], 0.1) pyautogui.typewrite(["enter"]) pyautogui.typewrite(["\t"]) # チェックボックス check_box = check_box.split("\n") if "チェックボックス1" in check_box: pyautogui.typewrite([" "]) pyautogui.typewrite(["\t"]) if "チェックボックス2" in check_box: pyautogui.typewrite([" "]) pyautogui.typewrite(["\t"]) if "チェックボックス3" in check_box: pyautogui.typewrite([" "]) pyautogui.typewrite(["\t"]) # 送信 pyautogui.press("enter") print("No.{}の情報を送信しました。".format(no)) time.sleep(3) # 「別の回答を送信」リンク押下 pyautogui.click(another_link_xy[0], another_link_xy[1])
座標について
先頭項目と「別の回答を送信」リンクの座標はPC環境ごとに異なるので、変更する必要があります。
以下のプログラムで座標を取得することができます。
日本語入力について
英数字などの場合はtypewrite()で入力することできますが、引数を日本語にした場合は入力されません。
pyautogui.typewrite("english")
この問題を回避するために、コピー&ペーストで入力しています。
pyperclip.copy("日本語") pyautogui.hotkey("ctrl", "v")
使い方
- Pythonを実行する
実行中にマウスを動かしたり、ウィンドウを切り替えてしまうと正常に動作しなくなりますので、注意して下さい。
実行コマンド
python form_filler.py
openpyxlとpyperclipとpyautoguiをインストールしていない場合は以下のコマンドでインストールして下さい。
pip install openpyxl pip install pyperclip pip install pyautogui