とりあえずSelenium
導入
ここで導入
今回はPythonを使うことにする
どこで使う?
- 勤怠
コーディング
事前にChromeドライバなどは用意しておく
from selenium import webdriver
import os
from os.path import abspath,dirname
from random import randrange
if os.name == 'posix':
path = abspath(dirname(__file__)+'./mac/chromedriver')
else:
path = abspath(dirname(__file__)+'\win\chromedriver.exe')
browser = webdriver.Chrome(executable_path=path)
browser.get('出勤する画面のURL')
browser.implicitly_wait(3)
el = browser.find_element_by_id('ID')
el.send_keys('ここにID')
el = browser.find_element_by_id('PW')
el.send_keys('ここにPW')
el = browser.find_element_by_id('ログインボタン')
el.click()
el = browser.find_element_by_id('出勤ボタン')
el.click()
browser.close()
少し解説
if os.name == 'posix':
mac は 'posix' になるため、OSの判断に利用している
abspath(dirname(__file__)+'./mac/chromedriver')
まどろっこしいが、絶対パスに変換する為に行う
browser.get('出勤する画面のURL')
URL入力すると遷移するよ
el = browser.find_element_by_id('ID')
Element の id を取得できるよ
el.send_keys('ここにID')
キーボード入力できるよ
el.click()
クリックできるよ
browser.close()
ブラウザを閉じるよ
定期的に実行したい
Windowsのタスクスケジューラを利用して指定した時間(毎日平日9:00など)に実行できる
余談
タスクスケジューラに指定した時間をランダムで実行するモード的なのもがあるからそれで勤怠を切ると時間がバラバラになる。
パソコンの消費電力の事を考える
タスクスケジューラに スリープモードを解除して実行する
という項目があるので、
それにチェックを入れましょう。
___電源ボタンを押すとスリープにする設定にしておくと、勤怠切れたあとにボタンを押すことでスリープにできるよ
(ここも自動化してもいいけど、勤怠が実行されたかどうかの判別として残している)
日報作成
コーディング
予めテンプレートを用意しておく
# TODO
# 内容
# 参考URLリスト
# 日報内容
# コメント
Makefileで作るよ
init:
-date "+%Y%m" | xargs -t -I\{\} mkdir -p Report/\{\}
$(eval FOLDER := `date "+%Y%m"`)
-date "+%Y%m%d" | xargs -t -I\{\} cp -n template.md Report/${FOLDER}/\{\}.md
解説
date "+%Y%m" | xargs -t -I\{\} mkdir -p Report/\{\}
月ごとに保存
Report/201809/20180901.md
のようにするため
mkdir -p
は存在しなければ作成し、存在していてもエラーを出さないオプション
-
Makefile特有の
エラーが発生しても続行する
という機能
$(eval FOLDER :=
date "+%Y%m")
フォルダ名を変数に格納
-date "+%Y%m%d" | xargs -t -I\{\} cp -n template.md Report/${FOLDER}/\{\}.md
本日の日報を作成する
日報を半自動入力
Seleniumでもいいが、どのみち時間などの入力をしないといけないので Javascript でなんとかする
こうしたい
$('#daily_reportゴニョゴニョ').text("\n\n");
$('#daily_reportゴニョゴニョ').text("\n");
$('#daily_reportゴニョゴニョ').text("\n");
$('#daily_reportゴニョゴニョ').text("");
$('#daily_reportゴニョゴニョ').text("");
$('#daily_reportゴニョゴニョ').val(1);
$('#daily_reportゴニョゴニョ').val("0.0");
$('#daily_reportゴニョゴニョ').val("0.0");
$('#daily_reportゴニョゴニョ').val(286);
ひたすらjQueryで打ち込む
jQuery非対応の場合は以下を追記
var script = document.createElement("script");
script.setAttribute("src", "https://code.jquery.com/jquery-3.3.1.js");
script.addEventListener("load", function() {
var script = document.createElement("script");
document.body.appendChild(script);
}, false);
document.body.appendChild(script);
こんなのも自動生成
とりあえず Python 使う
import sys
import datetime
import pyperclip
fileName = ""
args = sys.argv
try:
args[1]
fileName = args[1] + ".md"
except:
fileName = datetime.date.today().strftime("%Y%m%d.md")
dailyreport = ["","","","特になし",""]
idx = 999
for line in open("Report/"+fileName[:6]+"/"+fileName, 'r'):
if line.find("#") != -1:
if line.find("TODO") != -1:
idx = 0
elif line.find("内容") != -1:
idx = 1
elif line.find("日報内容") != -1:
idx = 2
elif line.find("コメント") != -1:
idx = 4
else:
idx = 999
else:
if idx is not 999:
dailyreport[idx] = dailyreport[idx] + line.replace("\n", "\\n")
out = 'var script = document.createElement("script");\n'\
'script.setAttribute("src", "https://code.jquery.com/jquery-3.3.1.js");\n'\
'script.addEventListener("load", function() {\n'\
'var script = document.createElement("script");\n'\
'document.body.appendChild(script);\n'\
'}, false);\n'\
'document.body.appendChild(script);\r\n'
out += "$('#daily_reportゴニョゴニョ').text(\""+dailyreport[0]+"\");\n"\
"$('#daily_reportゴニョゴニョ').text(\""+dailyreport[1]+"\");\n"\
"$('#daily_reportゴニョゴニョ').text(\""+dailyreport[2]+"\");\n"\
"$('#daily_reportゴニョゴニョ').text(\""+dailyreport[3]+"\");\n"\
"$('#daily_reportゴニョゴニョ').text(\""+dailyreport[4]+"\");\n"\
"$('#daily_reportゴニョゴニョ').val(1);\n"\
"$('#daily_reportゴニョゴニョ').val(\"0.0\");\n"\
"$('#daily_reportゴニョゴニョ').val(\"0.0\");\n"\
"$('#daily_reportゴニョゴニョ').val(286);\n"
print(out)
pyperclip.copy(out)
サクッとスパゲティコード(idx
のことはほっといてくれ)
ま、とにかく使えるコードが書けたのでOK
微解説
pyperclip.copy(out)
最終行に書かれてるこれで自動でクリップボードに入れてくれるので、楽ちん
args = sys.argv
try:
args[1]
fileName = args[1] + ".md"
except:
fileName = datetime.date.today().strftime("%Y%m%d.md")
ここで標準入力でもファイル名を指定できる
昨日の日報を忘れていたり、深夜残業した場合に利用できる
最後
Makefileに追記
reports:
python3 src/createDailyReport.py
以上
さいごに
個人的に使用するもので時間かけて冗長化とかオブジェクト指向とか考えると勉強という意味では良いが、勤務時間という少ない時間を利用して作るのなら簡易的に 使えるコード を書いたほうがいい。
最近、できるかどうかを試すだけなのに何故か変数名で迷ったり もしかしたら を考えすぎて時間がかかる。時間をかけていいのはできるかどうか試すときではなく、思ったことが出来た時に製品化する時であったりする場合がいいのかもしれない。
昔、なんでもやってみて試して、スパゲッティコードを作ってた時の伸びしろは今以上のものだったはず・・・