
설치는 pip를 이용해서 하면 되고 아직 깊이 있게 하지 않아서 그럴 수도 있지만, 동작이 단순하여 쉽게 할 수 있다. 현재 최신 버전인 4는 기존의 버전들과 많이 다른 것 같다. 따라서 공식 문서를 읽어보는 게 가장 정확했다.
Selenium 공식문서
(1) 로그인을 한다.
(2) 강의실로 들어간다. 이때, 팝업으로 뜨는 '동의하기' 버튼을 눌러야 한다.
(3) '교육 정보 페이지' 가 새 창으로 띄워진다.
(4) 교육 정보 페이지에서 '학습하기'를 눌러 강의실로 이동해야 하며, 모든 회차에 대해 수강을 완료해야 한다.
(5) 이때 강의는 또 다른 새 창으로 열린다.
(6) 진도율이 100%가 될 때까지 (4)-(5) 과정을 반복한다.
로그인부터가 난관의 시작이었다. 로그인은 id와 pw를 입력하는 element를 찾아 정보를 입력하고 이를 확인하는 버튼을 클릭하는 방법으로 진행했다. 하지만, driver.find_element(By.NAME,'user_id') 를 해도 이 element 찾을 수 없다는 에러가 떴다. 가장 확실하게 Xpath도 이용해 봤지만 또 똑같은 오류가 발생했다. 우연히 유튜브 알고리즘에 의해 selenium에서 frame을 바꾸는 방법을 봤는데, 이거다 싶었다. 몇 시간 동안 XPATH를 살펴보면서 frame 안에 html 코드가 있어서 신기하다 하면서 넘어갔었는데, 이렇게 고생하면서 살펴보길 잘한 것 같았다.
driver=webdriver.Chrome()
driver.get(url) #url은 실제 url
# 프레임으로 이동
pop_up=driver.find_element(By.XPATH,'/html/frameset/frame[2]')
driver.switch_to.frame(pop_up)
# 로그인
driver.find_element(By.NAME,'user_id').send_keys(id)
driver.find_element(By.NAME,'pwd').send_keys(pw)
driver.find_element(By.XPATH,'/html/body/div[2]/div[2]/div/div[2]/form/fieldset/div[4]/div[1]/a').click()
어찌어찌해서 교육 정보 페이지를 지나 실제 강의가 보이는 화면까지 자동으로 오도록 했다. 이때 한 강의가 끝나면 자동으로 다음 강의로 넘어가도록 버튼을 눌러야 했다. 이것을 해결하기 위해 '지금까지 강의를 본 시간'이 '강의의 총 시간'과 일치할 경우에만 넘어가도록 하면 되겠다는 생각을 했다. 그래서 관련 element를 찾았고 element의 text가 'current time / finish time'이라는 것을 확인해 split을 이용해 둘을 나눈 뒤, 둘을 비교하면 되겠다는 생각을 했다. 하지만 간과한 것이 있었는데, 강의가 나오는 화면에 동작이 감지돼야만 정보를 갱신해 주는 기능이 있었다. 따라서 'current time / finish time'이러한 형식이 아닌 그냥 '' 빈 문자열을 넘겨주는 경우가 있었다. 따라서 이 부분을 예외 처리해 주고, frame 안에 있는 html tag를 10초에 한 번 클릭하여 시간 정보를 갱신해 주었다.
이 방법을 보다 효율적으로 하기 위해서 다음과 같은 방법으로 바꿨다.
(1) html tag를 클릭하여 화면을 깨워주고, '지금까지 강의를 본 시간'이 '강의의 총 시간'이 존재할 경우에만 다음을 수행한다.
(2) '(강의의 총 시간)+1'만큼 time.sleep()을 해준다.
(3) 그 시간 뒤에 html tag를 클릭하여 화면을 깨워주고, 다음 강으로 넘어가는 버튼을 클릭한다.
진도율에 대한 정보를 담는 element를 찾아 그 text가 '100%'가 되면 while 문을 종료 시키고 열린 창들을 모두 끄도록 했다. 만약 100%가 되지 않으면 마지막에 있는 강의(last-child)를 계속 수강하도록 했다.
다른 부분들은 거의 다 해결한 것 같지만, 아직 더 고민해야 하는 부분들이 있다.
(1) 강의 중간에 퀴즈가 나오는 경우가 있는데, 이에 대해 예외 처리를 해줘야 한다. 예외가 발생해도 꺼지지 않고, 퀴즈의 답을 누른 다음에는 다시 정상적으로 작동하도록 만들 것이다.
(2) 이렇게 만든 프로그램을 실행파일로 따로 저장하여, 어디에서든 그 파일만 있으면 이 작업을 수행할 수 있도록 만들고 싶다.
이 부분들은 추후에 교직원분들께서 새로운 강의를 수강하셔야 할 때 만들어야 할 것 같다. (1) 예외 처리 때문인데, 지금은 강의 중간에 있는 퀴즈까지 가기 위해 수십 분을 기다려야 한다. 너무 오래 걸려서 다시 업데이트를 해야겠다.
블로그 이전 전 원글 주소