6. selenium 모듈 (1)
selenium
모듈은 크롤링의 끝판왕이라는 말이 있다.
requests
와 beautifulSoup
모듈 조합으로 크롤링에 실패한 경험이 있을 때 selenium
을 사용하면 거의 100퍼센트 크롤링에 성공할 수 있다.
1. selenium으로 크롬 검색 프로그램 만들기 (with. chrome driver )
우선 사용할 패키지와 모듈을 불러보자. 꽤 많다. 외운다기보단 필요할 때마다 복사해서 쓰는 게 좋겠다.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
import time
먼저 selenium
은 웹페이지 테스트 자동화를 위한 모듈이다.
개발/테스트용 드라이버(웹브라우저)를 사용하여 실제 사용자가 사용하는 것처럼 동작한다.
무슨 말인진 모르겠으나, 그만큼 할 수 있는게 많다는 말인 것 같다.
일단 chromedriver
를 다운로드 받아야 한다.
크롬드라이버의 버전이 사용자가 이용하는 크롬의 버전과 같아야하므로 주의가 필요하다.
chromedriver를 다운받았으면 파일의 경로를 정확히 알아놔야한다.
나의 경로는 다음과 같다.
‘/Users/choehyeogjae/Desktop/chromedriver‘
여기서 중요한 것은 맥 기준으로 경로 복사시 파일명을 추가로 적어야 한다는 점이다.
mac에서 chromedriver의 경로를 복사에서 그대로 복붙하면 ‘/Users/choehyeogjae/Desktop 까지만 작성됨
이제 python.org사이트로 이동하여 자동으로 검색하는 프로그램을 만들어보자.
chrome_driver = '/Users/choehyeogjae/Desktop/chromedriver'
driver = webdriver.Chrome(chrome_driver)
1. chrome_driver라는 객체에 chromedriver의 경로를 넣어주고,
2. selenium
모듈의 webdriver
를 chrome로 설정하여
3. driver에 객체화한다.
여기서 경로명이나 객체명이 조금이라도 틀리면 안된다. 주의해야한다.
driver.get('https://www.python.org/')
chrome를 자동으로 실행시켜줄 driver 객체 get함수
로 https://www.python.org/ 를 요청한다.
그럼 이제 코드를 실행해보자. 파이썬 사이트가 열리는 것을 볼 수 있다.
매우신기
다음은 검색하는 행위를 하기 전 검색창이 어떤 tag로 구성되어 있는지 확인해본다.
위를 보면 input tag 에 id가 id-search-field인 것을 확인 할 수 있다.
driver(webdriver)의 find를 입력후 tap키를 누르면 여러가지의 찾을 수 있는 값들이 리스트업 된다.
우리가 찾을 것은 elements의 id가 id-search-field인 것 이므로로 이를 search에 객체화해주자.
search = driver.find_element_by_id('id-search-field')
이제 search는 driver가 해당 element id를 찾도록 명령하는 것이다.
다음은 찾은 search에 검색어를 입력해야한다.
검색어 입력은 send_keys()
함수를 사용한다. 그리고 엔터는 send_keys()
함수에 Keys.RETURN을 입력하여 마무리
search.send_keys('lambda')
search.send_keys(Keys.RETURN)
그리고 코드를 실행해보자
끝 !
완성코드
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
import time
chrome_drvier = '/Users/choehyeogjae/Desktop/chromedriver'
driver = webdriver.Chrome(chorme_driver)
driver.get('https://www.python.org/')
search = driver.find_element_by_id('id-search-field')
search.send_keys("lambda")
search.send_keys(Keys.RETURN)
time.sleep(3)
driver.close()