회사에서 어떤 코드를 만들었다면, 이를 바로 서비스할 수 없음.
QA 팀을 통해서 테스트가 통과되어야 실제 서비스 되도록 올라갈 수 있음.
근데.. 매번 모든 기능을 일일히 사용하기에는 번거로움.
그래서! QA팀이 이 기능을 사용하는 것을 자동화 시켜주는게 selenium.
즉 테스트용
다양한 언어를 지원: R, C, Java,...
다양한 브라우저를 지원: 크롬, 사파리 등등
브라우저를 파이썬 코드로 컨트롤 해서 브라우저에 있는 데이터를 수집
이것을 크롤링 때도 사용할 수 있음!
: client가 인터넷을 통해 sever에 데이터를 요청하면, 받아온 데이터가 client의 브라우저 안에 존재하게 된다.
selenium을 이용하면 파이썬에서 직접 server에 데이터를 요청하는게 아니라, 브라우저를 컨트롤해서 데이터를 가져오게 된다.
: 더 좋고, 효율적이고, 빠른건?
: 크롬 브라우저와 같은 버전으로 다운
!pip install selenium
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.naver.com/")
driver.set_window_size(200, 600)
driver.execute_script("window.scrollTo(300, 300);")
driver.execute_script("alert('hello naver!');")
alert = driver.switch_to.alert
alert.accept() # alert 창 닫기
driver.execute_script("window.scrollTo(0, 0);") # 다시 스크롤 이동
driver.find_element(By.CSS_SELECTOR, "#query").send_keys("파리바게트")
driver.find_element(By.CSS_SELECTOR, "#sform > fieldset > #search_btn").click()
driver.quit()
keyword = "데이터 분석"
driver = webdriver.Chrome()
driver.get("https://www.inflearn.com/")
time.sleep(1)
driver.find_element(By.CSS_SELECTOR, "#pg___main > section.search > div > div > div > input").click()
time.sleep(1)
driver.find_element(By.CSS_SELECTOR, "#pg___main > section.search > div > div > div > input").send_keys(keyword)
time.sleep(1)
driver.find_element(By.CSS_SELECTOR, "#pg___main > section:nth-child(2) button").click()
time.sleep(1)
elements = driver.find_elements(By.CSS_SELECTOR, "#courses_section div.courses_container > div > div")
data = []
for element in elements:
data.append({
"title" : element.find_element(By.CSS_SELECTOR, "div.course_title").text,
"teacher" : element.find_element(By.CSS_SELECTOR, "div.card-content > div.instructor").text,
"price" : element.find_element(By.CSS_SELECTOR, "div.card-content > div.price").text,
"link" : element.find_element(By.CSS_SELECTOR, "a.course_card_front").get_attribute("href"),
})
inflearn_data_analysis = pd.DataFrame(data)
driver.quit()
inflearn_data_analysis.head()