개인프로젝트/자동화

게더타운 출석체크 2탄 파이썬 크롬 디버그 모드를 활용

해아's 2024. 4. 12. 12:00

 

 

게더타운 접속자를 확인하는 파이썬 프로그램

  • 크롬 익스텐션의 문제점이 발견되어 > 파이썬 셀레니움으로 변경
    • 크롬익스텐션의경우 상시가 되지않고 다른데 클릭하면 꺼짐.
    • 플라스크+파이썬 셀레니움 조합으로 변경하여 코드 변경

0. 크롬 디버그모드 접속

  • 크롬 브라우저를 디버그 모드로 접속.
"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe" --remote-debugging-port=9222 --user-data-dir="D:\\ChromeTEMP"
  • 바로 가기경로에 아규먼트 추가
  • 원격디버그 포트 추가
    • -remote-debugging-port 9222
  • 유저데이타 저장 폴더 지정
    • -user-data-dir="D:\ChromeTEMP"
  • app.py에 플라스크로 학생출석테이블을 출력하는 페이지를 구현하고 7777번 포트로 서버를 실행하게 만듬
@app.route('/')
def index():
    return render_template('index.html',atten_users=atten_users)
if __name__ == "__main__":
    app.run(debug=True,port=7777)
  • static 및 templates 폴더를 생성하고 기존에 크롬익스텐션에서 사용했던 js ,css, html를 최적화하여 저장

1.출석자명단 표시 및 실시간 업데이트 -셀레니움

  • 파이썬 셀레니움을 활용하여 실행되어있는 크롬을 원격으로 제어 하여 유저 정보를 가져와서 리턴해주는 함수를 생성
def get_login_user():
    subprocess.run(["taskkill", "/F", "/IM", "chromedriver.exe"])
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_experimental_option("debuggerAddress", secrets['SERVER_URL'])
    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
    checkuser = []
    user_lists = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, '//*[@id="app-container"]/div[1]')))
    soup  = bs(user_lists.get_attribute("innerHTML"))
    for p in soup.find_all('span', class_='css-eeatfk'):
        han_user = re.sub(r"[^ㄱ-ㅣ가-힣\\s]", "",p.get_text())
        if han_user != '':
            checkuser.append(han_user)
    results = json.dumps(checkuser,default=str)
    return(results)
  • 기존 실행중인 chromedriver.exe를 모두삭제하고 새로실행게더타운에서 유저목록이 들어있는 class를 가져와서 한글만 남기고 모두삭제하고 배열로 저장하여 리턴

2. 출석부 가져오기 기능

"출석부 가져오기" 버튼을 클릭하면, 자체 출석 앱의 데이터베이스를 조회하여 출석한 사용자의 정보를 flask 로 제작한 페이지 출석부에 표시합니다. 이를 통해 각 사용자의 출석 시간을 확인할 수 있습니다.

  • 회사내부에 앱이 존재하며 학생들은 게더타운에 접속과함께 앱에 출석체크를 하여야 한다.
  • 이 출석자 명단은 db에 저장되며 나는 조회권한을 부여받았다.
  • 기존에는 db를 조회하여 게더타운에 접속한 사람과 비교하여야 하지만
  • 난 편하게 할려고 출석자 명단 표시기능에 추가하였다
    1. 출석부페이지에서 출석시간가져오기 버튼클릭(호출)
    2. jquey(ajax)로 python flask에 호출
    3. python에서 db를 조회하여 학생들 오늘자 출석정보를 가져오는 쿼리 실행
    4. 쿼리 실행결과를 json 방식으로 반환
    5. 출석부 페이지에서 학생명을 확인하여 학생 박스 하단에 출석시간을 출력

3. 퇴실부 가져오기 기능

"퇴실부 가져오기" 버튼을 누르면, 자체 출석 앱의 데이터베이스에서 퇴실 체크한 사용자의 정보를 조회하여 flask 로 제작한 페이지에 해당 정보를 표시합니다. 이를 통해 각 사용자의 퇴실 시간을 확인할 수 있습니다.

728x90
반응형