이번에는 Selenium과 크롬 웹드라이버('chromedriver')를 이용해 자동으로 티스토리에 로그인을 하고, 간단한 게시글을 작성하는 코드를 짜보고자 한다.
우선 자신이 사용하고 있는 크롬 버전과 맞는 chromedriver를 다운받아야 한다.
다음 페이지 에서 chromedriver 다운로드가 가능하며, 사용하고 있는 크롬 버전은 "설정 -> chrome 정보"에서 확인 가능하다.
※ Chromedriver 다운로드
chromedriver.chromium.org/downloads
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를 얻는 방법은 다음과 같다.
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를 통해 해당 요소로 내가 입력하고자 하는 값 혹은 텍스트를 입력시킬 수 있다.
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()
'Python > Selenium & 크롤링' 카테고리의 다른 글
[python] 실시간 주식 종목, 현재가, 차트 카카오톡 메세지로 나에게 보내기 (1) | 2021.06.19 |
---|---|
[python] 3/3__Selenium을 이용한 구글 검색 이미지 크롤링 하기 (10) | 2021.05.11 |
[python] 2/3__Selenium을 이용한 구글 검색 이미지 크롤링 하기 (0) | 2021.05.08 |
[python] 1/3__Selenium을 이용한 구글 검색 이미지 크롤링 하기 (2) | 2021.05.06 |
댓글