파이썬 (Python) Selenium (기본, 네이버 로그인)
저번 글에서는 BeautifulSoup에 대해서 다루었다.
2020/12/30 - [개발자/파이썬] - 파이썬 웹스크래핑(web scraping)
2020/12/30 - [개발자/파이썬] - 파이썬 웹스크래핑(web scraping)_2
이번에 다룰 것은 Selenium인데 이게 진짜 찐이다.
BeautifulSoup과는 다르게 동적인 부분을 처리할 수 있다. (입력, 버튼 클릭, 스크롤 등등)
또한 자바스크립트 렌더링도 지원되어서 더욱 편리하다.
Selenium을 사용하기 위해서 그 전에 해야 할 작업들이 있는데,
(참고로, 다들 크롬을 사용한다는 전제하에 진행한다.)
먼저, webdriver를 설치해야한다.
이를 위해서 크롬 버전을 확인해야하는데, 아래의 그림처럼 확인 할 수 있다.
버전을 잘 확인하고 아래의 웹사이트에서 자신의 버전과 맞는 Chromedriver를 설치해주면 된다.
( sites.google.com/a/chromium.org/chromedriver/downloads )
그리고 이제 터미널창으로 와서 "pip install selenium" 을 통해 모듈을 설치한다.
(가끔 pip이 아니라 pip3로 입력해야 되는 분들이 있던데,
이건 아마 파이썬 버젼의 차이때문에 발생하는 것 같다. 이게 안된다면 pip3로 해보자)
이제 아래의 코드가 사실상 가장 기본이 된다.
from selenium import webdriver
browser = webdriver.Chrome("각자 Chromedriver의 위치")
# 1. 네이버 이동
browser.get("http://www.naver.com")
이때 하나 주의할 점! webdriver.Chrome()의 인자에 "꼭" 현재 Chromedriver의 위치를 넣어주자.
(Chromedriver가 파이썬 파일과 같은 폴더내에 위치한다면 굳이 쓸 필요없다고 어디서 본 것 같았는데, 필자의 경우 Chromedriver의 위치를 제대로 넣어주지 않으면 계속 에러가 나더라... 그냥 애매하면 넣어주는게 속 편할 듯)
이 코드를 돌리면 짜잔 하면서 네이버 페이지가 뜬다.
이제 selenium에서 제공하는 다양한 메소드들을 하나씩 보면,
from selenium import webdriver
browser = webdriver.Chrome("각자의 WebDriver 위치")
browser.get("http://www.naver.com")
elem = browser.find_element_by_class_name("link_login")
elem.click()
browser.back()
browser.forward()
browser.refresh()
browser.back()
from selenium.webdriver.common.keys import Keys
elem = browser.find_element_by_tag_name("a")
elem = browser.find_elements_by_tag_name("a")
elem.send_keys("나도코딩")
elem.send_keys(Keys.ENTER)
browser.back()
browser.quit() # 모든 탭 나가기
browser.close() # 하나의 탭 나가기
exit() #파이썬 나가기
정말 다양한 메소드들이 있다.
find_element_by_class_name, find_element_by_class_id, find_element_by_class_xpath 등등을 통해 element를 찾을 수 있다.
(HTML을 분석해보면서 element를 찾아야한다.)
또한 element를 click()를 통해 클릭할 수도 있고 back(), forward(), refresh(), 등등의 동작들도 수행 할 수 있다.
그리고 "from selenium.webdriver.common.keys import Keys" 를 통해 Keys를 import하고
element를 찾아서 send_keys("---")를 통해 키 값을 입력할 수 있고, send_keys(Keys.ENTER)를 통해 엔터 동작을 수행 할 수 있다.
이정도 메소드만으로도 많은 것들을 충분히 해낼 수 있다.
네이버 자동 로그인 예제 코드와 실제 실행 영상을 한번 보면,
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
browser = webdriver.Chrome("각자의 chromedriver 경로")
# 1. 네이버 이동
browser.get("http://www.naver.com")
# 2. 네이버 로그인 버튼 클릭
elem = browser.find_element_by_class_name("link_login")
elem.click()
# 3. 아이디, 비밀번호 입력
browser.find_element_by_id("id").send_keys("id")
browser.find_element_by_id("pw").send_keys("password")
# 4. 로그인 버튼 클릭
browser.find_element_by_id("log.login").click()
time.sleep(3) # 동시 처리되는 것을 막기 위해 3초를 쉰다.
잘 동작하는 것을 확인 할 수 있다.
하지만 네이버에서 이 동작을 컴퓨터에서 자동적으로 실행된 것이라는 것을 알고 자동입력 방지문자를 입력하라고 요구한다.
네이버 자동 로그인을 위해서
구글링한 결과 여러가지 방법이 있지만 가장 보편적인(?) 것은 자바스크립트 코드를 삽입하는 방식이었다.
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
browser = webdriver.Chrome("각자")
# 1. 네이버 이동
browser.get("http://www.naver.com")
# 2. 네이버 로그인 버튼 클릭
elem = browser.find_element_by_class_name("link_login")
elem.click()
# 3. 아이디, 비밀번호 입력
input_js = '\
document.getElementById("id").value = "{id}"; \
document.getElementById("pw").value = "{pw}"; \
'.format(id = "gutenjune", pw = "password") # 각자의 아이디와 패스워드를 넣자.
time.sleep(2)
browser.execute_script(input_js)
time.sleep(3)
# 4. 로그인 버튼 클릭
browser.find_element_by_id("log.login").click()
time.sleep(3) # 동시 처리되는 것을 막기 위해 3초를 쉰다.
(이때 코드 중간중간에 time.sleep(3)처럼 몇 초가 쉬어주는 경우가 있는데 동시처리가 되는 것을 막기 위해 이렇게 몇 초씩은 쉬어준다.)
위의 코드를 실행시켜보면 다음과 같이 동작한다.
개발을 할 줄 아는 사람들은 이런 방식을 통해 업무를 자동화하는 경우가 많더라.
물론 아직 많이 부족하지만, 충분히 다양한 것들을 시도해볼 수 있을 것 같다.
'개발자 > 파이썬' 카테고리의 다른 글
파이썬 Selenium (셀레니움) 스크롤(Scroll) (2) | 2021.01.02 |
---|---|
파이썬 (Selenium) 로딩까지 기다림 (feat. WebDriverWait) (1) | 2021.01.01 |
파이썬 웹스크래핑(web scraping)_2 (0) | 2020.12.30 |
파이썬 웹스크래핑(web scraping) (0) | 2020.12.30 |
파이썬 자동매매 프로그램 (feat. 조코딩) (25) | 2020.12.28 |