본문으로 바로가기

selenium

- `https://www.selenium.dev`
- 자동화를 목적으로 만들어진 다양한 브라우져와 언어를 지원하는 라이브러리
- 크롬 브라우져 설치

    - 크롬 브라우져 드라이버 다운로드 (크롬 브라우져와 같은 버전)
    - 다운로드한 드라이버 압축 해제
    - chromedriver, chromedriver.exe 생성
    - windows : 주피터 노트북 파일과 동일한 디렉토리에 chromedriver.exe 파일 업로드
    - mac : sudo cp ~/Download/chromedirver /usr/local/bin

# install selenium
# !pip install selenium

 

다루는법 기본

import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome() # 시작

# 페이지 이동
driver.get("https://daum.net")

# 브라우져 사이즈 조절
driver.set_window_size(200, 600)

# 브라우져 스크롤 조절
driver.execute_script("window.scrollTo(200, 300);")

# alert 다루기
driver.execute_script("alert('hello selenium!!!');")

alert = driver.switch_to.alert
alert.accept()
!pip list | grep selenium # grep 명령어는 특정 문자열을 찾아줍니다 (pip list에서 selenium을 찾기위해 사용한 것 같음)

 

Class, ID 등등 삽입방법

# 문자열 입력
driver.find_element(By.CSS_SELECTOR, "#q").send_keys("셀레니움")

# 검색 버튼 클릭
driver.find_element(By.CSS_SELECTOR, '.inner_search > .ico_pctop.btn_search').click()

# 브라우져 종료
driver.quit()

 

텍스트 데이터 가져오기

- TED 사이트 : `https://www.ted.com`

# 브라우져를 실행하여 테드 사이트 열기
driver = webdriver.Chrome()
driver.get("https://www.ted.com/talks")

# CSS Selector를 이용하여 HTML 태그와 태그 사이의 text 데이터 가져오기
driver.find_element(By.CSS_SELECTOR, "#banner-secondary").text

# 제목 데이터 가져오기
contents = driver.find_elements(By.CSS_SELECTOR, "#browse-results > .row > .col")
len(contents)

# 가장 처음 텍스트 데이터 가져오기
contents[0].find_element(By.CSS_SELECTOR, '.media__message .ga-link').text

# 전체 제목 데이터 가져오기
titles = []
for content in contents:
    title = content.find_element(By.CSS_SELECTOR, '.media__message .ga-link').text
    titles.append(title)
titles[:3], len(titles)

# 셀렉트 박스를 선택후 데이터 가져오기
# 이벤트 발생 기능(값 입력, 클릭 이벤트등)은 화면에 해당 엘리먼트가 보여야 합니다.
# 한국어 선택
driver.find_element(By.CSS_SELECTOR, '#languages [lang="ko"]').click()

# 전체 제목 데이터 가져오기
contents = driver.find_elements(By.CSS_SELECTOR, "#browse-results > .row > .col")
titles = []
for content in contents:
    title = content.find_element(By.CSS_SELECTOR, '.media__message .ga-link').text
    titles.append(title)
titles[-3:]

# 링크 데이터 크롤링 (속성(attribute)값 가져오는 방법)
links = []
for content in contents:
    link = content.find_element(By.CSS_SELECTOR, '.media__message .ga-link').get_attribute("href")
    links.append(link)
links[-3:]

driver.quit()

 

Headless

- 브라우져를 화면에 띄우지 않고 메모리상에서만 올려서 크롤링하는 방법 
- window가 지원되지 않는 환경에서 사용이 가능
- chrome version 60.0.0.0 이상부터 지원 합니다.

# 현재 사용중인 크롬 버전 확인
driver = webdriver.Chrome()
version = driver.capabilities["browserVersion"]
print(version)
driver.quit()
# headless 사용
options = webdriver.ChromeOptions()
options.add_argument('headless')
driver = webdriver.Chrome(options=options)
driver.get("https://www.ted.com/talks")
text = driver.find_element(By.CSS_SELECTOR, "#banner-secondary").text
driver.quit()
print(text)