개발은 처음이라 개발새발

셀레니움으로 네이버 로그인 1편 본문

파이썬/크롤링

셀레니움으로 네이버 로그인 1편

leon_choi 2022. 7. 10. 09:00
반응형

저는 종종 취미로 스포츠 데이터를 모으는 것을 합니다. 그럴 때 주로 크롤링을 통해 데이터를 수집하는데요. 대부분의 기록 사이트가 오픈돼 있기 때문에 로그인이 필요하지 않지만 가끔 크롤링할 기록실 링크를 직접 넣어도 반드시 로그인을 수반해야 되는 경우가 있습니다. 그럴 때 어떻게 로그인을 해결하는지 네이버를 예시로 한번 진행해 보도록하겠습니다. 

 

*** 셀레니움으로 네이버 축구 순위 크롤링

1편 - https://data-so-hard.tistory.com/9?category=976315 

2편 - https://data-so-hard.tistory.com/10?category=976315 

3편 - https://data-so-hard.tistory.com/11?category=976315 

4편 - https://data-so-hard.tistory.com/12?category=976315 

 

우선 네이버를 불러오는 코드를 짜보겠습니다.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import UnexpectedAlertPresentException
from selenium.webdriver.support.select import Select

#open webdriver
chrome_driver = './chromedriver.exe'
driver = webdriver.Chrome(chrome_driver)

naver = "https://www.naver.com/"
driver.get(naver)

네이버 메인페이지를 연동했으니 로그인 버튼을 클릭할 코드를 짜야 겠죠. 지난 분데스리가 순위 테이블을 크롤링 했던 방식과 동일하게 마우스 우클릭 후 검사 항목을 클립니다. 그러면 현재 페이지의 html 구조가 보이는데요. 여기서 빨간색 동그라미로 표시한 화살표를 클릭하고 "NAVER 로그인" 버튼을 클릭하면 해당 부분의 구조가 보입니다. 이부분을 우클릭 후 "copy → copy selector"를 통해 태그를 긁어옵니다. 

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import UnexpectedAlertPresentException
from selenium.webdriver.support.select import Select

#open webdriver
chrome_driver = './chromedriver.exe'
driver = webdriver.Chrome(chrome_driver)

naver = "https://www.naver.com/"
driver.get(naver)

#네이버 로그인 버튼 클릭
driver.find_element_by_css_selector('#account > a').click()

기존에는 driver.find_element_by_css_selector() 부분까지 썼으면 됐지만 저희는 로그인 버튼을 통해 페이지 이동을 해야 하기 때문에 옆에 .click()을 적어 페이지 이동을 진행시킵니다. 이제는 로그인 페이지에서 아이디부분에 아이디를, 비밀번호 부분에 비밀번호를 적고 로그인 버튼까지 클릭해야 합니다. 그러면 로그인 부분의 html 구조를 봐볼까요?

아이디와 비밀번호를 제대로 입력하기 위해서는 각각의 input 태그를 copy해와야 합니다. 그리고 앞에서는 클릭을 위해서 driver.find_element_by_css_selector() 뒤에 click()를 붙였다면 이번에는 해당 부분에 아이디와 비밀번호의 입력값을 보내야 하기 때문에 .send_keys()를 적어야 합니다. 그리고 괄호 안에는 아이디와 비밀번호를 적어야 합니다. 그리고 로그인 버튼은 아까와 동일학게 .click()으로 처리하면 완성입니다.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import UnexpectedAlertPresentException
from selenium.webdriver.support.select import Select

#open webdriver
chrome_driver = './chromedriver.exe'
driver = webdriver.Chrome(chrome_driver)

naver = "https://www.naver.com/"
driver.get(naver)

#네이버 로그인 버튼 클릭
driver.find_element_by_css_selector('#account > a').click()

#네이버 아이디 비번 입력 
driver.find_element_by_css_selector('#id').send_keys('naver_id')
driver.find_element_by_css_selector('#pw').send_keys('naver_pw')
driver.find_element_by_css_selector('#log\.login').click()

driver.quit()

로그인 버튼까지 클릭한 결과, 로봇이 자동으로 입력한 것을 방지하고자 하는 페이지로 이동이 됐습니다. 이부분을 우회해 로그인을 완성할 수 있는 방법에 대해 다음 편에서 확인해보도록 하겠습니다.

반응형