【Python】seleniumでフォームを自動入力する

機能

seleniumでフォームを自動入力するPythonプログラムです。

Excelの内容をフォームに転記して送信します。

  • フォーム

テストフォーム

pyautogui版もあります。

stmtk358.hatenablog.com

サンプル動画

youtu.be

プログラム

#! 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)

使い方

  1. Pythonを実行する

実行コマンド

python form_filler.py

openpyxlとseleniumとchromedriver-binaryをインストールしていない場合は以下のコマンドでインストールして下さい。

pip install openpyxl
pip install selenium
pip install chromedriver-binary

ドライバーのバージョンによっては実行エラーになる場合があります。

また、ログを抑制する方法などもありますので、以下を参考にして下さい。

stmtk358.hatenablog.com

参考文献

www.oreilly.co.jp