[도서 정보 자동 입력 프로그램] 1. Seleinium 자동 로그인
자동화가 필요한 대략적인 작업 구조는 이러하다.
1. 알라딘 판매자 로그인
2. Yes24로 입력할 도서 정보(ISBN, 도서명, 가격, 상태 등) 추출
3. Yes24 판매자 로그인
4. 도서 정보 입력 후 등록
우선 1번과 3번에서 필요한 자동 로그인 기능부터 구현해보자.
파이썬으로 웹페이지 자동 로그인을 하기 위해서는 주로 Selenium 라이브러리를 사용한다.
나 같은 초짜일 수록 코딩의 9할은 결국 복붙인것 같다.
Chat GPT가 활성화된 요즘엔 특히 더욱 그러하다.
구글링 또는 Chat GPT로 쉽게 Selenium 자동 로그인 코드를 검색해서 아래와 같이 적용해보았다.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
# 크롬 브라우저 옵션 설정
options = Options()
options.add_argument("---start-maximized") # 창크기 최대
options.add_experimental_option("detach", True) # 브라우저 꺼짐 방지 코드
# 페이지 오픈
driver = webdriver.Chrome(options=options)
driver.get('웹페이지 주소') # 웹페이지 주소로 이동
driver.implicitly_wait(10) # 화면이 로딩될때까지 최대 10초 대기
# 로그인
driver.find_element(By.XPATH,'ID입력창 XPATH').send_keys('아이디') #아이디 입력
driver.find_element(By.XPATH,'비밀번호 입력창 XPATH').send_keys('비번') #비번입력
driver.find_element(By.XPATH,'로그인 버튼 XPATH').click() #로그인버튼 클릭
특히 좋은점은 Selenium에서 기본적으로 사용하는 Chrome Driver를 몇년 전만해도 일일히 exe파일을 경로폴더에 다운받았어야했는데, Selenium이 버전업이 되면서 자체적으로 ChromeDriver를 다운받도록 업데이트되면서 번거로운 절차가 사라졌다.
구글링이나 유튜브에서 예전 Selenium관련 코드를 복붙하는 경우 유의해야 할것 같다.
사족이지만, Chat GPT가 나온 뒤로는 느낌상 코딩관련 강의나 포스트가 많이 줄어든 느낌이다. 그도 그럴것이 웬만한 코딩관련 궁금증은 구글링하는 것보다 Chat GPT에 질문하는 것이 훨씬 더 빠르고 정확하다. GPT 특성상 코딩 관련해서는 자세하게 물을 수록 답변의 정확도가 굉장히 올라가는 것 같다. 덕분에 실력이 미천해도 고민할 필요없이 막히는 부분마다 Chat GPT의 보조로 쉽게쉽게 코딩할 수 있는 시대가 되었다.
아무튼, 위 코드를 기준으로 알라딘과 Yes24 각각 자동로그인을 시도했다.
🤔 그런데, 문제가 생겼다.
Yes24는 아무런 문제 없이 로그인이 가능하다. 그런데 알라딘은 무슨 수를 써도 로그인이 되지 않는다. 직접 브라우저를 켜고 로그인을 할때는 문제가 없으나, 파이썬으로 자동화하여 로그인버튼을 클릭하면 하얀화면 이후에 진행이 되지 않는다.원인을 찾아보던 중
알라딘이 크롤링을 통한 로그인 접근을 막아놨다는것을 알게 됐다.
웹사이트에 대한 크롤러 등 자동화된 로봇의 접근에 대한 가이드라인은 robots.txt 파일로 확인할 수 있다.
알라딘의 경우 http://www.aladin.co.kr/robots.txt 주소로 확인이 가능한데
/login/ 부분이 Disallow인 것을 확인할 수 있다.
판매자 페이지에 접근하지 못하면 도서 정보 수집에 어려움이 있어 난감했다.
하지만 어쩌겠는가. 억지로 뚫는 방법이 어딘가 있을지 모르겠으나 사이트의 가이드를 무시할수도 없는 노릇이다.
그나마 정보를 입력해야하는 Yes24가 로그인 제한을 두지 않아서 다행이다.
그리하여 처음 생각했던 작업 구조 1, 2번을 수정하기로 했다.
1. 로그인이 필요 없는 알라딘 중고서점 페이지로 이동
2. 웹페이지에서 입력할 도서 정보(ISBN, 도서명, 가격, 상태 등) 추출
3. Yes24 판매자 로그인
4. 도서 정보 입력 후 등록
모든 것은 결국 부딪혀봐야 아는 법이다. 계속해서 시행착오를 겪으며 하나씩 풀어나가야한다.
기본 페이지에서 크롤링하는 것은 다음 포스팅에서...
추가적으로, (feat. 소스코드 민감정보 보안처리)
열심히 코딩하고서 테스트를 위해 아버지 서점으로 파일을 복붙하려던 중 갑자기 의구심이 들었다.
# 로그인
driver.find_element(By.XPATH,'ID입력창 XPATH').send_keys('아이디') #아이디 입력
driver.find_element(By.XPATH,'비밀번호 입력창 XPATH').send_keys('비번') #비번입력
driver.find_element(By.XPATH,'로그인 버튼 XPATH').click() #로그인버튼 클릭
민감한 아이디와 비밀번호를 저렇게 하드코딩해도 괜찮을까?
아버지만 쓰실 프로그램이긴하지만 행여나 소스코드가 유출된다면.....😱
그래서 코드에 있는 민감정보를 보안처리할 수 있는 방법을 구글링해보았다.
암호화 등등 여러가지 방법이 있었는데, 공개 배포용 프로그램이 아닌 이상 지나치게 복잡한 보안방식은 필요 없을듯하여
환경변수를 이용한 방법을 쓰기로했다.
정확힌 모르겠지만 대충 검색해보니 환경변수란 파이썬 파일 내부적으로 사용하는 변수가 아니라 윈도우 등 OS환경 전체범위에서 사용가능한 변수인것 같다.
즉, 민감한 아이디와 비밀번호를 OS의 환경변수로 별도로 등록해두면 소스코드에 환경변수를 불러오도록 코드를 수정하여 아이디와 비밀번호를 그대로 하드코딩할 필요가 없어진다.
설령 소스코드가 유출되더라도 환경변수 정보가 털리지 않는이상 아이디&비번 유출은 없다는 뜻.
파이썬에서 환경변수 관리를 위해 사용하는 라이브러리는 dotenv이다.
설치를 위해서는 터미널에 pip install python-dotenv 를 입력하면 된다.
그리고 준비사항으로 env 파일을 만들어 준다. 어려울것 없고 메모장 같은 프로그램으로 '변수 이름'='변수 값' 형식으로 작성후 .env 확장자로 저장해주면 끝.
나는 아래처럼 입력하고 env.env 파일로 저장했다.
yes24_ID='아이디'
yes24_PW='비밀번호'
그다음 파이썬으로 돌아와서 아래와 같이 코드를 추가해주면 된다.
import os
from dotenv import load_dotenv
load_dotenv("env 파일 위치") #환경변수 load
id = os.getenv("yes24_ID") #아이디 변수 호출
pw = os.getenv('yes24_PW')) #비밀번호 변수 호출
이제 소스코드에 아이디와 비밀번호를 직접 노출하는 일 없이 변수로 사용할 수 있게 되었다.
최종적으로 완성된 코드는 아래와 같다.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import os
from dotenv import load_dotenv
# 크롬 브라우저 옵션 설정
options = Options()
options.add_argument("---start-maximized") # 창크기 최대
options.add_experimental_option("detach", True) # 브라우저 꺼짐 방지 코드
# 페이지 오픈
driver = webdriver.Chrome(options=options)
driver.get('웹페이지 주소') # 웹페이지 주소로 이동
driver.implicitly_wait(10) # 화면이 로딩될때까지 최대 10초 대기
# 로그인
load_dotenv("env파일 주소")
id = os.getenv("ID변수 이름")
pw = os.getenv("PW변수 이름")
driver.find_element(By.XPATH,'ID입력창 XPATH').send_keys(id) #아이디 입력
driver.find_element(By.XPATH,'비밀번호 입력창 XPATH').send_keys(pw) #비번입력
driver.find_element(By.XPATH,'로그인 버튼 XPATH').click() #로그인버튼 클릭
이번 포스팅은 여기까지 😎
다음은 이제 알라딘에 접속해서 입력에 필요한 도서 정보를 크롤링하는 법에 대해 연구해보자.
이전글: [도서 정보 자동 입력 프로그램] 0. Intro - 파이썬 독학 시작
다음글: [도서 입력 프로그램] 2. BeautifulSoup 알라딘 도서 정보 수집
'Project > [Python] 도서 정보 입력 프로그램' 카테고리의 다른 글
[도서 입력 프로그램] 3-3. Selenium 드롭다운 제어 (0) | 2024.05.13 |
---|---|
[도서 입력 프로그램] 3-2. Selenium XPATH 찾기 (0) | 2024.05.09 |
[도서 입력 프로그램] 3-1. Selenium 입력 구조 구상 (0) | 2024.05.04 |
[도서 입력 프로그램] 2. BeautifulSoup 알라딘 도서 정보 수집 (2) | 2024.05.03 |
[도서 입력 프로그램] 0. Intro - 파이썬 독학 시작 (0) | 2024.04.29 |