셀레니움 활용한 웹사이트 자동 로그인
서 론
이번 글에서는 python selenium 라이브러리를 활용해 웹사이트 자동 로그인을 구현해 보겠습니다.
selenium 모듈은 많은 기능이 있으며, 잘 활용한다면 웹사이트 조작에 여러가지를 자동화 할 수 있어요
제가 시도해 볼 대상 사이트는 세종시에 있는 "국립세종도서관" 홈페이지 입니다.
왜 도서관 홈페이지냐구요?
현재 코로나-19로 인해 사전 방문 예약으로 운영되고 있으며, 하루 400명 제한된 인원만 받고 있어요.
도서관 가서 빌리고 싶은 책이 있는데 사전 방문 예약에 실패해 갈 수가 없다면 너무 속상하지 않나요?
저는 지난번에 사전예약방문이 된 줄 알고 도서관까지 열심히 갔는데... 예약이 안되어 있었더라고요...
할 수 없이 도서관 앞에서 20여분 새로고침 신공을 했답니다...
우리는 개발자니까 자동로그인과 사전방문예약 신청까지 바로~! 기술 드러가 보자구요.
본 론
셀레니움 설치 그리고 크롬 드라이버 설치 등 환경설정에 대해서는 넘어가겠습니다.
$ pip install selenium
Homebrew 를 통해 크롬 드라이버를 설치 할 수 있어요.
$ brew install chromedriver
국립세종도서관 로그인 화면에서 아이디, 비밀번호 그리고 로그인 버튼에 대한 각 객체 정보를 얻어야 합니다.
크롬 같은 경우 [보기] - [개발자 정보] - [개발자 도구] 를 누르면 개발자 도구 화면이 뜹니다.
우측에 하나의 코드 화면이 보이게 되는데요. 여기서 간단하게 "아이디" 검색하면 로그인 화면에 대한 객체 정보를 확인 할 수 있어요.
여기서 필요한 태그값 정보는 바로 "id" 입니다.
로그인 아이디에서는 id="u_id" 비밀번호에서는 id="pword" 해당하는 태그값 정보를 얻을 수 있어요
# 로그인 아이디 객체정보
<li class="login divDp">
<input type="text" id="u_id" title="" name="sUserId" value="" placeholder="아이디">
</li>
# 로그인 비밀번호 객체정보
<li class="login divDp">
<div class="login divDp">
<input type="password" id="pword" title="" value="" name="sPassword" placeholder="비밀번호">
</div>
</li>
로그인 버튼의 경우 XPath를 통해 접근을 해보겠습니다.
따라서 마우스를 코드에서 우클릭 한 후 Copy XPath를 합니다.
# 로그인 버튼 객체정보
<li class="divDp">
<input class="btn-login1" type="button" value="로그인" onclick="formLogin(); return false;">
</li>
소스코드
import getpass
from selenium import webdriver
'''
국립세종도서관 자동로그인
'''
options = webdriver.ChromeOptions()
# headless 옵션 설정 : 개발환경이 리눅스라면 아래 두가지는 포함
options.add_argument('headless')
options.add_argument("no-sandbox")
# 브라우저 사이즈 : 현재 창을 열지 않는 방식으로 구현
# options.add_argument('window-size=800,600')
user_id = input('아이디를 입력하세요: ')
user_pw = getpass.getpass('비밀번호를 입력하세요: ')
# 드라이버 위치 경로 입력
driver = webdriver.Chrome()
# url을 이용하여 브라우저로 접속
driver.get('https://sejong.nl.go.kr/html/c7/c701.jsp')
# 대기시간 부여
driver.implicitly_wait(3)
driver.find_element_by_id('u_id').send_keys(user_id)
driver.find_element_by_id('pword').send_keys(user_pw)
driver.find_element_by_xpath('//*[@id="contentDrt"]/div[1]/div/form[4]/div/div/div[1]/div[2]/ul/li[4]/input').click()
# 로그인 된 화면 캡처
driver.get_screenshot_as_file('capture.png')
# 대기시간 부여
driver.implicitly_wait(5)
driver.quit()
이상. 끝.
'SW개발 > python' 카테고리의 다른 글
[python] 비밀번호 입력 기능 (0) | 2021.06.22 |
---|---|
[python] selenium 활용한 웹사이트 동작제어 실행 (4) | 2021.06.21 |
[python] datetime 날짜,시간을 다루는 유용한 방법들 (0) | 2021.05.02 |
[python] OCR 테스트 - 카카오 kakao 비전 OCR API (1) (1) | 2021.01.09 |
[python] datetime 날짜 계산 - month (0) | 2021.01.05 |