selenium 모듈

Published: Jan 10, 2020 by Dev-hwon

selenium

  • 웹페이지 테스트 자동화용 모듈
  • 개발/테스트용 드라이버(웹브라우저)를 사용하여 실제 사용자가 사용하는 것처럼 동작
  • 필수 사항
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_driver = 'Your chromedriver location'
driver = webdriver.Chrome(chrome_driver)

driver.get('https://www.python.org')

search = driver.find_element_by_id('id-search-field')

search.clear()
time.sleep(3)
search.send_keys('lambda')
time.sleep(3)
search.send_keys(Keys.RETURN)
driver.close()

저번에 beautifulsoup에서 사용한 다음 기사를 이용해서 기사의 댓글 수를 가져와보자.

chrome_driver = 'Your chromedriver location'
driver = webdriver.Chrome(chrome_driver)

url = 'https://news.v.daum.net/v/20200110071011691'
driver.get(url)

src = driver.page_source
soup = BeautifulSoup(src, 'lxml')

driver.close()

#print(soup)
comment = soup.select('span.alex-count-area')
print(comment[0].get_text())
# 출력결과
4

selenium을 활용하여 특정 element의 로딩 대기

  • WebDriverWait 객체를 이용하여 해당 element가 로딩되는 것을 대기
  • 실제로 해당 기능을 활용하여 거의 모든 사이트의 크롤링이 가능
  • WebDriverWait(driver, 시간(초)).until(EC.presence_of_element_located((By.CSS_SELECTOR, ‘CSS_RULE’)))
chrome_driver = 'Your chromedriver location'
driver = webdriver.Chrome(chrome_driver)

url = 'https://news.v.daum.net/v/20200110071011691'
driver.get(url)

WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'span.alex-count-area')))
# 10초 안에 로딩이 되면 성공 안되면 에러

src = driver.page_source
soup = BeautifulSoup(src, 'lxml')

driver.close()

#print(soup)
comment = soup.select('span.alex-count-area')
print(comment[0].get_text())
selenium beautifulsoup 파이썬 python HTML HTTP 크롤러 Crawler