-
Selenium 기초 및 활용 하기 01 - 설치 및 기본 기능빅데이터/Selenium 2022. 1. 7. 14:37
유투버 '이수안컴퓨터연구소' 강의 참조
01 셀레니엄 이란?
- 최초의 셀레니엄의 목적은 웹사이트 테스트를 위해서 만들어졌다.
- 셀레니엄을 이용하면 마치 사람이 사용하는것처럼 웹사이트를 열고 원하는 사이트에 들어가서 검색을 하는 등 자동화 테스트용으로 만들어졌다.
- 셀레니엄은 4가지 종류가 있다 IDE/RC/WebDriver/Grid
- 현재는 'Selenium WebDriver' 라는 프로그램을 통해 운영체제 및 프로그래밍언어등에 사용이 가능하고 이를 통해 업무 자동화에 사용 된다.
- 크롬을 이용해서 셀레니엄을 사용하려면 크롬이 가지고있는 내부 드라이버에 접근을 해야하는데 이를 'Chronium' 이라 불리고 이를 기반으로해서 만들어 졌다.
02 셀레니엄 및 크롬 관련 드라이브 설치
- 가장 간단한 방법은 VS가 깔려있으면 터미널로 깔면 된다
- 테스트
이렇게 했을때 오류가 없으면 설치 성공 - 크롬으로 셀레니엄을 이용해 웹스크래핑을 하려면 크롬용 웹 드라이버가 필요하다.
다음 링크를 확인해서 설치를 해주자 (https://chancoding.tistory.com/136) - 크롬으로 셀레니엄을 사용하려면 반드시 크롬드라이버가 사용하고자 하는 폴더에 있어야 가능하다.
크롬드라이버 버전이 꼭 일치해야 오류가 없다! ▶ 기본 세팅
import selenium from selenium import webdriver from selenium.webdriver.common.keys import Keys #웹브라우저를 띄우지 않고 진행하기 위한 설정 chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--headless') chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') #이렇게 객체를 생성하여 위에서 세팅된 값을 넣어주면 된다! wd = webdriver.Chrome('chromedriver', options=chrome_options)
- 셀레니엄도 뷰티풀숩처럼 일단 스크래핑 하고자 하는 사이트를 들고 와야 한다
wd.get("http://suanlab.com/")
01 셀레니엄 간단 기능 보기
- 스크린샷
wd.get_screenshot_as_file("suanlab.png")
- 간단 스크래핑
이 사진에 나와있는 <label> 태그 들고 와보자 for label in wd.find_elements_by_tag_name('label'): print(label.text)#객체의 text값을 들고 와야 한다
- 뷰티풀숩과 매우 흡사하게 접근 한다고 보면 된다. 'label' 태그가 계속 여러번 반복되니 그것을 찾아오고 포문을 돌려서 하나씩 뽑는 형태. 하나의 태그에 접근할때는 단순 'find_element'
▶ 뷰티풀숩과 마찬가지로 CSS 셀렉터로도 접근이 가능 하다.
#wrapper > section > div > div > div:nth-child(1) > div > div:nth-child(1) > label -> 구조 선택자를 없애야 모든 label을 인덱싱 관계없이 들고올 수 있다. '#wrapper > section > div > div > div > div > div > label' for label in wd.find_elements_by_css_selector('#wrapper > section > div > div > div > div > div > label'): print(label.text)
▶ 셀레니움에서는 CSS 선택자 말고 XPATH 선택자도 엄청 많이 쓰인다.
//*[@id="wrapper"]/section/div/div/div[1]/div/div[1]/label # 똑같이 특정 인덱스를 없애줘야 포문을 오류없이 돌릴 수 있다. //*[@id="wrapper"]/section/div/div/div/div/div/label for label in wd.find_elements_by_xpath('//*[@id="wrapper"]/section/div/div/div/div/div/label'): print(label.text)
- 클래스로 접근이 안될때에는 CSS 선택자나 XPATH 선택자로 접근해서 다시 클래스로 가져 올 수 있다.
labels = wd.find_element_by_css_selector('#wrapper > section > div > div > div > div') for label in labels.find_elements_by_class_name('toggle'): print(label.text)
→ 최상위 <div> 클래스를 들고 올때에는 하나밖에 없으니 .find_element 단수로 찾아야 한다
- 위와 완전히 똑같은 결과를 내지만 코드가 약간 다른 방식이 있다.
from selenium.webdriver.common.by import By for label in wd.find_elements(By.TAG_NAME, 'label): print(label.text) for label in wd.find_elements(By.CSS_SELECTOR, '#wrapper > section > div > div > div > div > div > label'): print(label.text)
'빅데이터 > Selenium' 카테고리의 다른 글
Selenium 기초 및 활용 하기 5 - 네이버 뉴스 댓글 스크래핑 (0) 2022.01.12 Selenium 기초 및 활용 하기 04-2 - 구글 이미지 스크래핑 (0) 2022.01.12 Selenium 기초 및 활용 하기 04 - 구글 이미지 스크래핑 (0) 2022.01.11 Selenium 기초 및 활용 하기 03 - CGV 영화 리뷰 스크래핑 (0) 2022.01.11 Selenium 기초 및 활용 하기 02 - 네이버웹툰 스크래핑 (0) 2022.01.10