Seung's Learning Record

[Python] 웹 스크래핑 라이브러리 - Selenium 본문

프로그래밍/Python

[Python] 웹 스크래핑 라이브러리 - Selenium

70_0ewd 2024. 4. 4. 15:26

 

 

목차

 

     

    이전 포스팅에서 알아본 BeautifulSoup는 주로 정적인 웹 페이지에서의 데이터 추출을 위해 사용되는 라이브러리이다. 하지만 우리가 평소 사용하는 웹 사이트는 동적인 웹 페이지로 구성되어있는 경우가 더 많다. 이러한 경우에 사용할 수 있는 웹 스크래핑 도구인 Selenium에 대해서 알아보자.


     Selenium  

    Selenium 이란?

    selenium은 웹 어플리케이션의 동적인 요소와 상호작용하기 위한 자동화 도구로 사용된다. 실제 브라우저를 제어하여 자바스크립트를 실행하고, 클릭, 텍스트 입력 등의 사용자 동작을 시뮬레이션한다. 


    기본적인 사용법

    selenium 라이브러리에 있는 webdriver 모듈을 통해 웹 사이트에 직접적으로 접근해 제어가 가능하다. 크롬을 통해 웹 사이트에 접근할 것이기 때문에 ChromeDriverManager와 Service 모듈도 import 하였다.
    ChromeDriverManager는 크롬 웹 드라이버를 자동으로 다운로드하고 설치하는데 사용되고, Service는 크롬 드라이버를 로컬에서 실행하기 위한 서비스를 설정하는데 사용된다.

    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from webdriver_manager.chrome import ChromeDriverManager
    
    driver1 = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
    driver1.get("https://www.example.com")
    print(driver1.page_source)
    driver1.quit()
    
    with webdriver.Chrome(service=Service(ChromeDriverManager().install())) as driver2:
        driver2.get("http://www.example.com ")
        print(driver2.page_source)

    driver1 처럼 객체를 설정할 경우, 크롬 브라우저는 quit을 만나기 전까지 계속 창이 열려있게 된다. 그렇기 때문에 driver2처럼 with..as : 구문을 사용하여 구문내의 명령어들이 끝날 경우 해당 브라우저 창이 자동으로 종료되게끔 하는 방법이 더 선호된다.


     주요 메서드   

    get(url)

    지정된 url로 웹 브라우저를 이동하는 메서드

    driver.get("https://www.example.com")

    find_element(by, value)

    지정된 조건에 맞는 첫 번째 웹 요소를 찾는 메서드. by에는 찾을 요소의 방법을 지정하고, value에는 해당 방법에 대한 값을 지정한다.

    element = driver.find_element(by="id", value="example_id")

    implicitly_wait(time)

    지정된 시간동안 웹 요소가 나타날 때까지 대기하는 메서드. 웹 요소가 나타나면 대기 종료됨

    driver = webdriver.Chrome()
    driver.implicitly_wait(10)  # 10초 동안 대기
    driver.get("https://www.example.com")

    explicitly_wait(time)

    지정된 시간동안 특정 조건이 충족될 때까지 대기하는 메서드. 특정 조건 충족되면 대기 종료됨

    driver = webdriver.Chrome()
    driver.get("https://www.example.com")
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "example_id")))

     이벤트 처리   

    Selenium을 활용하면 마우스 및 키보드 이벤트를 처리하여 사용자가 웹 브라우저에서 수행하는 동작을 시뮬레이션해볼 수 있다. 

    마우스 이벤트 처리

    ActionChains 클래스를 사용하여 마우스 동작을 시뮬레이션한다. 이 클래스는 여러 마우스 동작을 연속적으로 실행할 수 있게 해준다. 주요 메서드로는 move_to_element(), click(), double_click(), context_click(), drag_and_drop(), drag_and_drop_by_offset() 등이 있다.

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    
    driver = webdriver.Chrome()
    driver.get("https://www.example.com")
    
    # 요소에 대한 ActionChains 객체 생성
    element = driver.find_element_by_id("example_id")
    actions = ActionChains(driver)
    
    # 요소 위로 이동 후 클릭
    actions.move_to_element(element).click().perform()
    
    # 요소를 드래그 앤 드롭
    target_element = driver.find_element_by_id("target_id")
    actions.drag_and_drop(element, target_element).perform()

    키보드 이벤트 처리

    Keys 클래스를 사용하여 특수 키(Enter, Shift, Ctrl 등)의 입력을 처리하고, send_keys() 메서드를 사용하여 텍스트 필드에 키를 입력할 수 있다.

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    
    driver = webdriver.Chrome()
    driver.get("https://www.example.com")
    
    # 텍스트 필드에 키 입력하기
    search_input = driver.find_element_by_id("search_input_id")
    search_input.send_keys("Selenium")
    
    # 엔터 키 누르기
    search_input.send_keys(Keys.RETURN)

    '프로그래밍 > Python' 카테고리의 다른 글

    [Python] 데이터 시각화 라이브러리 - Seaborn  (0) 2024.04.05
    [Python] 웹 스크래핑 라이브러리 - beautifulsoup  (1) 2024.04.03
    [Python] PEP8 스타일  (0) 2024.03.28
    [Python] 큐(Queue)  (0) 2024.03.28
    [Python] 리스트  (0) 2024.03.28