×

    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