【定時実行】MicrosoftFormsの自動回答botの作り方解説(python・selenium)

スポンサーリンク

作成した背景

何がとは言いませんが、毎日毎日機械的にMicrosoftFormsを入力することに疲れたので、自分の補助をしてくれるbotを作りました。

自己責任

コロナ禍で、毎日あほみたいにFormsを入力する必要が出てきて、ウンザリしています。

そこでFormsへの入力を完全に自動化したくなりますが、それをする場合は自己責任でお願いします。

例えば、名前や出席番号の入力は自動化しても、体調や体温の入力は手動で入力するなど、あくまでも自分を"補助"する目的で使うことを推奨します

(この記事では、ログインを自動化する方法についてはあえて触れません。)

Seleniumの導入

実行環境

以下は、Pythonがすでにインストール済みのWindows10 PCで実行しています。

Pythonのバージョンは3.7.4です。

Chromeが推奨ブラウザです。Chrome以外のブラウザはやり方を自分で工夫してください。

ライブラリのインストール

コマンドプロンプトで、

pip install selenium

と入力すればインストール完了です。

ドライバのインストール

こちらのサイトにある方法で、ご利用のchromeのメインバージョンを調べてください。

そのうえで、こちらのサイトのCurrent Releases内の、自分のchromeのメインバージョンにあったものをクリックして、自分のOS(Linux,Mac,Windows)のドライバをインストールしてください。

chrome以外のブラウザに関しては、selenumの公式サイト内の[Browsers]内にダウンロードリンクが書いてあります。(参考:PythonとSeleniumを使ったブラウザ自動操作)

64bitのOSを利用している人が、32bitと書いてあるドライバを使っても特に問題ありません。

pythonでプログラミング

先ほどダウンロードしたドライバをDLして、解答すると、chromedriver.exeというファイルが手に入ります。そのファイルを自分がアクセスしやすいフォルダに保存します。

私の場合は、C:\selenium\chromedriver.exeというところに保存しました。

そのうえで、Sublime Text 等のエディタを開いて、sample.pyというファイルを、chromedrive.exeと同じフォルダ内に保存します。

つまり、seleniumフォルダ内が

こうなっている必要があります。


今回は、このFormsへの自動回答を想定しています。

そのうえで、sample.py内には、以下のようなソースコードを書きます。

from selenium import webdriver
import time

driver = webdriver.Chrome("c:/selenium/chromedriver.exe")
driver.get("https://forms.office.com/Pages/ResponsePage.aspx?id=DQSIkWdsW0yxEjajBLZtrQAAAAAAAAAAAAMAANfJPNxURDNNOTAxOFFOM0pGOVJNREU2NDZZRlNURy4u")
time.sleep(5)

#名前
element = driver.find_element_by_xpath('//*[@id="form-container"]/div/div/div/div/div[1]/div[2]/div[2]/div[1]/div/div[2]/div/div/input')
text = '山田太郎'
element.send_keys(text)
#クラス
element = driver.find_element_by_xpath('//*[@id="form-container"]/div/div/div/div/div[1]/div[2]/div[2]/div[2]/div/div[2]/div/div[2]/div/label/input')
element.click()
#出席番号
element = driver.find_element_by_xpath('//*[@id="form-container"]/div/div/div/div/div[1]/div[2]/div[2]/div[3]/div/div[2]/div/div/input')
text = '7'
element.send_keys(text)


#体温
element = driver.find_element_by_xpath('//*[@id="form-container"]/div/div/div/div/div[1]/div[2]/div[2]/div[4]/div/div[2]/div/div/input')
text = '36'
element.send_keys(text)

time.sleep(2)

#送信
element = driver.find_element_by_xpath('//*[@id="form-container"]/div/div/div/div/div[1]/div[2]/div[3]/div[1]/button')
element.click()
time.sleep(3)

driver.close()

各部分の詳細な説明は、こちらのサイトが参考になります。

手動実行

まず、手でこのプログラムを動かしてみましょう。

コマンドプロンプトで、先ほど作ったフォルダに移動します。

cd C:\selenium

そのうえで、pythonファイルを実行します。

