🖥️ IT, 컴퓨터/🐍 Python

[Python] Selenium 라이브러리란? :: 크롤링, 웹스크래핑

김 홍시 2024. 11. 20.
반응형

Selenium이란?

Selenium은 웹 브라우저 자동화를 위한 오픈 소스 도구입니다. 주로 웹 애플리케이션 테스트를 자동화하는 데 사용되지만, 웹 스크래핑, 데이터 수집, 브라우저 상호작용 자동화와 같은 다양한 작업에도 널리 활용됩니다. Selenium은 여러 프로그래밍 언어(Python, Java, C#, Ruby 등)를 지원하며 다양한 브라우저(Chrome, Firefox, Edge, Safari 등)와 호환됩니다.


Python Selenium 주요 구성 요소

  1. WebDriver
    • Selenium에서 브라우저를 제어하기 위한 주요 도구입니다.
    • 브라우저의 동작(열기, 닫기, 페이지 이동 등)을 프로그래밍 방식으로 제어할 수 있습니다.
    • 브라우저별로 WebDriver가 다르므로, 사용하는 브라우저에 맞는 WebDriver를 설치해야 합니다.
      • 예: Chrome은 chromedriver, Firefox는 geckodriver
  2. Selenium WebDriver 주요 메서드
    • get(url): 특정 URL로 이동합니다.
    • find_element() / find_elements(): 웹 페이지에서 특정 요소를 검색합니다.
    • send_keys(): 입력 필드에 텍스트를 입력합니다.
    • click(): 클릭 가능한 요소를 클릭합니다.
    • execute_script(): JavaScript 코드를 실행합니다.
    • quit(): 브라우저를 종료합니다.
  3. Selector(선택자)
    • Selenium은 HTML 요소를 찾기 위해 다양한 선택 방법을 제공합니다.
      • By.ID: 요소의 ID를 기준으로 검색
      • By.NAME: 요소의 name 속성을 기준으로 검색
      • By.CLASS_NAME: 클래스 이름으로 검색
      • By.TAG_NAME: 태그 이름으로 검색
      • By.CSS_SELECTOR: CSS 선택자를 사용
      • By.XPATH: XPath 표현식을 사용
  4. Browser Options
    • WebDriver는 브라우저 옵션을 설정할 수 있습니다.
    • 예: 헤드리스 모드, 프록시 설정, 디버깅 로그 비활성화 등.
    • Options 객체를 사용하여 브라우저 설정을 추가합니다.
      from selenium.webdriver.chrome.options import Options
      options = Options()
      options.add_argument('--headless')  # 브라우저 UI 비활성화

설치 및 기본 사용법

설치

  1. Selenium 라이브러리 설치:
    pip install selenium
  2. WebDriver 다운로드:

간단한 예제: 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 사용 팁

  1. 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")) )
  2. 헤드리스 모드
    • UI를 띄우지 않고 브라우저를 백그라운드에서 실행합니다.
      from selenium.webdriver.chrome.options import Options
      options = Options()
      options.add_argument("--headless")
      driver = webdriver.Chrome(options=options)
  3. 동적 웹사이트 처리
    • AJAX나 JavaScript로 동적으로 로드되는 웹사이트의 경우 Explicit Wait을 적극 활용하거나 필요한 경우 JavaScript 실행으로 요소를 강제 로드.
  4. 로봇 감지 회피
    • Selenium은 자동화로 간주될 수 있어 차단될 수 있습니다.
    • 브라우저 옵션을 추가하여 탐지를 줄일 수 있습니다:
      options.add_argument("--disable-blink-features=AutomationControlled")
  5. 스크린샷
    • 현재 페이지의 스크린샷을 저장:
      driver.save_screenshot("screenshot.png")

Selenium의 한계

  1. 속도: 실제 브라우저를 사용하기 때문에 속도가 느립니다.
  2. 차단 가능성: 많은 웹사이트에서 Selenium의 자동화를 탐지하고 차단.
  3. 동시 작업: 여러 브라우저 인스턴스를 병렬로 실행하면 성능에 영향을 미칠 수 있습니다.
  4. 대안 도구: 단순한 데이터 수집 작업은 BeautifulSoup, Requests 같은 라이브러리가 더 적합할 수 있습니다.

Selenium 활용 사례

  1. 웹 스크래핑: 동적으로 로드되는 데이터를 추출.
  2. UI 테스트 자동화: 웹 애플리케이션 테스트 스크립트 작성.
  3. 브라우저 작업 자동화: 계정 로그인, 양식 작성, 반복 작업 자동화.
  4. 데이터 수집 및 분석: 다양한 웹사이트에서 데이터 크롤링 및 정리.

반응형

댓글