본문 바로가기
파이썬

파이썬으로 구글OTP 인증번호 자동화 해결방법 총정리

by 야삐미얼 2023. 6. 18.

안녕하세요?

오늘같은 밤이면 후회할지도 모르는, 야삐미얼의 티스토리입니다.

 

요새도 회사 업무가 바빠 파이썬 관련 포스팅을 좀 놓은 감이 있어서,

셀레니움 자동화 시 구글OTP 부분을 어떻게 해결했는지 내용 정리해보려고 합니다.

혹시 로그인 부분에서 구글OTP 로 인해 막히신 분들이 있다면 조금이나마 도움되시길 바랍니다.


파이썬 구글OTP 자동화 해결방법


구글 OTP 어플리케이션 설치

먼저 구글OTP를 사용하기 위해선 플레이스토어에서 구글OTP 앱을 설치하셔야 합니다.


Google OTP app

 

플레이스토어에서 무료로 설치가 가능하며 필요하신 분들은 아래 링크로 설치하시길 바랍니다.


구글OTP 설치 바로가기

 

이렇게 구글OTP를 스마트폰에 설치해서 우리가 접근을 원하는 사이트에 구글OTP의 인증번호를 입력해서 접근하는 것이죠. 투팩터 시스템으로 "2차 보안을 통해 사용자의 정보" 를 조금 더 지킬 수 있게 됩니다.

 

다만 다들 아시다시피 2차 보안 인증은 여간 번거로운게 아니죠.

그리고 웹 자동화를 할 때의 하나의 또 큰 걸림돌이 됩니다.


내 계정 연결 후 사용할 OTP 연동

스마트폰에 앱을 설치했다면 실행해서 우리가 사용할 계정을 연동해야 합니다.


구글 OTP 계정 연동

 

계정을 연동한 후에는 사용할 OTP를 등록할 수 있고, QR코드스캔과 직접등록이 있는데 둘다 상관없으니 우리가 사용할 사이트에서 진행하시면 됩니다.

 

QR코드 스캔을 통해 처음으로 사용할 사이트의 OTP를 등록했다면 "딱 1번 최초로 하단에 설정 키 값" 을 확인하실 수 있습니다.


구글OTP 제공된 키

 

이 설정 키 값은 다시 확인할 수 없는 부분이니 "꼭 캡쳐나 기록" 을 해두셔야 합니다!

파이썬에서도 이 키 값을 사용해서 우리의 OTP 인증번호를 가져오기 때문에 매우 중요합니다.

 

 


구글OTP 크롬 확장프로그램

번외로 스마트폰을 계속 확인하며 구글OTP 인증하는 방법은 매우 번거롭기 때문에 "PC에서 한방에 인증번호를 확인" 할 수 있는 방법이 있습니다.

 

바로 크롬 확장프로그램을 통해 버튼 클릭 한번으로 우리의 구글OTP 인증번호를 확인할 수 있는데요.

자세한 사용법은 아래와 같습니다.

 

1) authenticator (인증 도구) 확장프로그램 설치


autheniticator 크롬확장프로그램 설치하기

 

2) 크롬 우측 상단에서 authenticator 확장프로그램 클릭

 

3) [-] QR코드 스캔 버튼으로 우리가 원하는 사이트의 QR코드 캡처

 

4) QR코드가 인식되면 실시간 인증번호가 노출됨


크롬에서 구글OTP 바로보는 방법

 

매번 귀찮게 스마트폰으로 확인 할 필요 없이 크롬에서 바로바로 확인이 가능하니 꽤나 편리하죠.

또한 해당 OTP 코드를 클릭하면 자동으로 복사가 되는 기능도 있으니 여러모로 유용하니 도움받으시길 바랍니다.

 


파이썬으로 구글OTP 인증번호 가져오기

그럼 다시 본론으로 돌아가서 이제 파이썬으로 내 구글OTP 인증번호를 어떻게 가져올지 알아보겠습니다.

바로 onetimepass 라이브러리를 사용하면 간단하게 가져올 수 있습니다.

 

[참고] onetimepass 사이트

 

 

onetimepass

Module for generating and validating HOTP and TOTP tokens

pypi.org

 

파이썬 터미널에서 pip install onetimepass 로 간단하게 설치 후 진행하시면 됩니다.


pip install onetimepass

 

이후 onetimepass 모듈을 임폴트 해주고 아까 기록해둔 내 설정 키값만 해당 코드에 입력해주기만 하면 됩니다.


import onetimepass as otp


secretKey = "내 설정 키 값"
# 구글OTP 내 설정 키 

def get_code():
rt = otp.get_totp(secretKey)
print(rt)

# 함수 호출
code = get_code()

 

아까 기록해둔 설정 키를 입력만 하고, get_totp 함수에 넣어주기만 하면 실시간으로 내 구글OTP 인증번호를 가져올 수 있습니다. 이게 정확하게 내 코드를 가져왔는데 한번 실행해서 비교해볼까요?


파이썬 코드와 인증도구 값 일치 확인

 

정확하게 일치하는 걸 보니 "정상적으로 잘 동작" 하는 것 같습니다.

참 파이썬은 보면 볼수록 신기하네요.

 

이렇게 가져온 인증번호를 셀레니움을 통해 입력만 해준다면 구글OTP 인증도 쉽게 통과하는 자동화를 만들 수 있게 되는거죠.


import onetimepass as otp

secretKey = "내 설정 키 값"
# 구글OTP 내 설정 키값

def get_code():
rt = otp.get_totp(secretKey)
# 내 구글OTP 인증번호를 rt 변수에 저장

driver = webdriver.Chrome(ChromeDriverManager().install())
otptext = driver.find_element_by_name("otpCode")
otptext.send_keys(rt)
# 구글OTP 입력란에 인증번호 입력

# 함수 호출
code = get_code()

 

예제로 "otpCode" 라는 부분에 우리가 구글OTP 인증번호를 가져온 값을 "send_keys" 를 통해 입력 해주면서 해결을 했습니다. 구글OTP 2차 인증이 있더라도 이제는 로그인 부분에 대한 자동화가 문제 없이 가능하게 되었습니다. 만약 여러개의 시크릿키로 여러개의 인증번호가 필요하다면 리스트 형식으로 전달해서 뽑아버리면 될 듯 합니다.

 


마무리

셀레니움 자동화는 막으려는 자와 뚫으려는 자와의 끊임없는 싸움인 것 같습니다. 완전한 자동화를 위해서는 넘어야할 산이 너무 많은 것 같고, 계속해서 만들 때마다 새로운 산을 만나는데요.

 

이러한 산들을 어떻게 넘으며 해결할지 생각하며 실제로 해결이 되었을 때의 뿌듯함은 정말 말로 표현할 수 없는 것 같습니다. 오늘도 웹 자동화를 하시는 분들의 성장을 응원하며 다음번 포스팅에서는 구글 리캡챠 인증을 해결한 꿀팁을 소개해드리겠습니다.

 

오늘도 읽어주셔서 감사합니다.

- 야삐미얼 -

댓글