【Python】seleniumでフォームを自動入力する
機能
seleniumでフォームを自動入力するPythonプログラムです。
Excelの内容をフォームに転記して送信します。
- フォーム
pyautogui版もあります。
サンプル動画
プログラム
#! python3 # 機能 # seleniumでフォームを自動入力する # 使い方 # 1.Pythonを実行する # 実行コマンド # python form_filler.py import os import time import openpyxl from selenium import webdriver from selenium.webdriver.chrome.options import Options import chromedriver_binary # フォームURL form_url = "https://docs.google.com/forms/d/e/1FAIpQLSdme2vmct8SLoy2HhT0uz29LBlwEnAdEh0nKg1ABI13_q26QA/viewform" # ドライバ options = Options() options.add_experimental_option("detach", True) driver = webdriver.Chrome(options=options) # Excel読み込み path = os.path.join(os.path.dirname(__file__), "入力一覧.xlsx") wb = openpyxl.load_workbook(path) sheet = wb.worksheets[0] for row in range(2, sheet.max_row + 1): driver.get(form_url) 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)) # 記述式 elements = driver.find_elements_by_css_selector( ".quantumWizTextinputPaperinputInput" ) elements[0].send_keys(text) time.sleep(1) # 記述式(長文) elements = driver.find_elements_by_css_selector( ".quantumWizTextinputPapertextareaInput" ) elements[0].send_keys(long_text) time.sleep(1) # ラジオボタン elements = driver.find_elements_by_css_selector( ".freebirdFormviewerComponentsQuestionRadioChoice" ) if radio_button == "ラジオボタン1": elements[0].click() elif radio_button == "ラジオボタン2": elements[1].click() elif radio_button == "ラジオボタン3": elements[2].click() time.sleep(1) # プルダウン elements = driver.find_elements_by_css_selector( ".quantumWizMenuPaperselectOptionList" ) elements[0].click() time.sleep(1) elements = driver.find_elements_by_css_selector( ".quantumWizMenuPaperselectPopup .quantumWizMenuPaperselectOption" ) if pull_down == "プルダウン1": elements[1].click() elif pull_down == "プルダウン2": elements[2].click() elif pull_down == "プルダウン3": elements[3].click() time.sleep(1) # チェックボックス check_box = check_box.split("\n") elements = driver.find_elements_by_css_selector( ".freebirdFormviewerComponentsQuestionCheckboxChoice" ) if "チェックボックス1" in check_box: elements[0].click() if "チェックボックス2" in check_box: elements[1].click() if "チェックボックス3" in check_box: elements[2].click() time.sleep(1) # 送信 elements = driver.find_elements_by_css_selector( ".freebirdFormviewerViewNavigationSubmitButton" ) elements[0].click() print("No.{}の情報を送信しました。".format(no)) time.sleep(3)
使い方
- Pythonを実行する
実行コマンド
python form_filler.py
openpyxlとseleniumとchromedriver-binaryをインストールしていない場合は以下のコマンドでインストールして下さい。
pip install openpyxl pip install selenium pip install chromedriver-binary
ドライバーのバージョンによっては実行エラーになる場合があります。
また、ログを抑制する方法などもありますので、以下を参考にして下さい。