본문 바로가기

Programming/코딩 짤팁

Selenium 으로 티스토리 자동 로그인

반응형

| Selenium 자동 로그인 구상

작년에 티스토리의 로그인 과정이 카카오계정을 사용하는 것으로 통합되었다. 통합 후 파이썬으로 개발하여 기존에 사용하던 자동로그인 코드가 더이상 유효하지 않은 코드가 되었다. (아래 링크 참조)

 

티스토리 API Access token 자동 발급 받기 업데이트

※ 아래 내용은 티스토리의 카카오계정 통합으로 인해 자동 로그인 사용이 불가능 해져 수동으로 발급 받아야 합니다. (2021. 4. 14) | 발급 프로세스 변경 Implicit 방식에서 Authentication Code 방식으로

strangeronpaleblue.com

하지만 최근 Selenium을 이용해서 개발하는 과정에서 API사용이 아닌 브라우저 동작을 자동화 하면 유효한 로그인 세션을 얻을 수 있지 않을까 하여 아래와 같이 코드를 짜보았다. 개발 과정에서 필요한 라이브러리나 모듈등은 미리 설치가 되었다고 가정하였으며, 만약 설치가 되지 않았을 경우에는"pip install" 명령어로 필요한 라이브러리를 설치하면 된다.

| 필요 라이브러리 & 모듈

코드에서 필요한 라이브러리는 아래와 같다. "time"은 접속과정에서 대기시간을 가지게 하기 위해 추가하였다. 그 외 Selenium을 이용한 접속 과정에서 필요한 라이브러리들을 4개 정도 더 사용하였다. "Service""ChromeDriverManager" 는 나중에 다른 포스팅으로 따로 다루도록 하겠다. 

 

import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

| Comment by Line

먼저 driver를 사용하여 로그인 페이지를 호출해온다. 바로 카카오 로그인 페이지를 호출할 경우에는 티스토리 세션과 맞지 않을 수 있으니 안전하게 가도록 한다.

 

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.implicitly_wait(3)
driver.get('https://www.tistory.com/auth/login')

로그인 페이지로 이동하면 F12로 개발자 도구를 실행하여 카카오 로그인 페이지 호출 버튼의 값을 확인하여 넣어주고, Click 이벤트를 발생시키도록 한다. 태그상에 name으로 지정된 버튼값이 없는 관계로 클래스 기반으로 호출 하도록 한다.

 

driver.find_element(By.CLASS_NAME, 'btn_login.link_kakao_id').click()

이제 카카오 로그인 페이지가 나오게 되는데 위와 같은 방법으로 개발자 도구를 사용하여 다시 ID / 패스워드 레이블과 로그인 버튼에 해당하는 값들을 찾으면 된다. 로그인의 경우 ID / 패스워드 레이블의 경우 name태그가 부여되어 좀 더 쉽게 확인이 가능하다. 확인된 ID / 패스워드 레이블에는 "send_keys"를 호출하여 본인의 카카오 계정 정보를 입력해 준다.

 

driver.find_element(By.NAME, 'email').send_keys('YOUR_ID')
driver.find_element(By.NAME, 'password').send_keys('YOUR_PASSWORD')
driver.find_element(By.CLASS_NAME, 'btn_g.btn_confirm.submit').click()

 | 전체 코드 정리

Selenium을 사용하여 티스토리 자동 로그인 코드는 아래와 같다. 중간중간 대기시간을 갖기 위하여 sleep으로 2~3초씩 딜레이를 넣어주었다.

 

import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager


driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.implicitly_wait(3)
driver.get('https://www.tistory.com/auth/login')

driver.find_element(By.CLASS_NAME, 'btn_login.link_kakao_id').click()
time.sleep(2)

driver.find_element(By.NAME, 'email').send_keys('YOUR_ID')
driver.find_element(By.NAME, 'password').send_keys('YOUR_PASSWORD')
driver.find_element(By.CLASS_NAME, 'btn_g.btn_confirm.submit').click()
time.sleep(2)
반응형