본문 바로가기

Programing/Python

[Python-Selenium -Chrome-RPA] 웹 사이트 자동 로그인(1) - 쿠키 얻기

반응형

2023.02.06 - [Programing/Python] - [Python-Selenium-Chrome-RPA] 웹 사이트 자동 로그인(2) - 쿠키를 이용한 로그인

 

[Python-Selenium-Chrome-RPA] 웹 사이트 자동 로그인(2) - 쿠키를 이용한 로그인

2023.01.16 - [Programing/Python] - [Python-Selenium -Chrome-RPA] 웹 사이트 자동 로그인(1) - 쿠키 얻기 [Python-Selenium -Chrome-RPA] 웹 사이트 자동 로그인(1) - 쿠키 얻기 웹 크롤링을 하다보면 로그인을 해야만 보이

it-storyit.tistory.com

 

웹 크롤링을 하다보면 로그인을 해야만 보이는 컨텐츠가 있기 마련인데, 셀레니움을 통해 크롬을 조작할 경우 창을 새로 띄울 때마다 로그인을 진행하게되 서버에서 과도한 로그인 횟수로 인해, 매크로 및 비 정상적인 로그인으로 판단해 사용자 확인 등, 매크로를 사용 후 후조치를 해야 할 수 있습니다.

하지만 로그인 쿠키값을 저장하고 로그인 시 바로 쿠키값을 사용한다면, 위와 같은 현상을 방지 할 수 있습니다. 편의성이 올라가는 만큼 보안성은 취약해지므로, 이를 고려하여 사용하시기 권장드립니다.

사용할 라이브러리

  1. selenium
    1. pip install selenium
  2. json

(1~3) webdriver 함수와 By, json를 함수를 import 해줍니다.

(6~7) chromedriver의 경로와 쿠키를 저장할 json 파일명을 변수로 만들어 줍니다.

(10~15) 재사용성의 편의를 위해 클래스 함수를 하나 만들고, 크롬 드라이버를 초기화값으로 지정합니다.

(12~14)는 크롬창을 숨기고, 그래픽 연산을 하지 않는 옵션 값으로, 크롬창을 띄워 진행 과정을 보고 싶다면 코드를 제거 하시기 바랍니다.

(15) 크롬을 지역변수로 담아주는데, GUI 관련 option을 끄고 싶다면 options 파라미터를 삭제하시기 바랍니다.

 

(1~3) 로그인 메소드를 하나 만들고, 로그인에 필요한 “url” 주소, “id”, “password” 값과, “id”, “password” 입력 받는 텍스트 상자 위치, 로그인 버튼의 위치 이렇게 6개의 매개변수 값을 받도록 합니다.

(4) 로그인 url주소로 이동

 

(5) id를 입력받는 텍스트 상자에 id값을 입력

(6) password를 입력받는 텍스트 상자에 password값 입력

(7) 로그인 버튼 클릭

(5~6)에서 사용하는 find_element 찾는 방법은 포스트 끝에 설명드리겠습니다

 

(1) 본격적인 쿠기를 얻기 위한 메소드를 생성해주세요

(2) 로그인 후 얻은 쿠키기를 변수(__cookie)에 담아 줍니다.

(3) cookie를 딕셔너리 구조에 담기 위해 빈 딕셔너리를 만들어주고,

(4~5) for문을 통해 _cookie의 값을 딕셔너리 구조 형식으로 변환해 줍니다.

(6) 쿠키 딕셔너리를 리턴해서 Get_Cookie 클래스 함수를 마무리 해줍니다.

 

 

(1) Get_Cookie 클래스를 활용할 함수를 하나 만들어 주는데, 파라미터로 딕셔너리 값을 받아올 예정입니다.

(2)파라미터를 받아온 딕셔너리를 Get_Cookie클래스 login 메소드에서 사용된 파라미터로 넣어줄 예정이기 때문에 변수에 분배해서 담아줍니다.

 

(4) Get_Cookie 클래스 함수를 불러와 새 변수에 할당하고

(5~7) login 메소드를 불러오고 파라미터에 변수를 할당합니다.

(8~9) get_cookie 메소드를 통해 딕셔너리 형식의 cookie값을 변수에 할당하여 리턴해 줍니다.

 

 

(1) if문을 통해 실행하는 py파일이 main일 경우 실행하도록 해주고

(2~9)로그인시 필요한 파라미터 6개를 만들어줍니다.

(11) 그리고 미리 만들어 놓은 GetCookie 함수에 info변수를 딕셔너리 형태로 전달해주고, 리턴값을 변수에 담아줍니다.

(12~13) 이렇게 얻은 쿠기값을 with open 함수를 이용해 json 파일로 저장합니다.

이제 다음부터 login메소드를 이용하지 않고 쿠키 json 파일을 읽어 로그인을 해주면 됩니다.

 

find_element 찾는 방법

지마켓 로그인 페이지를 예로 설명하겠습니다.

 

1.크롬 실행

2.지마켓 로그인 페이지 접속 후,

3.단축키 F12 누른 후 개발자 도구 실행

 

 

4.요소 선택 아이콘 클릭

 

 

5.찾고자 하는 element를 클릭

 

 

 

6. 선택한 영역의 html 소스 확인(이번 포스팅에서는 id 값을 이용하여 위치를 찾으니 id입력 받난 input의 id값을 찾아 줍니다.(지마켓의 경우 id의 id값은 id, password의 id 값은 pwd로 확인되네요)

 

 

7.다음으로 로그인 버튼 위치를 찾아줄 텐데 버튼의 경우 따로 입력을 받는 기능이 아니기 때문에 id값를 쓰지 않습니다. 그래서 xpath로 고유 위치를 찾아 줘야 하는데, 4번때처럼 구성요소 기능을 이용해 로그인 버튼 부분을 클릭해 줍니다.

 

 

 

8. 위스샷 처럼 해당 html소스 영역이 선택되는데, 왼쪽 끝에 보면 ... 으로 된 메뉴가 보일 것 입니다. 메뉴 버튼을 클릭하고 복사 - 전체 Xpath복사 를 클릭하면 xpath 주소값을 가져 올 수 있습니다.

 

이렇게 가져온 값을 작성 하던 코드중 info 값에 입력해주고 실행하면 제대로 로그인 성공 후 cookie.json 파일이 생성되고, 로그인에 사용할 수 있는 cookie값이 추출 된 것을 확인 할 수 있습니다.

 

코드 확인용 스샷 첨부했습니다.

반응형