네이버에 자동으로 로그인해 보기
지난 포스트(여기)에서 셀레니움을 이용해 버튼을 눌러 추가된 정보를 가져오는 것을 해 보았습니다. 이번 시간에는 자신의 아이디, 패스워드를 입력하여 로그인을 하는 것을 파이썬에게 시켜 보겠습니다. 먼저 셀레니움이 설치되어 있어야겠죠? 셀레니움 설치에 관해서는 지난 포스트(다시 한번 여기)를 참고해 주세요!
자, 먼저 셀레니움을 이용하여 네이버 첫 화면을 띄어 봅시다.
from selenium import webdriver
chromedriver_dir = r'chromedriver.exe가 있는 디렉터리\chromedriver.exe'
driver = webdriver.Chrome(chromedriver_dir)
driver.get('https://www.naver.com/')
위의 코드를 실행시키면 크롬 브라우저가 하나 실행되고 네이버 첫 화면이 나타날 거예요!
이제 위의 빨간 네모에 '아이디'와 '비밀번호'를 입력하고 '로그인' 버튼을 클릭하면 됩니다. 이렇게 특정 영역에 어떤 문자를 입력하고 싶을 때는 해당 영역의 엘리먼트(element)를 먼저 찾은 후에 'send_keys' 함수를 이용합니다.
요소검사를 이용해서 '아이디'와 '비밀번호'의 엘리먼트의 id를 알아냅니다. '아이디'의 경우 'id', '비밀번호'의 경우 'pw'이네요. 그렇다면 driver에게 id명을 기준으로 엘리먼트를 알아오라고 시키면 되겠죠? 'find_element_by_id'함수를 이용하겠습니다.
idvar = driver.find_element_by_id('id')
위와 같이 'id'를 찾아서 'idvar'라는 변수에 저장하게 습니다. 이제 'idvar'에 앞에서 말한 'send_keys' 함수로 유저의 아이디를 입력시키면 됩니다. 비밀번호까지 같은 방식으로 실행하면 아래와 같은 코드가 완성됩니다.
idvar = driver.find_element_by_id('id')
idvar.send_keys('여러분의 네이버 아이디')
pwvar = driver.find_element_by_id('pw')
pwvar.send_keys('여러분의 네이버 비밀번호')
아이디, 비밀번호를 입력했으니 옆에 초록색 '로그인' 버튼을 누를 차례입니다. 이 녀석의 엘리먼트는 어떤 놈인지 찾아보겠습니다.
마찬가지로 요소검사로 찾아보니 class='btn_login'을 찾을 수 있습니다. 마침 엘리먼트를 찾는 함수 중 클래스 이름으로 엘리멘트를 찾아오는 'find_element_by_class_name' 함수가 있으니 이 녀석을 사용해 보겠습니다.
driver.find_element_by_class_name('btn_login').click()
머, 이런 식으로 이미 연결된 드라이버에서 class이름이 'btn_login'인 엘리먼트를 찾아서 클릭하면 되겠죠. 근데 에러.... ;;;;; 검사해 보니 class가 'btn_login'인 엘리멘트가 이 전에 또 있어서 엉뚱하게 그곳에 가서 드라이버가 클릭을 누르고 있었네요.
좀 돌아가야겠습니다. 위와 같이 class이름이 'login'인 div가 왼쪽 빨간 네모 전체를 가리킵니다. 먼저 이 엘리먼트를 찾고 이어서 그 밑에 있는 'btn_login' 엘리멘트를 찾겠습니다.
logindiv = driver.find_element_by_class_name('login')
logindiv.find_element_by_class_name('btn_login').click()
실행하시면... 오예! 성공입니다. 생각보다 어렵지 않죠?! ㅎㅎ 감사합니다 :)
전체 코드입니다.
from selenium import webdriver
chromedriver_dir = r' 자신의 chromedriver.exe 파일 위치를 넣어주세요 \chromedriver.exe'
driver = webdriver.Chrome(chromedriver_dir)
driver.get('https://www.naver.com/')
idvar = driver.find_element_by_id('id')
idvar.send_keys('여러분의 네이버 아이디')
pwvar = driver.find_element_by_id('pw')
pwvar.send_keys('여러분의 네이버 비밀번호')
logindiv = driver.find_element_by_class_name('login')
logindiv.find_element_by_class_name('btn_login').click()