차밍이

[파이썬] Selenium Aha 자동 출석체크 프로그램 만들기 - (2) - 크롬 드라이버 제어하기 및 출첵 본문

파이썬/자동화

[파이썬] Selenium Aha 자동 출석체크 프로그램 만들기 - (2) - 크롬 드라이버 제어하기 및 출첵

2021. 4. 21. 00:01
반응형

목차

    파이썬 셀레니움을 사용해서 직접 자동 출석체크하는 프로그램을 만들어보겠습니다.

    셀레니움 설치와 크롬드라이버 설치를 아직 진행하지 않으셨다면 이전 글을 참고해주세요.

    [파이썬] Selenium 셀레니움 설치하기 / 크롬 드라이버 설치하기

     

    [파이썬] Selenium 셀레니움 설치하기 / 크롬 드라이버 설치하기

    목차 1. Python Selenium 설치하기 다른 라이브러리를 설치하는 것과 동일합니다. pip 또는 conda 명령어를 사용해서 설치해주세요. pip install selenium conda install selenium 2. Chrome Driver 설치하기 Sele..

    chancoding.tistory.com

     

     


    1. 셀레니움 웹드라이버 제어

    a. 기본 선언

    import selenium
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    
    url_path = "https://www.a-ha.io/"

    필요한 library를 불러오고 a-ha에 접속하기 위한 url도 선언해줍니다.

     

    b. 웹 드라이버 생성

    driver = webdriver.Chrome() # 웹 드라이버 생성
    driver.implicitly_wait(1) # wait time

    웹 드라이버를 통해서 크롬 웹을 켜줍니다.

    implicitly_wait 대기 시간을 어느 정도 주면서 진행되도록 하였습니다.

     

    c. URL 접속 & 화면 최대화

    driver.get(url_path) # url로 이동
    driver.implicitly_wait(5) # wait time
    driver.maximize_window() # 화면 최대화

    이렇게 한 화면에 꽉 차게 잘 보이도록 maximize_window를 사용해줍니다.

    이는 다음번 화면 내에서 로그인 버튼을 찾기 위함입니다.

    위의 사진처절반 크기만 나오거나 크기가 작아서 로그인버튼이 보이지 않으면 find_element를 진행할 때, 에러가 발생할 수 있습니다.

     

    d. web element 찾기

    login_button = driver.find_element_by_class_name("buttonLogin")

    find_element_by_class_name을 사용해서 class name을 통해서 login button을 찾습니다.

    Ctrl+Shift+C 버튼을 누르거나 F12를 누른 후 마우스 버튼 같은 것을 눌러서, 화면내에 있는 버튼이 어떻게 선언되어있는지를 확인할 수 있습니다.

    로그인 버튼은 class명이 buttonLogin으로 설정된 것을 확인할 수 있습니다.

    여기서

    login_button = driver.find_element_by_class_name("buttonLogin").click()

    이렇게 하면 바로 현재 탭에서 로그인 버튼을 누르면 이동하는 페이지로 바뀌게됩니다.

    하지만 셀레니움을 배우는 입장이므로 다양한 방법을 사용해 보겠습니다.

    새 탭으로 열기를 시행해보겠습니다.

    사실 새탭 열기로 하지 않아도 전혀 무방합니다. 건너 띄어도 무방합니다.

     

     

    e. 셀레니움 새 탭 열기

    login_button = driver.find_element_by_class_name("buttonLogin")
    login_button.send_keys(Keys.CONTROL + "\n") # 새 탭으로 열기

    login_button.send_keys(Keys.CONTROL + "\n") key를 Ctrl + \n을 보내주면 새 탭으로 열리게됩니다.

     

    f. 셀레니움 다음 탭 선택

    새 탭으로 열었을 경우에는 웹 드라이버 하나에서 여러개의 탭이 생성된 것입니다.

    따라서, 제어할 tap을 선택해야합니다.

    chrome_taps = driver.window_handles
    chrome_taps
    
    >>>
    ['CDwindow-5313D10AD7A8C5CA3923943C5FDA60EE',
     'CDwindow-655E6A7B0EA39AE233DF8F997515FEBC']

    window_handles를 통해서 2개의 탭이 열려있는 것을 확인할 수 있습니다.

    driver.switch_to_window(chrome_taps[1])

    두 번째 탭을 선택해줍니다.

    그러면 로그인 페이지를 눌렀을 때의 화면

    아래 화면 쪽을 제어하게 되는 것입니다.

    혹시나 아직 A-ha 사이트 추천인 입력을 하지 않으셨다면 A62E5E 추천인 코드 부탁드립니다.

    초대 받은 사람과 초대한 사람 모두 120 AHT를 얻을 수 있습니다.

     

    g. 카카오로 시작하기

    로그인을 하기 위해서 카카오로 시작하기 버튼을 눌러보겠습니다.

    위에서 했던 것과 마찬가지로 Ctrl+Shift+C 를 눌러서 해당 버튼을 선택 및 실행하기 위해 element를 찾습니다.

     

    h. css_selector 경로 찾기

    이번에는 css_selector를 통해서 찾아보았습니다.

    원하는 위치에서 우클릭 -> Copy -> Copy selector 를 통해서 css selector를 통한 해당 element의 위치를 찾을 수 있습니다.

    driver.find_element_by_css_selector('#__layout > div > main > div > div > div > button').click()
    driver.implicitly_wait(1)

     

    i. wait 시간 주는 이유

    click 과 같은 웹에서 실행되는 부분에서는 어느정도 wait 시간을 주는 것이 좋습니다.

    네트워크 환경이나 컴퓨터 성능이 좋지 않은 경우 넉넉한 wait 시간을 주는 것을 권장합니다.

    그렇지 않으면 아직 완전히 페이지가 나오지 않았는데 다음 명령을 실행하게되면서 에러가 발생될 수 있습니다.

     

    혹시나 아직 A-ha 사이트 추천인 입력을 하지 않으셨다면 A62E5E 추천인 코드 부탁드립니다.

    초대 받은 사람과 초대한 사람 모두 120 AHT를 얻을 수 있습니다.

     

    j. 아이디, 비밀번호 입력하기

    driver.find_element_by_css_selector('#id_email_2').send_keys('{아이디}')
    driver.find_element_by_css_selector('#id_password_3').send_keys('{비밀번호}')

    아이디와 비밀번호를 입력해보겠습니다.

    아이디와 비밀번호를 입력할 곳을 find를 통해서 찾습니다.

    이후 해당 위치에 send_keys를 사용하여 아이디비밀번호를 입력할 수 있습니다.

    이렇게 아이디와 비밀번호가 입력되었다면 완성

     

    k. 로그인 완료

    driver.find_element_by_css_selector('#login-form > fieldset > div.wrap_btn > button.btn_g.btn_confirm.submit').click() 

    이제 로그인 버튼 위치를 찾고 click을 수행해주세요.

    그러면 다시 아하 메인 홈페이지로 이동하게됩니다.

     

     

     

    l. 출석 페이지로 이동하기

    여기까지 진행하셨다면 다음 진행사항들을 쉽게 따라하실 수 있을 것입니다.

    driver.find_element_by_css_selector('#__layout > div > div > div.-pt.page > div > section.homeButtons.homeButtons > div:nth-child(1) > a > button > span').click()
    driver.implicitly_wait(1)

    출석스탬프 버튼의 위치를 찾고 클릭합니다.

     

     

    이제 출석체크하기 버튼의 위치를 찾고 클릭합니다.

    driver.find_element_by_css_selector('#__layout > div > div > section > div:nth-child(3) > div.tokens-body.container > div > div > header > button').click()
    driver.implicitly_wait(1)

     

     

    driver.find_element_by_css_selector('#__layout > div > div > span > div > div > div.dialog-footer > button').click()
    driver.implicitly_wait(1)

    확인버튼 위치를 찾아 클릭해줍니다.

     

    그러면 출석체크가 완료된 것을 확인할 수 있습니다.

     

    m. 자동 출석체크 완성

    이렇게 해서 차근차근 출석체크 도장을 쌓아가시면 됩니다.

    AHT 코인을 차근차근 모와봅시다~

    파이썬 selenium도 배우고 AHT코인도 얻을 수 있고 1석 2조

     

    n. 크롬 드라이버 종료

    여기까지 모든 프로세스가 끝났다면 driver를 종료해줍니다.

    driver.quit()

    종료하지 않고 그냥 크롬 창을 종료하면, python과 driver는 종료되지 않고 리소스를 계속 잡아먹고 있습니다. 작업 관리자에서 직접 종료하여 귀찮음을 느끼거나, 그냥 리소스를 잡아먹도록 백그라운드에 계속 드라이버가 켜져있도록 방치하는 것입니다.

    그러므로 그냥 quit 해서 마무리를 깔끔하게 해줍니다.


    2. 주의사항

    % 주의 %

    팝업이나 공지 같은게 떠있으면 해당 프로세스상에서 예외가 발생된 것이므로 진행에 오류가 발생할 수 있습니다.

    1. 팝업은 앞으로 보지않음 설정을 해줍니다.
    2. 처음 가입한 경우 첫 게시글 작성하기와 같은게 계속 뜰 수 있습니다. 그냥 게시글 한번 작성하면 앞으로 발생되지 않으니 게시글을 작성해버립니다.

    추가

    아하 웹사이트에서 나중에 자동 로그인을 막을 수도 있고 제한할 수도 있을 것 같습니다.

    호오옥시나..


    3. 전체 소스코드

    import selenium
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    
    url_path = "https://www.a-ha.io/"
    
    driver = webdriver.Chrome()
    driver.implicitly_wait(3)
    driver.get(url_path)
    driver.maximize_window()
    
    login_button = driver.find_element_by_class_name("buttonLogin")
    login_button.send_keys(Keys.CONTROL + "\n")
    
    chrome_taps = driver.window_handles
    driver.switch_to_window(chrome_taps[1])
    
    driver.find_element_by_css_selector('#__layout > div > main > div > div > div > button').click()
    driver.implicitly_wait(1)
    
    driver.find_element_by_css_selector('#id_email_2').send_keys('dddddd@naver.com')
    driver.find_element_by_css_selector('#id_password_3').send_keys('rrrrrrr')
    
    driver.find_element_by_css_selector('#login-form > fieldset > div.wrap_btn > button.btn_g.btn_confirm.submit').click() 
    driver.implicitly_wait(3)
    
    driver.find_element_by_css_selector('#__layout > div > div > div.-pt.page > div > section.homeButtons.homeButtons > div:nth-child(1) > a > button > span').click()
    driver.implicitly_wait(3)
    
    driver.find_element_by_css_selector('#__layout > div > div > section > div:nth-child(3) > div.tokens-body.container > div > div > header > button').click()
    driver.implicitly_wait(3)
    
    driver.find_element_by_css_selector('#__layout > div > div > span > div > div > div.dialog-footer > button').click()
    driver.implicitly_wait(3)
    
    driver.quit()

     

    혹시나 아직 A-ha 사이트 추천인 입력을 하지 않으셨다면 A62E5E 추천인 코드 부탁드립니다.

    초대 받은 사람과 초대한 사람 모두 120 AHT를 얻을 수 있습니다.

     

    [파이썬] Selenium Aha 자동 출석체크 프로그램 만들기 - (1) - Aha 소개

    [파이썬] Selenium 셀레니움 설치하기 / 크롬 드라이버 설치하기

     

     

    반응형

    관련된 글 보기

    Comments