Python으로 출근관리를 해보자.
Background
출근 했을 때 브라우저를 통해 사내 portal에서 출근 체크를 하도록 되어 있다고 가정하자. 매일 아침마다 똑같은 작업을 하는 것이 귀찮다. 게다가 때때로 까먹으면 지각처리된다. T.T 컴퓨터를 켜면 자동으로 출석체크가 되도록 해보자.
전략은 다음과 같다.
자동화 flow를 python으로 작성한다. –>
workcheck.py
이
workcheck.py
를 cmd 환경에서 실행시키는 BAT file을 작성한다. –>workcheck.bat
windows의
Task Scheduler
에 컴퓨터가 켜질 때마다 실행되도록workcheck.bat
를 등록한다.
사전 준비
먼저 python으로 browser를 제어하기 위한 준비를 한다.
python code 작성
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
import time
def beyondAlert( browser, delay ):
try:
# Alert 등 공지가 있는 경우 자동 확인
WebDriverWait( browser, delay).until( EC.alert_is_present() )
alert = browser.switch_to_alert()
alert.accept()
print("alert accepted")
except TimeoutException:
print("no alert")
browser.switch_to_default_content()
def execute_myscript( browser ):
javascript_scrtip = "javascript:setWorkTime('S');"
browser.execute_script( javascript_scrtip )
def checkWork( browser, delay ):
try:
WebDriverWait( browser, delay ).until( EC.presence_of_element_located( (By.NAME, 'topFrame') ) )
browser.switch_to.frame("topFrame")
execute_myscript( browser )
except TimeoutException:
print("Loading took too much time!")
def main():
mycompanyUrl = "http://kms.mycompany.com/index.do"
loginIdElementName = 'LoginId'
myId = 'JohnDoe'
passwordElementName = 'LoginPwd'
myPwd = 'mysecretpassword'
#https://stackoverflow.com/a/26567563
#browser = webdriver.Ie()
browser = webdriver.Chrome()
# LOGIN PAGE
browser.get(mycompanyUrl)
id = browser.find_element_by_name( loginIdElementName )
id.send_keys( myId )
pw = browser.find_element_by_name( passwordElementName )
pw.send_keys( myPwd + Keys.RETURN )
# MAIN PAGE
delay = 3 # seconds
beyondAlert( browser, delay )
checkWork( browser, delay )
# https://stackoverflow.com/a/8054179
import logging
import sys
logger = logging.getLogger('mylogger')
# Configure logger to write to a file...
fileHandler = logging.FileHandler('./myLoggerTest.log')
logger.addHandler(fileHandler)
def my_handler(type, value, tb):
logger.exception("Uncaught exception: {0}".format(str(value)))
# Install exception handler
sys.excepthook = my_handler
# Run your main script here:
if __name__ == '__main__':
main()
windows BAT file 작성
Python code를 bat file로 자동실행하는 방법을 참고하자.
Scheduler에 등록
Windows Task Scheduler에서 BAT file이 실행되지 않는 문제에 주의하면서 등록한다.