Published: Jan 10, 2020 by Dev-hwon
selenium
- 웹페이지 테스트 자동화용 모듈
- 개발/테스트용 드라이버(웹브라우저)를 사용하여 실제 사용자가 사용하는 것처럼 동작
- 필수 사항
- 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())