네이버 메일 크롤링하기 -2. 메일에서 메일 발신자와 메일 제목 뽑기
네이버에서 로그인에 성공했으면 다음으로 필요한 정보들을 크롤링을 해야한다.
나 같은 경우에는 메일에서 메일 발신자와 메일 제목과 메일 수신 날짜를 뽑고 싶었다.
우선 필요한 내용만 추출하기 위해서는 driver.find.elements 함수에 대해서 조금은 알아야 할 것 같다.
driver.find.elements에 대한 설명은 https://pythonblog.co.kr/coding/23/
find_element By 사용
셀레늄 By 는 소스를 보다 유연하고 유지 관리하기 쉽게 만드는 데 사용할 수 있습니다. 저도 By를 주로 사용합니다. 엘리먼트를 찾는 방법은 find element 사용하기- naver 와 동일합니
pythonblog.co.kr
에서 설명을 잘 해놓은 것 같으니 여기서 보면 될 것 같다.
이번에 자동화 툴을 만들면서 XPATH와 CSS_SELECTOR, CLASS_NAME을 사용하였다.
1. 메일 발신자 뽑아내기
mailwriter = driver.find_elements(By.CLASS_NAME,'_c1(myContextMenu|showSenderContextLayer|list|18222)')
F12를 통해 개발자 도구를 열어서 발신자 부분의 코드를 확인해 보았다.
확인하는법
그림에서 동그라미 친 부분을 클릭 후 원하는 부분에 찍으면 해당 부분의 코드가 나온다.
그 결과
다음과 같은 코드가 나오고 class name을 가지고 크롤링을 시도 해본 결과
다음과 같은 에러가 출력된다. 정확한 에러가 뭔지는 잘 모르겠지만 해당 class_name을 찾지 못해서 발생하는 에러인 것 같다.
그래서 xpath를 통해서 크롤링을 해보려고 했다.
xpath를 확인하는 방법은
복사한 XPATH를 확인해보면
//*[@id="list_for_view"]/ol/li[1]/div/div[1]/a
다음과 같았다.
XPATH 코드를 좀 더 확인해보면 맨 위에 있는 메일은 li[1], 2번째 메일은 li[2] ... 식으로 가는 것 같아서 해당 페이지에 모든 li 값을 불러오기 위하여 xpath 값을 다음과 같이 변경하였다.
//*[@id="list_for_view"]/ol/li[@*]/div/div[1]/a
그 후 해당 값을 이용하여 코드를 작성해보면
mailwriter = driver.find_elements(By.XPATH,'//*[@id="list_for_view"]/ol/li[@*]/div/div[1]')
다음과 같이 작성할 수 있다.
이와 같은 방법으로 메일 작성자, 메일 제목, 수신 날짜를 크롤링 하는 코드를 작성하면
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import pyperclip
userid='[ID]'
userpw='[PW]'
driver = webdriver.Chrome('C:/Users/park/Downloads/chromedriver_win32/chromedriver.exe')
driver.implicitly_wait(3)
driver.get('https://nid.naver.com/nidlogin.login')
driver.find_element(By.NAME,'id').click()
pyperclip.copy(userid)
driver.find_element(By.NAME,'id').send_keys(Keys.CONTROL,'v')
driver.find_element(By.NAME,'pw').click()
pyperclip.copy(userpw)
driver.find_element(By.NAME,'pw').send_keys(Keys.CONTROL,'v')
driver.find_element(By.XPATH,'//*[@id="log.login"]').click()
driver.get('https://mail.naver.com/')
mailwriter = driver.find_elements(By.XPATH,'//*[@id="list_for_view"]/ol/li[@*]/div/div[1]')
mailtitle = driver.find_elements(By.CSS_SELECTOR,'strong.mail_title')
mailurl = driver.find_elements(By.CLASS_NAME,'iDate')
다음과 같이 작성할 수 있다.