Python으로 출근관리를 해보자.

Background

출근 했을 때 브라우저를 통해 사내 portal에서 출근 체크를 하도록 되어 있다고 가정하자. 매일 아침마다 똑같은 작업을 하는 것이 귀찮다. 게다가 때때로 까먹으면 지각처리된다. T.T 컴퓨터를 켜면 자동으로 출석체크가 되도록 해보자.

전략은 다음과 같다.

  1. 자동화 flow를 python으로 작성한다. –> workcheck.py

  2. workcheck.py를 cmd 환경에서 실행시키는 BAT file을 작성한다. –> workcheck.bat

  3. 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이 실행되지 않는 문제에 주의하면서 등록한다.

... ... ... ...
Back