Selenium Webdriver

Selenium WebDriver는 웹 브라우저를 자동화하기 위한 도구 및 라이브러리 모음입니다. Selenium 프로젝트의 일부로, 주로 웹 애플리케이션의 자동 테스트를 위해 개발되었지만, 웹 브라우저를 자동화하는 어떤 작업에도 사용될 수 있습니다. WebDriver는 다양한 프로그래밍 언어로 제공되는 API를 통해 다양한 브라우저와 그들의 기본적인 요소들을 조작합니다. Selenium WebDriver의 주요 기능은 다음과 같습니다

  • 브라우저 제어: WebDriver는 Firefox, Chrome, Internet Explorer, Safari 등과 같은 다양한 웹 브라우저를 지원합니다. 또한, 각 브라우저에 맞는 드라이버를 통해 해당 브라우저를 실행하고 제어할 수 있습니다.
  • 페이지 요소와의 상호작용: 웹 페이지에 있는 다양한 요소, 예를 들어 텍스트 박스, 버튼, 체크박스 등을 찾아 상호작용할 수 있습니다. 요소를 찾는 방법으로는 ID, 이름, 클래스 이름, 태그 이름, XPath, CSS 선택자 등이 있습니다.
  • 페이지 정보 수집: 웹 페이지의 소스 코드를 가져오거나, 요소의 텍스트 값을 읽어오거나, 요소의 속성 값을 확인하는 등 페이지 정보를 수집하는 기능을 제공합니다.
  • 페이지 내비게이션: 웹 페이지 간에 이동하거나, 뒤로 가기, 앞으로 가기, 페이지 새로고침과 같은 브라우저의 내비게이션 기능을 자동화할 수 있습니다.
  • 쿠키 관리: 세션 관리를 위해 쿠키를 추가, 삭제, 조회하는 기능을 제공합니다.
  • 실행 중인 JavaScript 다루기: 페이지 내에서 JavaScript 코드를 실행할 수 있어, 복잡한 사용자 인터랙션을 시뮬레이션하거나 페이지에 접근할 수 없는 정보를 얻는 데 사용할 수 있습니다.
  • 창 관리: 새 창이나 탭을 열고, 사이즈를 조절하거나, 다른 창으로 전환하는 등의 창 관리 기능을 지원합니다.
  • 스크린샷 캡쳐: 테스트 실행 중의 화면을 스크린샷으로 캡쳐하여 기록을 남길 수 있습니다.
  • 웨이트 기능: 페이지의 요소가 로드될 때까지 기다리거나, 특정 조건이 충족될 때까지 대기하는 명시적(explicit) 및 암시적(implicit) 대기 기능을 제공합니다. WebDriver를 사용하면 이러한 기능들을 프로그래밍적으로 제어할 수 있어, 웹 애플리케이션 테스트를 자동화하고 효율성을 높일 수 있습니다. 이는 개발의 일부로 통합 테스트를 수행하거나, 반복되는 웹 작업을 자동화하는 데 유용합니다.


셀레늄 설치 & 설정

  • 패키지 설치
  • 브라우저의 드라이버를 인스턴스화
  • URL 전달
  • 브라우저 열린채로 유지하기


close()와 quit()차이

  • close() : 특정 페이지가 열려 있는 현재 활성 탭 하나를 닫음
  • quit() : 브라우저 전체를 종료

1



셀레늄의로 웹사이트에서 요소를 찾고 선택하는 방법

2

  • text가져오려면 .text

  • 이름으로 요소 찾는 기능 자주 사용됨

  
search_bar = driver.find_element(By.NAME, value="q")

ID도 마찬가지로 찾을  있음
  
  • CSS 선택자를 사용해서 찾기
  
test = driver.find_element(By.CSS_SELECTOR, value=".div-class-name a")

  • 모든 방법으로 찾지 못했다면 Xpath로 요소 찾기
    3


4


  • find_elements()메서드 : 조건에 맞는 모든 요소를 찾아 리스트로 반환함



셀레늄을 사용해서 웹사이트 데이터 스크래핑

5


6


7



공백 프로젝트에서 셀레늄 사용하기 & 다른 데이터 스크래핑하기

9


8



셀레늄으로 양식 작성 및 버튼 클릭을 자동화하는 방법

  • click()사용

1


입력하려면

  • 검색창 가져오기

2


StaleElementReferenceException

웹 페이지에서 자동화된 테스트를 실행하는 동안 발생하는 Selenium WebDriver의 일반적인 예외 중 하나
참조하려는 웹 요소가 페이지에서 이미 사라지거나 변경되어 더 이상 유효하지 않을 때 발생

3


  • 해결방법
  1. 페이지가 완전히 로드될 때까지 기다리기 : WebDriverWait와 같은 명시적 대기를 사용하여, 검색 창 요소가 완전히 로드되고 상호 작용 가능한 상태가 될 때까지 기다리게 함

  2. 요소가 stale 상태일 때 재탐색하기 : 요소가 stale 상태가 되었을 때 이를 잡아내고, 같은 요소를 다시 찾아서 상호 작용하는 재시도 로직을 구현

4


5



  • 리턴 키 누르기

Keys() import하기

❌ 별도로 썼을 때 오류남

search.send_keys("python")
search.send_keys(Keys.ENTER)


⭕️ 실행 됨

호출에 모든 키 입력을 함께 전송하는 것이 해당 웹 페이지와 더 호환되는 것
두 입력 사이에 어떠한 상태 변화도 허용하지 않으므로, 더 안정적인 동작을 제공할 수 있다

search.send_keys("python" + Keys.ENTER)



셀레늄을 사용해서 자동적으로 이름, 이메일 입력하고 sign up버튼 누르기

6