Python_GoogleForm入力ツール

# GoogleFormの入力・送信をPythonで行う

# はじめに
この記事は、同じGoogleFormへ何度も回答を行う場合、同じ回答箇所の入力を省略するToolの作成手順です。
※GoogleFormがテンプレートで作成されている場合も対応可能。

| GoogleForm                   | URL       | entry_id   |
|------------------------------|-----------|------------|
| formを毎回新しく作成         | 変わる    | 変わる     |
| formをテンプレートで作成     | 変わる    | 変わらない |
| 同じform                     | 変わらない | 変わらない |

このToolはGoogleFormの各項目に紐づいた、entry_idをキーとして、値を入力&送信するToolです。

### 使用例
・週時、月次のアンケート
・定期発注　等

# 準備物
・GoogleForm
　└Google_ID
 
・Python
　└selenium
 
 ・エディタ


 # 1.GoogleForm作成
 https://www.google.com/intl/ja_jp/forms/about/
 
・ログイン

・新しいフォームを作成

・項目を作成
 ![スクリーンショット 2024-12-06 6.53.32（2）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3946669/4fd1aeae-9bbd-e6a6-4af0-24379a3212cc.png)

 # 2.GoogleFormから必要情報の取得
 ・画面 右上の目のマーク(プレビュー)をクリック
 
 ・画面 右クリック→「検証」をクリック
 
 ・表示された 検証画面(GoogleChromeデベロッパーツールより
 　HTMLコードの書かれた画面で　CTRL＋F (検索窓を表示)
  「entry」の文字列を検索。  
 
 ・何度かEnterを打鍵すると、
  「input type="hidden" name="entry.xxxxxxxxxx" value=""」が確認できる。
 　※「entry.xxxxxxxxxx」が各項目に対応している。
  
 
 ![スクリーンショット 2024-12-06 7.05.20（2）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3946669/39f79c1c-1420-1911-1d5a-b166480accf1.png)
　
　
　
・「entry.xxxxxxxxxx」が表示されたまま画面 左部分のフォームに値を入力する
　すると、対応する「entry.xxxxxxxxxx」の「value=""」に値が出力される
 

 ![スクリーンショット 2024-12-06 7.24.36（2）のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3946669/788a1ddc-2ad9-b352-60f6-c9e341c0971b.png)
　

  
・上位のタグ(＜div jsname="o6bZLc"＞)のouterHTMLをコピー

![スクリーンショット 2024-12-06 7.27.17（2）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3946669/f36c5342-d476-8c0e-bf14-fe9e75663084.png)

 　
・何らかのエディタに貼り付け整形
　※正規表現で置換すると楽です。

![スクリーンショット 2024-12-06 7.41.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3946669/b8c22d34-9361-eb01-89b5-a5b8eafff0d1.png)


![スクリーンショット 2024-12-06 7.41.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3946669/0366d40c-c1d6-99fd-c643-2ca36e3d7f03.png)

 # 3.Pythonコードを作成
 ・以下のコードを元に「form_data」の「項目」と「entry.xxxxxxxxxx」を
  2.で取得した情報に書き換える。

~~~
import requests

# Googleフォームの送信URL(TEST用)
form_id = ""
form_url = f"https: //docs.google.com/forms/d/e/{torm_id}/formResponse"

# 送信データ
form_data = {
    # 質問１　短文回答　　　　　　　　　　　　　　　　# ←「項目」
    "entry.1917196008": "1",　　　　　　　　　　　# ←「"項目に対応するentry_id": "値"」
     # 質問２　長文回答
    "entry.1548551091": "2",
    # 質問３　ラジオボタン
    "entry.1358512549": "選択肢 1",
    # 質問４　チェックボックス
    "entry.1611642019": "チェックボックス 1",
#  "entry.1611642019": "チェックボックス 2"　　　　# ←チェックボックスは、
#  "entry.1611642019": "チェックボックス 3"　　　　#  同じentry_idで複数回答可能。
    # 質問５　プルダウン　　　　　　　　　　　　　　　 #　使用しない回答は、コメントアウト
    "entry.1759522738": "プルダウン 1",
    # 質問６　均等目盛
    "entry.26501631": "5",
    # 質問７　評価
    "entry.482782741": "3",
    # 質問８　 選択式
    "entry.1885657946": "選択式 列 1",
    "entry.859694997": "選択式 列 1",
    # 質問９　チェックボックス（グリッド）
    "entry.2091450370": "グリッド 列２",
    "entry.1280921216": "グリッド 列２",
}

# フォーム送信
response = requests.post(form_url, data=form_data)

# レスポンスの確認
if response.status_code == 200: 
    print("データが正常に送信されました。")
else: 
    print(f"送信に失敗しました。ステータスコード:  {response.status_code}")
~~~


  　
 ・書き換えたものを、Pytohonファイル形式で保存 
　例)　Python_ToGoogleForm.py
 
 ・Python_ToGoogleForm.pyの「form_id」にGoogleForm(プレビューモード)のURLから、
 　[GoogleForm_ID]をコピペする。
