콘솔워크

[selenium] selenium으로 네이버 로그인 시 영수증 인증화면이 뜨는 경우 본문

프로그래밍/python

[selenium] selenium으로 네이버 로그인 시 영수증 인증화면이 뜨는 경우

이휘재123 2022. 6. 22. 16:59
반응형

다른 사이트에서 하듯이 selenium으로 네이버에 로그인을 시도하려고 하면 아래와 같은 영수증 화면이 뜨게 된다.

아마 네이버쪽에서 기계적인 움직임이나 외부 코드가 개입하는 것을 인식하여 인증화면이 발생하는 것 같다.

현재로써는 영수증 인증을 뚫을 방법이 생각나지 않아서, 아예 영수증 화면을 회피하는 방법, 즉 최대한 사람과 같은 움직임으로 로그인을 시도했더니 로그인에 성공하게 되었다.

 

 

영수증 인증화면이 발생하던 코드

    # 영수증 인증화면이 발생하는 코드
    def login(self, id, pw):
        driver = get_chrome_driver_new(is_scret=True, is_headless=False)
        driver.maximize_window()
        driver.get('https://nid.naver.com/nidlogin.login')
        time.sleep(1)

        try:
            input_id = driver.find_element(By.CSS_SELECTOR, '#id')
            input_id.clear()
            input_id.send_keys(id)

            input_pw = driver.find_element(By.CSS_SELECTOR, '#pw')
            input_pw.clear()
            input_pw.send_keys(pw)

            login_button = driver.find_element(By.CSS_SELECTOR, '.btn_login')
            login_button.click()

        except Exception as e:
            print(f'{id} {pw} 로그인에 실패했습니다.')

        finally:
            time.sleep(1)
            return driver

 

인증화면을 회피한 코드

    # 인증화면을 회피한 코드
    import pyperclip
    
    def login(self, id, pw):
        driver = get_chrome_driver_new(is_scret=True, is_headless=False)
        driver.maximize_window()
        driver.get('https://nid.naver.com/nidlogin.login')
        time.sleep(1)

        try:
            # 일반적으로 진행하려고 해면 영수증 캡차가 나옴, pyperclip을 사용해야 함
            tag_id = driver.find_element(By.NAME, 'id')
            tag_pw = driver.find_element(By.NAME, 'pw')
            tag_id.clear()
            time.sleep(1)

            # id 입력
            tag_id.click()
            pyperclip.copy(id)
            tag_id.send_keys(Keys.CONTROL, 'v')
            time.sleep(1)

            # pw 입력
            tag_pw.click()
            pyperclip.copy(pw)
            tag_pw.send_keys(Keys.CONTROL, 'v')
            time.sleep(1)

            # 로그인 상태 유지 선택
            click_tag_by_text(driver, 'label', '로그인 상태 유지')
            time.sleep(1)

            # 로그인 버튼을 클릭합니다
            login_btn = driver.find_element(By.ID, 'log.login')
            login_btn.click()
            time.sleep(2)

        except Exception as e:
            print(f'{id} {pw} 로그인에 실패했습니다.')

        finally:
            time.sleep(2)

pyperclip 을 이용하여 클립보드에 id pw를 저장하고 그 내용을 각 입력창에 붙여넣기를 하는 방향으로 최대한 사람과 같은 움직임을 줬더니 해결되었다.

반응형