웹 자동화를 구현하다 보면 CAPTCHA라던가 2채널 인증(Two Factor Authentication
) 등 매우 번거로운 요소들이 존재한다. Selenium의 공식 문서에도 CAPTCHA와 2채널 인증 관련된 내용이 명시되어 있는데 아래와 같이 안내되고 있다.
CAPTCHA
Two Factor Authentication
가장 좋은 방법은 테스트 환경 또는 특정 IP에 대한 화이트리스트 등록 등을 통해 이러한 요소들이 자동화 환경에서 노출되지 않도록 조치하는 것이지만 현실은 녹록지 않다. 늘 그렇듯이 사규 또는 보안상의 문제, 권한과 관련된 문제 등 테스트 환경을 의도한 대로 설정하는 것이 불가능한 상황들도 있을 것이다. 내가 그러했고 2채널 인증을 우회하기 위해 방법을 찾아보았다.
구글링해보니 OTP 생성 시 발급되는 시크릿 키를 알면 pyotp
라이브러리를 사용하여 OTP 6자리 숫자를 얻어올 수 있다고 하더라.
따라서 아래와 같이 간단한 코드를 작성해서 테스트보았는데 정상적으로 OTP 정보를 얻어올 수 있었고 후크로 만들어 자동화 테스트에 활용할 수 있었다.
from pyotp import *
key_list = {
"kr_taekyeong" : "ADBCDEFGHIJKLM", # 테스트 계정 A의 OTP 시크릿 키
"sg_taekyeong" : "LOPQRSTUVWXYZ" # 테스트 계정 B의 OTP 시크릿 키
}
for key, value in key_list.items():
totp = TOTP(value)
token = totp.now()
print(f"{key} : ", token)
---
kr_taekyeong : 456 912
sg_taekyeong : 123 456