議事録のフォーマット作成が面倒なのでSeleniumで自動化する


定期的に参加している打ち合わせのため、事前に議事録のフォーマットを作成しておくというのがだんだん面倒になり自動化することにしました。
単純な作業を自動化するというのは素晴らしいですね。

環境・使った技術

Python3からSeleniumを使い、DocBaseに議事録フォーマットを作成するようにしました。

seleniumはpipでインストールすることが出来ます。

pip install selenium

Selenium実行用のブラウザはchromedriverを使用しました。
最新版をインストールして起動させたところ、エラーで落ちてしまったので安定版をインストールし直しました。

chromediriverインストール先
http://chromedriver.chromium.org/downloads

コード

seleniumの使い方は情報がたくさんあるので、各自調べてもらえればと思います。
ActionChainsクラスというあまり馴染みのないものが出てきたのでソースコードの下で軽く説明します。

from datetime import datetime
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time

# DocBaseのログイン画面を開く
driver = webdriver.Chrome('./chromedriver')
driver.get('https://docbase.io/users/sign_in')
time.sleep(1)

# ログイン
search_email_input = driver.find_element_by_name('user[encrypted_email]')
search_password_input = driver.find_element_by_name('user[password]')
search_email_input.send_keys('email')
search_password_input.send_keys('password')
time.sleep(1)
login_button = driver.find_element_by_name('commit')
login_button.click()

# 新しいメモの作成ページに移動
driver.get('https://team_name.docbase.io/posts/new')
time.sleep(1)

# フォーマットを入力して下書き保存
path = './test.text' # test.txtにはMarkdownで書いたフォーマットを記載しておきます。
action_chains = ActionChains(driver)
search_title_input = driver.find_element_by_name('post[title]')
search_textarea = driver.find_element_by_class_name('CodeMirror')
action_chains.click(search_textarea)
with open(path) as f:
    action_chains.send_keys(f.read()).perform()

post_date = datetime.today().strftime('%Y/%m/%d')
search_title_input.send_keys('{}議事録'.format(post_date))
time.sleep(2)

draft_save_button = driver.find_element_by_class_name('js-submit-button')
draft_save_button.click()
driver.close()

ActionChainsについて

CtrlキーやShiftキーを押しながらの入力や、ファンクションキーの操作ができるクラスです。
DocBaseのテキスト入力時に、CodeMirrorというjsのライブラリが影響して通常のやり方では入力できなかったので、ActionChainsを利用して問題を解決しました。
今回の場合は、テキストエリアをクリックした状態でテキストを入力するという処理になっています。
perform()は、これまでのメソッドをビルドして実行するメソッドです。

一言

時間があるときに、cronでフォーマット作成を定期実行したり、作成した議事録フォーマットをslackとかで通知してみようと思います。

参考

【Python】Seleniumの使用方法メモ
CodeMirrorでブラウザ上で動作するコードエディタを作る
【Python】key_down/click/perform・・・キーボードを押しながら要素をクリックをする