본문 바로가기
Python/Selenium & 크롤링

[python] Selenium을 이용한 티스토리 로그인 & 게시글 자동 작성

by 여비코기 2021. 5. 1.

이번에는 Selenium과 크롬 웹드라이버('chromedriver')를 이용해 자동으로 티스토리에 로그인을 하고, 간단한 게시글을 작성하는 코드를 짜보고자 한다.

 

우선 자신이 사용하고 있는 크롬 버전과 맞는 chromedriver를 다운받아야 한다.

다음 페이지 에서 chromedriver 다운로드가 가능하며, 사용하고 있는 크롬 버전은 "설정 -> chrome 정보"에서 확인 가능하다.

 

※ Chromedriver 다운로드

chromedriver.chromium.org/downloads

 

ChromeDriver - WebDriver for Chrome - Downloads

Current Releases If you are using Chrome version 91, please download ChromeDriver 91.0.4472.19 If you are using Chrome version 90, please download ChromeDriver 90.0.4430.24 If you are using Chrome version 89, please download ChromeDriver 89.0.4389.23 If yo

chromedriver.chromium.org

1. 필요 모듈 import

from selenium import webdriver 
import time

from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.common.keys import Keys

selenium을 설치해주고, 내가 사용할 모듈들을 import 해주었다.

 

그 후 다운로드받은 chromedriver.exe 경로를 지정해주고, selenium이 인식하도록 입력해준다.

implicity_wait을 통해 대기 시간을 지정해 준다

chromedriver = 'C://chromedriver.exe'
driver = webdriver.Chrome(chromedriver)
driver.implicitly_wait(2)

2. 웹사이트 접속

# 티스토리 접속
driver.get('https://www.tistory.com/')

driver.get을 통해 chromedriver가 티스토리 홈페이지에접속할 수 있도록 한다.

또한 웹페이지 요소를 나는 XPATH를 이용하여 이동하고 사용할 것이다. 각 요소들의 XPATH를 얻는 방법은 다음과 같다.

 

1. 티스토리 홈페이지에 접속해 키보드 F12버튼울 눌러 개발자 도구를 활성화 시키면 오른쪽과 같이 창이 뜰 것이다.

 

2. 오른쪽 창의 왼쪽 위 마우스 커서 버튼을 클릭하고, 웹 페이지에 요소에 가져다 대면 위와 같이 요소에 대한 정보가 표출된다

 

3. 요소를 클릭하면 해당 요소에 해당하는 소스코드 위치로 이동한다.

 

4. 오른쪽 클릭을 통해 Copy -> Copy Xpath를 통해 각 요소들의 Xpath를 얻을 수 있다.

3. 티스토리 로그인

# 계정 로그인 버튼 클릭
driver.find_element_by_xpath('//*[@id="kakaoHead"]/div/div[3]/div/a').click()
driver.find_element_by_xpath('//*[@id="cMain"]/div/div/div/a[1]/span[2]').click()
time.sleep(1)

# 로그인
username=driver.find_element_by_xpath('//*[@id="id_email_2"]')
username.send_keys('카카오톡 이메일')

password=driver.find_element_by_xpath('//*[@id="id_password_3"]')
password.send_keys('비밀번호')

time.sleep(1)
driver.find_element_by_xpath('//*[@id="login-form"]/fieldset/div[8]/button[1]').click()

 

티스토리는 카카오톡을 통한 로그인이 가능하기 때문에 나는 카카오톡을 통한 로그인을 진행 하였으며

'카카오톡 이메일'과 '비밀번호'에 자신의 계정 정보를 넣으면 그대로 로그인이 가능하다.

 

코드에서 xpath를 통해 요소를 찾고 그 뒤에 .click()을 붙힘으로써 드라이버가 해당 요소를 클릭하도록 명령할 수 있다.

또한 send_keys를 통해 해당 요소로 내가 입력하고자 하는 값 혹은 텍스트를 입력시킬 수 있다.

 

 

로그인 페이지에서 내 e-mail과 비밀번호가 입력되었다.

4. 게시글 작성

# 글 작성 페이지 이동
driver.find_element_by_xpath('//*[@id="kakaoHead"]/div/div[3]/div/a[2]/img').click()
driver.find_element_by_xpath('//*[@id="kakaoHead"]/div/div[3]/div/div/div/div[2]/div/div/a[2]').click()

# 카테고리 선택
driver.find_element_by_xpath('//*[@id="editorContainer"]/div[3]/div[1]/div/button/i[2]').click()
driver.find_element_by_xpath('//*[@id="editorContainer"]/div[3]/div[1]/div[2]/div/div[5]').click()

