반응형
Selenium이란?
Selenium은 웹 브라우저 자동화를 위한 오픈 소스 도구입니다. 주로 웹 애플리케이션 테스트를 자동화하는 데 사용되지만, 웹 스크래핑, 데이터 수집, 브라우저 상호작용 자동화와 같은 다양한 작업에도 널리 활용됩니다. Selenium은 여러 프로그래밍 언어(Python, Java, C#, Ruby 등)를 지원하며 다양한 브라우저(Chrome, Firefox, Edge, Safari 등)와 호환됩니다.
Python Selenium 주요 구성 요소
- WebDriver
- Selenium에서 브라우저를 제어하기 위한 주요 도구입니다.
- 브라우저의 동작(열기, 닫기, 페이지 이동 등)을 프로그래밍 방식으로 제어할 수 있습니다.
- 브라우저별로 WebDriver가 다르므로, 사용하는 브라우저에 맞는 WebDriver를 설치해야 합니다.
- 예: Chrome은
chromedriver
, Firefox는geckodriver
- 예: Chrome은
- Selenium WebDriver 주요 메서드
get(url)
: 특정 URL로 이동합니다.find_element() / find_elements()
: 웹 페이지에서 특정 요소를 검색합니다.send_keys()
: 입력 필드에 텍스트를 입력합니다.click()
: 클릭 가능한 요소를 클릭합니다.execute_script()
: JavaScript 코드를 실행합니다.quit()
: 브라우저를 종료합니다.
- Selector(선택자)
- Selenium은 HTML 요소를 찾기 위해 다양한 선택 방법을 제공합니다.
By.ID
: 요소의 ID를 기준으로 검색By.NAME
: 요소의 name 속성을 기준으로 검색By.CLASS_NAME
: 클래스 이름으로 검색By.TAG_NAME
: 태그 이름으로 검색By.CSS_SELECTOR
: CSS 선택자를 사용By.XPATH
: XPath 표현식을 사용
- Selenium은 HTML 요소를 찾기 위해 다양한 선택 방법을 제공합니다.
- Browser Options
- WebDriver는 브라우저 옵션을 설정할 수 있습니다.
- 예: 헤드리스 모드, 프록시 설정, 디버깅 로그 비활성화 등.
Options
객체를 사용하여 브라우저 설정을 추가합니다.from selenium.webdriver.chrome.options import Options options = Options() options.add_argument('--headless') # 브라우저 UI 비활성화
설치 및 기본 사용법
설치
- Selenium 라이브러리 설치:
pip install selenium
- WebDriver 다운로드:
- 사용하는 브라우저에 맞는 WebDriver를 Selenium 공식 웹사이트 또는 브라우저 제공 사이트에서 다운로드.
간단한 예제: Google 검색 자동화
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
# WebDriver 설정
driver = webdriver.Chrome() # 또는 webdriver.Firefox()
driver.get("https://www.google.com") # 구글로 이동
# 검색창 찾기
search_box = driver.find_element(By.NAME, "q")
search_box.send_keys("Selenium Python") # 검색어 입력
search_box.send_keys(Keys.RETURN) # 엔터 키 입력
# 결과 확인
print(driver.title) # 브라우저 제목 출력
driver.quit() # 브라우저 종료
Selenium 사용 팁
- Explicit Wait와 Implicit Wait
- 웹 페이지 로딩이나 특정 요소가 나타날 때까지 기다리기 위해 사용합니다.
time.sleep()
대신 Selenium의 대기 메서드를 사용하는 것이 더 안정적입니다.Implicit Wait
: 모든 요소 검색 시 지정된 시간만큼 기다립니다.driver.implicitly_wait(10) # 최대 10초 대기
Explicit Wait
: 특정 조건이 충족될 때까지 기다립니다.from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "element_id")) )
- 헤드리스 모드
- UI를 띄우지 않고 브라우저를 백그라운드에서 실행합니다.
from selenium.webdriver.chrome.options import Options options = Options() options.add_argument("--headless") driver = webdriver.Chrome(options=options)
- UI를 띄우지 않고 브라우저를 백그라운드에서 실행합니다.
- 동적 웹사이트 처리
- AJAX나 JavaScript로 동적으로 로드되는 웹사이트의 경우
Explicit Wait
을 적극 활용하거나 필요한 경우 JavaScript 실행으로 요소를 강제 로드.
- AJAX나 JavaScript로 동적으로 로드되는 웹사이트의 경우
- 로봇 감지 회피
- Selenium은 자동화로 간주될 수 있어 차단될 수 있습니다.
- 브라우저 옵션을 추가하여 탐지를 줄일 수 있습니다:
options.add_argument("--disable-blink-features=AutomationControlled")
- 스크린샷
- 현재 페이지의 스크린샷을 저장:
driver.save_screenshot("screenshot.png")
- 현재 페이지의 스크린샷을 저장:
Selenium의 한계
- 속도: 실제 브라우저를 사용하기 때문에 속도가 느립니다.
- 차단 가능성: 많은 웹사이트에서 Selenium의 자동화를 탐지하고 차단.
- 동시 작업: 여러 브라우저 인스턴스를 병렬로 실행하면 성능에 영향을 미칠 수 있습니다.
- 대안 도구: 단순한 데이터 수집 작업은
BeautifulSoup
,Requests
같은 라이브러리가 더 적합할 수 있습니다.
Selenium 활용 사례
- 웹 스크래핑: 동적으로 로드되는 데이터를 추출.
- UI 테스트 자동화: 웹 애플리케이션 테스트 스크립트 작성.
- 브라우저 작업 자동화: 계정 로그인, 양식 작성, 반복 작업 자동화.
- 데이터 수집 및 분석: 다양한 웹사이트에서 데이터 크롤링 및 정리.
반응형
'🖥️ IT, 컴퓨터 > 🐍 Python' 카테고리의 다른 글
[Python] matplotlib으로 인구 피라미드 시각화하기 (0) | 2024.12.24 |
---|---|
[Python] BeautifulSoup 라이브러리란? :: html 파싱, Selenium과의 차이 (0) | 2024.11.20 |
[Python] 파이썬 BeautifulSoup 뷰티풀수프로 html 파싱해 원하는 부분 표로 만들기 :: 공차 매장명, 주소 추출 (0) | 2024.11.17 |
[Python] geopandas이용하여 shp파일 단순화하기 :: simplify (0) | 2024.11.13 |
[Python] 전국 올리브영 매장 크롤링 :: 매장명, 매장주소 beautifulsoup (2) | 2024.11.07 |
댓글