python sample.py

こんな感じにできました。

(当たり前ですが、無編集です。)

定時実行

定時実行をする場合は、バッチファイルを作る必要があります。

つまり、seleniumフォルダ内に、「samplebat.bat」というファイルをSublimeText等で作成し保存します。つまり、フォルダ内が、

こうなっている必要があります。

batファイルには、

python sample.py

と1行だけ書き込んでください。

そのうえで、このサイトを参考にして、タスクスケジューラを用いて定時実行をすることができます。

全般→ユーザーがログオンしているかどうかに関わらず実行するにチェックする。
条件→コンピュータをAC電源で使用している場合のみタスクを開始するのチェックを外すようにしてください。

対策

自動化する方法だけを書くと、アンフェアだと思うので、自動化への対策も書いておきます。

と言いたいところですが、Formsを利用している以上、自動化を完全に対策する方法はないです

例えば、FormsにGoogleのreCAPTCHAを導入できれば、容易に自動化を対策できると思います。

↓reCAPTCHAとはおなじみのこれのことです

https://konpure.com/2018/11/08/post-8849/

しかし、MicrosoftFormsには、reCAPTCHAを容易に導入できるような機能はないですので、今回は対策としては不適切です。

reCAPTCHAの一世代前の読みにくい文字の書かれたタイプの認証を"疑似的"に導入することはできますが、入力された値があっているかどうかを判別したうえで、あっていなければ先に進めないようにする機能をFormsに導入することはできません。

https://senrioka-info.net/0_google_sitemap/google_sitemap.htm

無理やりですが、こんな感じに"疑似的"に作ることは可能です。

しかし、間違った文字を入力したところで、Formsの回答自体ができなくなるわけではないですし、本質的な対策にはなりません。

また、機械的に文字を読み取る技術も年々高まってきていて、正直この認証方法が本当に人間かどうかを識別できているかは微妙というところもあります。

意見

コロナ禍で、出席から点呼から何から何までFormsを使われるようになりましたが、毎週、出席番号や名前を入力する必要があり、毎日同じことをしている気がして、なんだかなぁと思っています。

出席確認に関して、Formsを使うことが悪いとは思いませんが、会議への出席ログから自動的に出席扱いにされるようにするとか、ファイルのダウンロード・アクセスにより出席扱いにするとか、学生が毎日毎日Formsをポチポチしなくても良くなる工夫がされてもいいのでは?と思っています。

(あと、1日4回くらいFormsに回答していると、純粋にFormsへの入力を忘れるときもあって、それで欠席扱いにされたら、「なんだかな」という気持ちになります。)

Formsはどんなことでも使えるように、汎用性がものすごく高く、また、機能が最小限であるために、誰にとっても使いやすい設計となっています。一方、Formsの基礎的な機能以外の機能を追加する拡張性はほとんど無いに等しいです

"拡張性"の無さを、アンケートの運営者かアンケートの回答者に負担を押し付けることで、何とかFormsを使っているような状況もあったりして、正直何のためにFormsを使っているか分からなくなっていることもあります。

Formsだけにとらわれなくても、適切な機能を持ったアンケートツールは世の中にたくさんあると思いますし、HTMLとCSS、JavaScriptが扱える人なら、容易にFormsに類似する物を作成できると思います。「アンケート=Forms」ではなく、様々な選択肢を検討したうえで、作る側にも答える側にとっても負担の少ないアンケートを作ってほしいと思います。

まとめ

自分のFormsの入力を"補助"してくれるbotを作ってみました。

この技術は、Formsに限らずに様々なWEBサービスで応用できますので、ぜひ使ってみてください。

最初にも書きましたが、このプログラムを使うときは自己責任でお願いします。

参考

MSformsの自動回答スクリプトを通してselenium入門

PythonとSeleniumを使ったブラウザ自動操作

このブログが良いと思ってくださったら、ご支援をお願いします!

※OFUSEは登録不要で、50円から簡単にクリエイターを支援できるサービスです。

OFUSEで支援する

python 技術メモ
スポンサーリンク
asyano.jp

コメント

タイトルとURLをコピーしました