Data Engineering/Crawling

[Crawling] Daum, Naver 로그인 후 메일 목록 크롤링

YSY^ 2020. 8. 5. 17:22

▣ 다음 로그인 후 메일 목록 크롤링

다음의 로그인 url과 메일 url을 가져온다.

login_url = 'https://logins.daum.net/accounts/signinform.do'
mail_url = 'https://mail.daum.net/'

id = '<본인아이디>'
pwd = '<본인패스워드>'

크롬 드라이버 열기

from selenium.webdriver import Chrome
driver = Chrome()
driver.get(login_url)

로그인

# 로그인 페이지 소스 체크

- 아이디와 패스워드는 name으로 가지고온다.
- 로그인 버튼은 id로 가지고 온다.
- send_keys()로 해당값을 입력한다.

#로그인 코드

#ID : name=id
# password : name=pw
#login button : id=loginBtn
id_input = driver.find_element_by_name('id')
pwd_input = driver.find_element_by_name('pw')
login_btn = driver.find_element_by_id('loginBtn')
print(type(id_input))
id_input.send_keys(id)
pwd_input.send_keys(pwd)

#로그인 버튼 클릭

login_btn.click()

메일 목록가지고 오기

# 메일 목록 페이지 소스 체크

- div#mailList 밑으로 메일목록들이 있다.

- <a.link_subject>태그 밑에 메일 상세정보를 볼 수 있는 링크와, 메일 제목이 들어있다.

# 메일 url가지고 오기
driver.get(mail_url)

# 메일 list 가지고 오기
link_list = driver.find_elements_by_css_selector('div#mailList a.link_subject')
for a in link_list:
    link = a.get_attribute('href')
    title = a.text.strip()
    print(link, title, sep=' - ')

▣ 네이버 로그인 후 메일 목록 크롤링

네이버 메일 목록 크롤링은 Daum과 유사하나 로그인 방식이 다르기 때문에 그것만 다루도록 하겠다.

로그인

naver_login_url = 'https://nid.naver.com/nidlogin.login'
id = '<본인아이디>'
pwd = '<본인패스워드>'

#드라이버실행

from selenium.webdriver import Chrome
driver = Chrome()
driver.get(naver_login_url)

# 로그인 페이지 소스 체크

- id의 id는 'id', password의 id는 'pw'이다.
- 아이디와 패스워드 입력후 로그인 버튼을 누른다.(css_selector 이용)

# 로그인 코드

id_input = driver.find_element_by_id('id')
pwd_input = driver.find_element_by_id('pw')
btn = driver.find_element_by_css_selector('input[type=submit]')

네이버는 다음과 달리 send_keys()로 값 입력이 불가능하다.
아마 특수처리를 해 놓은것 같다.

따라서 pyperclip패키지를 사용해서 직접 값을 복사해서 붙여넣기를 한다.

pyperclip 패키지

  • 클립보드를 이용해 copy & paste 지원

    !pip install pyperclip
    import pyperclip
    
pyperclip.copy('hello world')  
#control+c ->클립보드에 문자열 저장

txt = pyperclip.paste()  
#control+v 클립보드에 저장된 문자열을 반환.

pyperclip을 이용한 아이디와 비밀번호 입력


from selenium.webdriver.common.keys import Keys  
from selenium.webdriver.common.action\_chains import ActionChains  
import time

def copy\_paste(driver, element, text):  
pyperclip.copy(text)  
element.click()  
#ActionChains : 명령어들을 모으는 역할  
#ActionChains.perform() : 모인 명령어를 chain으로 묶인 순서대로 실행  
action\_chain = ActionChains(driver).key\_down(Keys.CONTROL).send\_keys('v').key\_up(Keys.CONTROL)  
action\_chain.perform()  
time.sleep(1)

아이디와 패스워드입력

copy\_paste(driver, id\_input, id)  
copy\_paste(driver, pwd\_input, pwd)
728x90
반응형