[Selenium] 자동화 브라우져에 사용자 환경 불러오기

Zective
4 min readFeb 13, 2019

--

부제 : [Selenium] 네이버 로그인시 캡챠 패스

  • 사실 부제 때문에 작성했습니다. ㄷㄷㄷㄷ
  • 크롬(Chromium) 브라우져를 기준으로 작성합니다.
  • 파이썬(Python) 기준으로 작성합니다.

기존 사용자가 웹 서핑시 사용하는 브라우져에는 각종 플러그인과 각종 확장 프로그램들이 설치되어 있고 여러 사이트에 대한 로그인 정보도 저장(저장을 승인했을 경우)되어 있습니다.

하지만 Selenium(이하 셀레)으로 브라우져를 띄울 땐 정말 깨끗한 상태의 기본 브라우져를 띄웁니다. 평소 손쉽게 사용하던 플러그인, 확장 프로그램, 저장된 로그인 정보 하나 없습니다. 사실 사람이 사용할 게 아니라 자동화를 위한 브라우져이다보니 그게 정상입니다. 예를 들어 로그인 정보가 저장된 페이지에 접속 했을 때 평소 사용하던 브라우져에선 로그인 폼에 각종 정보 값이 자동으로 입력되지만 셀레로 띄울 땐 빈 칸이 계속 유지됩니다.
(셀레 : 난 네 로그인 정보를 모른다고.. 회원이긴 해?)

거기에 더해 셀레로 띄운 브라우져에선 손수 타이핑하여 로그인 정보를 바르게 입력했더라도 다음 화면에서 반드시 캡챠가 나타납니다. 진짜 환장할 노릇이죠. 지금도 많은 분들이 이거 때문에 스트레스 받고 계실거라 생각됩니다. (반대로 평소 사용하던 브라우져에선 로그인 폼에 저장된 값이 자동으로 입력되어지고 심지어 로그인 버튼 클릭 한 번으로 캡챠 없이 완료됩니다. 으아아아아닛!)

이 부분에 착안하여 셀레로 브라우져를 띄우기 전, 옵션 하나를 추가하여 사용자 환경을 덮어씌운 후 띄우도록 했습니다.

from selenium import webdriveroptions = webdriver.ChromeOptions()
options.add_argument('disable-infobars')
options.add_argument("User-Agent={유저 에이전트}")
options.add_argument('--user-data-dir={사용자 환경설정 경로}') # 추가driver = webdriver.Remote('http://localhost:4444/wd/hub', options.to_capabilities()) # 셀레 서버를 Standalone 방식으로 가동driver.get('https://nid.naver.com/nidlogin.login')
driver.implicitly_wait(random.randrange(10, 16)) # 크롬에 저장된 로그인 정보 가져오는 시간 벌어주는 용도 (10 ~ 15초)
driver.find_element_by_css_selector("#frmNIDLogin > fieldset > input").click()

결과는 대성공입니다. 셀레로 띄웠지만 사용자 환경을 그대로 가져오기 때문에 일반 브라우져로 인식하여 로그인시 캡챠가 나타나지 않습니다. 위 예제 코드에서 유저 에이전트와 사용자 환경설정 경로만 수정하시고 실행하시면 테스트 화면을 보실 수 있을 겁니다.

  • (크롬 브라우져 — user-data-dir 경로 알아보기)
  • 브라우져에 저장된 로그인 정보를 가지고도 로그인이 가능하기 때문에 굳이 코드 내에 로그인 정보를 코딩하지 않아도 됩니다. 단, 저장된 로그인 정보가 2건 이상일 경우에는 코드 내에 아이디/비밀번호 입력하는 부분이 있어야 합니다. (send_key(‘값’) 사용)

이 방식도 차단하게 되면 어쩌나 걱정도 되면서도 다른 한 편으론 이 방식이 막히면 일반 브라우져로 로그인할 때도 막힌다고 봐야할 것 같습니다. 근데 뭐 사실 네이버 측에서 막자고 맘만 먹으면 일반 브라우져엔 피해없이 셀레쪽만 또 막을수도 있겠지요. -_-;

일단 그 전까진 이 방식이 가장 편하게 자동화 작업을 유지할 수 있는 방법이 될 것 같습니다.

감사합니다.

--

--