Googleフォームの繰り返しできるテストを自動で埋める拡張機能
Googleフォームにはテスト機能がある
CISTのプログラミング応用で使われている
何度も繰り返し回答できる & 成績には最高スコアが用いられる場合
間違い提出をするたびに1から入力し直さなければならない
既に正答した設問は自動で埋めて欲しいt6o_o6t.icon
queryに各inputのnameに対する正答を渡してあげると良さそう?
スコアを表示画面のJavaScriptに、問題とnameの対応関係を表すオブジェクトが入っている
Chrome拡張機能を作ろうt6o_o6t.icon
スコアを表示画面にて
正解だったものを抜き出すスクリプト
code:
まずFB_PUBLIC_LOAD_DATAから
これを作りたいt6o_o6t.icon
2024/08/03
えびてくに飛び入り参加して発表ネタ用に実装したt6o_o6t.icon
発表はしなかったが
想定以上に参加者が多く時間が厳しいようだった
実装はしたが資料は作っていない
リファクタして拡張機能を配布したい
内部データの構造という詳細に立ち入りすぎたコードになっており、抽象化が足りない
/icons/hr.icon
リファクタ
FB_PUBLIC_LOAD_DATA_を順次処理すると、問題に対する「ProblemId」と「ProblemDataItemId」が入手できる
ProblemDataItemIdを用いて、次の値「AnswerByUser」を実施する
document.querySelector("div[data-item-id='Id'] > div:nth-of-type(2n) > div").dataset.value
また、ProblemDataItemIdを用いて、次の値「ScoringOfAnswer」を取得する
document.querySelector("div[data-item-id='1610889796'] > div > div:last-child").textContent
以上から、次の概念を定義する
Problem
id
answer
AnswerByUser
Problemに対する回答。
id
scoring
ScoringOfAnswer
value
max
isPerfect
2024/08/04
GitHubに公開した
https://github.com/coolwind0202/gform_retry
portalextと違って一般的に利用可能なので、もう少し品質を高めたらChrome Web Storeで配布しても良いかもしれない
現在の課題点
点数が付いていない問題はどうなるの?
テキスト入力や数値入力の場合はどうなるの?
チェックボックスの場合
CardType = 4
DataItemIdから見つかるDiv要素は、次のような形をしている
https://scrapbox.io/files/66aef69b08bce8001c108136.png
document.querySelectorAll("div[data-item-id='1610889796'] > div[role='list'] div[role='checkbox']")
このクエリで取得できる要素の、aria-checkedを見ていけば、チェックされた選択肢が分かる
labels = checkboxes.filter(checkbox => checkbox.ariaChecked === "true").map(checkbox => checkbox.ariaLabel)
2024/08/04 チェックボックスの実装完了
参考
https://stackoverflow.com/questions/61849716/auto-fill-or-automate-a-google-form