# 제목 입력
title=driver.find_element_by_xpath('//*[@id="editorContainer"]/div[3]/div[2]/textarea')
title.send_keys('Selenium을 이용한 자동 글 작성 프로그램 예시')

# 내용 입력
iframe=driver.find_element_by_css_selector('iframe')
driver.switch_to_frame(iframe)
driver.find_element_by_id('tinymce').send_keys("안녕하세요 상엽's python 블로그 입니다")
driver.switch_to_default_content()

로그인이 완료되었으면 글 작성 페이지로 이동하고, 글이 작성될 카테고리, 제목, 내용을 입력해준다.

나는 해당글이 입력되는 Selenium & 크롤링 카테고리에 제목은 'Selenium을 이용한 자동 글 작성 프로그램 예시', 내용은 '안녕하세요 상엽's python 블로그 입니다'로 하였다.

 

게시글 제목과 다르게 본문 내용은 XPATH로 하니 찾아지지 않아 css_selector를 통해 iframe으로 찾아주었더니 해결되었다.

 

게시글의 제목과 내용이 입력된 모습

5. 게시글 발행

# 완료 버튼 클릭
driver.find_element_by_xpath('//*[@id="kakaoWrap"]/div[4]/div[3]/button').click()
time.sleep(0.5)

# 공개 버튼 클릭
driver.find_element_by_xpath('//*[@id="open20"]').click()
time.sleep(0.5)

# 공개 발행 !!
driver.find_element_by_xpath('//*[@id="editor-root"]/div[6]/div/div/div/form/fieldset/div[3]/div/button[2]').click()

완료버튼을 누른 후, 공개로 전환하여 공개 발행 버튼 클릭을 통해 마무리 해준다.

 

완료 버튼을 통해, 공개로 전환하고 발행까지 준비 되었다.

 

6. 게시글 발행 완료!

글이 정상적으로 등록되었다.

 

작동 동영상과 full-code를 마지막으로 올립니다.

작동 동영상의 경우 중간중간 time.sleep을 넣어 어떻게 넘어가는지 확인이 가능하도록 지연시켜놓았습니다.

 

 

 

#full-code

from selenium import webdriver 
import time

from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.common.keys import Keys

chromedriver = 'C://chromedriver.exe'
driver = webdriver.Chrome(chromedriver)
driver.implicitly_wait(2)

# 티스토리 접속
driver.get('https://www.tistory.com/')

# 계정 로그인 버튼 클릭
driver.find_element_by_xpath('//*[@id="kakaoHead"]/div/div[3]/div/a').click()
driver.find_element_by_xpath('//*[@id="cMain"]/div/div/div/a[1]/span[2]').click()
time.sleep(1)

# 로그인
username=driver.find_element_by_xpath('//*[@id="id_email_2"]')
username.send_keys('카카오톡 이메일')

password=driver.find_element_by_xpath('//*[@id="id_password_3"]')
password.send_keys('비밀번호')

time.sleep(1)
driver.find_element_by_xpath('//*[@id="login-form"]/fieldset/div[8]/button[1]').click()

# 글 작성 페이지 이동
driver.find_element_by_xpath('//*[@id="kakaoHead"]/div/div[3]/div/a[2]/img').click()
driver.find_element_by_xpath('//*[@id="kakaoHead"]/div/div[3]/div/div/div/div[2]/div/div/a[2]').click()

# 카테고리 선택
driver.find_element_by_xpath('//*[@id="editorContainer"]/div[3]/div[1]/div/button/i[2]').click()
driver.find_element_by_xpath('//*[@id="editorContainer"]/div[3]/div[1]/div[2]/div/div[5]').click()

# 제목 입력
title=driver.find_element_by_xpath('//*[@id="editorContainer"]/div[3]/div[2]/textarea')
title.send_keys('Selenium을 이용한 자동 글 작성 프로그램 예시')

# 내용 입력
iframe=driver.find_element_by_css_selector('iframe')
driver.switch_to_frame(iframe)
driver.find_element_by_id('tinymce').send_keys("안녕하세요 상엽's python 블로그 입니다")
driver.switch_to_default_content()

# 완료 버튼 클릭
driver.find_element_by_xpath('//*[@id="kakaoWrap"]/div[4]/div[3]/button').click()
time.sleep(0.5)

# 공개 버튼 클릭
driver.find_element_by_xpath('//*[@id="open20"]').click()
time.sleep(0.5)

# 공개 발행 !!
driver.find_element_by_xpath('//*[@id="editor-root"]/div[6]/div/div/div/form/fieldset/div[3]/div/button[2]').click()

 

댓글