>　https://docs.google.com/forms/d/e/[GoogleForm_ID]/viewform


 ![スクリーンショット 2024-12-08 10.43.37（2）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3946669/1636ede8-3eb8-17f5-271f-7b1b0e3832bd.png)

~~~
import requests

# Googleフォームの送信URL(TEST用)
form_id = "1FAIpQLSfOfC9VSNP_ERDcFxXjQGjHsE2ilFnFH-dMFDa5h1BdzCr9EQ"
form_url = f"https: //docs.google.com/forms/d/e/{torm_id}/formResponse"

===以下省略===
~~~
　
　
・ターミナルからseleniumライブラリをインストール
>コマンド：pip install selenium

~~~

% pip install selenium

Collecting selenium
  Downloading selenium-4.27.1-py3-none-any.whl.metadata (7.1 kB)
Collecting urllib3<3,>=1.26 (from urllib3[socks]<3,>=1.26->selenium)
  Using cached urllib3-2.2.3-py3-none-any.whl.metadata (6.5 kB)
Collecting trio~=0.17 (from selenium)
====省略====
Successfully installed attrs-24.2.0 certifi-2024.8.30 h11-0.14.0 idna-3.10 outcome-1.3.0.post0 pysocks-1.7.1 selenium-4.27.1 sniffio-1.3.1 sortedcontainers-2.4.0 trio-0.27.0 trio-websocket-0.11.1 typing_extensions-4.12.2 urllib3-2.2.3 websocket-client-1.8.0 wsproto-1.2.0
↑　インストール成功 (Successfully installed)
~~~
　
　
・seleniumがインストールされた事を確認
>コマンド：pip list | grep selenium
~~~
% pip list | grep selenium
selenium          4.27.1　　　← インストール済ライブラリ一覧に selenium がいる。
~~~

・これで実行環境は整いました。
　※Pythonインストールの説明は省略しています。

 # 4.Pythonコードを実行し、結果を確認
・Pythonコードを実行し、ターミナルに「データが送信されました。」の出力を確認
　※GUI(GoogleFormの画面)に値は反映されませんが、これで入力と送信まで完了しています。

 ![スクリーンショット 2024-12-08 11.50.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3946669/799d9df8-9c7e-0ce5-cd6d-2b0bc73b693b.png)



## 送信結果の確認
・GoogleFormの回答タブをクリック
![スクリーンショット 2024-12-07 12.23.30（2）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3946669/82d2fd9f-9369-2d4d-b0b9-e491e4f1f332.png)

・回答が正しく送信されて色事を確認。

![スクリーンショット 2024-12-07 12.23.43（2）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3946669/48d7b0cd-f8f3-9688-9aa6-b3f6a5ffca44.png)

・以上で終了です、お疲れ様でした！
　次回以降は今回作成したPython_ToGoogleForm.pyの「form_id」と変更したい回答のみ書き換えれば、
　同じ回答の書き込み数を省略できます。