티스토리 뷰


1. 셀레니움 만으로 로그인하기

2. 장고 템플릿을 통해 입력받아 로그인하기

3. 로그인 결과창에 맞는 정보 크롤링


그래서 왜 셀레니움인가?

 

잘 알려진 크롤링, 스크래핑 관련 웹 드라이버는 beautifulSoup4와 셀레니움이 있다.

내가 느낀 이 둘의 큰 특징은

 

beautifulSoup4: 아주 상당한 속도!! 하지만 오직 정적 데이터(html 등 데이터가 정적으로 유지되는)만 크롤링 가능.

selenium: 아주 느린 속도... 하지만 자바스크립트 등 휙휙 변하는 동적 데이터도 크롤링이 가능하다!

 

그래서 로그인만 bs4를 사용하고 그 이후의 크롤링은 selenium으로 이용할 수 없을까 생각도 해 보았으나, 그러한 예시는 어디에도 없었다.

 

때문에 어쩔 수 없이 selenium을 사용하게 됐다. 로그인 만 bs4와 selenium 둘 다 이용해 봤는데 속도 차이에 눈물이 흘렀다.


해당 웹사이트 분석

 

셀레니움은 bs4와는 달리 직접 입력하는 느낌이다. 때문에, 어떤 태그에 아이디와 비밀번호를 넣어야 할 지 알아야 한다.

아래의 사진처럼 크롬 개발자도구를 켜 커서를 올려놓아 알아보자.

각각 아이디와 비밀번호 태그를 찾는다.

위와 같이, 아이디는 #userId에, 비밀번호는 #password에서 받는다.

 

입력이 끝나면 아래의 로그인버튼을 눌러주어야 한다.

버튼을 살펴보자.

button 태그다. 하지만 정확한 버튼 태그의 path를 추출하기 위해 개발자 도구를 열자.

해당 버튼 태그가 있는 곳에 오른쪽 버튼을 눌러 xpath를 복사해 이용하면 된다.

 

본격적으로 셀레니움을 사용해보자.

새 파이썬 파일을 만들어 장고템플릿과 이용하기 전에 실험해보자.


셀레니움 사용하기

 

설치는 아래의 순서로 진행한다.

만약 가상환경에서 다운받고자 한다면 가상환경에 진입한 후에 설치하도록 하자.

pip install selenium

만일 pip을 업그레이드 하라는 경고가 뜨면 아래와 같이 입력한다.

pip install --upgrade pip

설치를 완료했으면 파이썬 파일에서 셀레니움 내 webdriver를 import 시킨다.

셀레니움은 원격으로 조종할 가상의 공간이 필요하다.

그 공간은 웹브라우저별로 존재하는데, 크롬웹드라이버를 설치하도록 하자.

 

chromedriver.chromium.org/downloads

 

Downloads - ChromeDriver - WebDriver for Chrome

WebDriver for Chrome

chromedriver.chromium.org

다운을 받고, 아래와 같이 입력한다.

여기서 네번째 줄의 headless는 직접 크롬창에서 셀레니움이 어떻게 작동되는지 굳이 창을 열지 않고 싶을 때 이용한다.

직접 과정을 눈으로 확인하고 싶다면 헤드리스를 꺼두자. 

본인은 속도증진을 위해 최종개발 후 헤드리스 줄을 추가한다.

 

그리고 이어서 크롬드라이버와 관련한 코드를 넣어준다.

6번째 줄은 본인 컴퓨터에 다운받았던 크롬드라이버의 위치를 넣어준다. 길게 적는 것은 가독성에 좋지 않으므로, chromedriver라는 변수에 넣어준다.

7번째 줄로 본격적으로 크롬드라이버를 사용하게 된다.

 

이제 로그인하려는 웹사이트를 불러와보자.

driver.get('로그인 화면이 있는 페이지 url')

그리고 아이디와 비밀번호를 아래처럼 넣어보자.

실행을 시켰는데 아래와 같은 에러가 발생하면 맞는 버전의 크롬 드라이버를 다운받아 주면 된다.

실행시키면 크롬 창이 뜨고 자동으로 아이디와 비밀번호가 입력이 될 것이다.

크롬 창이 뜨지 않았다면 headless 코드가 포함되었는지 확인해보자.

 

 

그리고 아래와 같이 적는다.

driver.find_element_by_xpath('/html/body/div/form/div/div/div[1]/dl/dd[3]/button').click()

.click()은 자동으로 클릭하게 해 준다.

 

실행을 시키면 자동으로 로그인이 되는 모습을 볼 수 있다.


다음에는 장고 템플릿에 아이디와 비밀번호를 입력 받아 로그인할 수 있게 만들어 보겠다!


참고:

selenium-python.readthedocs.io/getting-started.html

반응형
댓글