Selenium 사용법 - 101

Yubin's velog ! ·2023년 8월 29일

101 Series

목록 보기
1/1
post-thumbnail

Selenium 이란?

  • open-source suite of tools for automating web browsers
  • Provides frameworks to automate interactions with web elements, simulate user actions, and perform various test
  • 웹 브라우저 및 플랫폼에서 웹 응용 프로그램/Application을 위한 오픈 소스 테스트 자동화 프레임워크
  • 직접 request 등을 하는 기존의 크롤러와는 달리, Selenium은 마우스, 키보드의 동작과 디스플레이에 바로 나타나는 HTML과의 상호작용에서 더 큰 역할을 함
  • 정적인 웹페이지를 핸들링할 때 urllib/ requests 의 패키지를 사용하여 beautifulsoup으로 parsing 진행하는 반면, Selenium의 경우, 동적인 웹페이지에 조금 더 focus 되어 있다 !

  • 일반적인 동작 원리는?
    • 페이지 정보를 직접 받아오는 대신, 해당 브라우저를 직접 실행
    • 브라우저의 드라이버를 통해 페이지 정보를 받아와서, 상호작용할 수 있는 정보들 (클릭 버튼) 등의 포인트를 검색해 가져옴
    • 일반적인 크롤러보다 상호작용적인 성격이 훨씬 강함

Components of Selenium

  1. Selenium WebDriver
    • 웹 브라우저를 컨트롤할 수 있는 프로그래밍 인터페이스(API)를 제공
    • 브라우저와 interact할 수 있도록 다양한 프로그래밍 언어 사용을 가능케 해줌
    • directly communicates with the browser-specific APIs
    • different web browsers have their own unique features and APIs. Therefore, webdriver implementations are specific to each browser. (chrome - chrome web driver, edge - edge webdirver)
  2. Selenium IDE
    • IDE for creating and recording browser interactions. user-friendly, but less flexible than webdriver
  3. Selenium Grid
    • tool used for parallel testing across multiple browsers and platforms simultaneously

-> 보통 Selenium 이라고 한다면, 위 세가지를 모두 아울러서 이야기한다. 셀레니움을 공부하다 보면, `webdriver` 이라는 말을 정말 많이 보는데, 이는 서로 독립적인 개념이 아니라 webdriver은 selenium의 하위 개념이라는 것을 알 수 있다 !

How about SessionCreatedException 🤠 ?

종종 webdriver의 버전이 맞지 않아서 SessionCreatedException 이 발생하는 경우가 있는데,

이럴 때는 webdriver의 업데이트가 필요하다.

(= 즉, 내가 작성한 code에서 사용되는 Selenium webdriver와 browser 의 버전이 일치해야 한다. Selenium이 아닌 WebDriver을 업그레이드 해야 하는 이유는 단순한데, 그 이유는 스크립트(using WebDriver)와 브라우저에 communication을 담당하는 요소만 업데이트를 하면 되기 때문이다 !

즉, 브라우저의 버전과 일치하는 webdriver을 다운 받으면 된다 !

보통 webdriver은 자신이 사용할 드라이버의 버전을 확인하고, 그 버전에 맞는 드라이버를 다운 및 해당 파일 경로를 path값으로 넘겨줘서 실행된다.


그러나 생각보다 업데이트 주기가 짧지 않다. (사실.. 자주인 것 같다..) 그때마다 하나씩 바꿔도 되지만, 자동으로 install 하는 방법이 없을까 고민을 하다 방법을 찾았다.



Webdriver 최신 상태 유지 방법

1. Manual download
- SessionCreatedException 문제가 발생하면, 필요한 버전을 직접 다운로드 하는 방식

2. autoinstaller or driver manager 설치
- 현재 사용하고 있는 브라우저의 버전을 알고 싶은 경우가 있는데, 이때는 하기와 같이 확인하면 된다. 대부분 앞에 있는 숫자로 큰 버전이 이루어지기에 앞에 숫자만 확인하고 진행하여도 무방하다.

  • 개인적으로 나는 driver manager 이 더 직관적이고 좋은 것 갘다 ㅎㅎ

  • a. autoinstaller 라이브러리 사용

  • b. webdriver_manager 라이브러리 사용
    - WedDriver을 사용할 때 발생하는 가장 큰 문제점은 installation과 compatiability(호환성)이다. 이유인 즉슨, 각 브라우저의 버전은 특정 webdriver의 버전과 맞아야 하는데, 매번 최신으로 업데이트 해주는 방식이 다소 불편하기에 webdriver manager 이라는 라이브러리가 생겼다. 해당 라이브러리는 자동적으로 사용하고 있는 브라우저에 필요한 web driver를 관리하고 다운로드할 수 있는 편리한 방식을 제공한다 (밑에 코드 참고 )

    # 현재 Microsoft Edge 버전 확인하기 
    from selenium import webdriver
    import edgedriver_autoinstaller
    ver_check = edgedriver_autoinstaller.get_edge_version()
    edge_ver = ver_check.split(".")[0]
       
    # 현재 Chrome 버전 확인하기 
    from selenium import webdriver
    import chromedriver_autoinstaller
    ver_check = chromedriver_autoinstaller.get_chrome_version()
    chrome_ver = ver_check.split(".")[0]
      
      
    # (1) 첫번째 대안 : autoinstaller 사용 (1)  - 정확한 이유는 모르겠지만 내 환경에서는 제대로 작동이 안된다.
    edgedriver_autoinstaller.install(True)	# Edge
    chromedriver_autoinstall.install(True)	# Chrome
    
       
    # (2) 그래서 찾은 두번째 대안: webdriver manager로 최신 업데이트로 진행 (2)
    from selenium import webdriver
    from webdriver_manager.microsoft import EdgeChromiumDriverManager
    driver = webdriver.Edge(EdgeChromiumDriverManager().install())  # Edge
    driver = webdriver.Edge(EdgeChromiumDriverManager().install())	# Chrome
       
 


0개의 댓글