1. Selenium
Selenium은 자동화된 웹 브라우저 테스트를 수행하는 툴이다. 자바, 파이썬, 루비 등 다양한 언어로 작성된 테스트를 지원한다. 또한, Selenium WebDriver를 사용하여 여러 브라우저(크롬, 파이어폭스, 사파리 등)를 자동으로 제어할 수 있다. 이를 통해 개발자는 브라우저에서 발생하는 다양한 이벤트(클릭, 텍스트 입력 등)를 자동으로 시뮬레이션하고, 웹 애플리케이션의 동작을 자동화하여 테스트할 수 있다.
2. 사용 방법
Selenium을 사용하여 웹 애플리케이션의 동작을 자동화하는 방법은 다음과 같다.(주피터 랩을 사용해야한다.)
1) Selenium WebDriver를 사용하기 위해 해당 언어의 라이브러리를 설치합니다. 라이브러리 설치 방법은 각 언어별로 다르다.
2) 사용하려는 브라우저에 맞는 WebDriver를 다운로드하고 설치해야 한다. 각 브라우저마다 WebDriver가 다르기 때문에 주의해야 한다.
3) 작성하려는 테스트 스크립트에서 WebDriver를 불러와 해당 브라우저를 제어한다.
4) 테스트를 위한 필요한 동작들을 코드로 작성한다. 클릭, 텍스트 입력 등 다양한 동작들을 자동으로 시뮬레이션하여 테스트할 수 있다.
5) 작성한 스크립트를 실행하여 웹 애플리케이션을 자동으로 테스트한다.
위의 단계들을 차근차근 따라하면 Selenium을 이용하여 웹 애플리케이션을 자동으로 테스트할 수 있다.
- ChromeWebDrive.exe : https://googlechromelabs.github.io/chrome-for-testing/#stable
- https://storage.googleapis.com/chrome-for-testing-public/122.0.6261.94/win64/chromedriver-win64.zip
- 파이어폭스: https://github.com/mozilla/geckodriver/releases
- Edge : https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
3. 기본 사용법
3-1. Selenium 설치 및 불러오기
3-2. WebDriver 제어
1) 드라이버 열기
2) URL 이동하기
3) Elements 제어 및 선택
'elements'는 웹 페이지에 존재하는 각 객체들을 말하며, 해당 객체를 선택하여 상호작용을 할 수 있도록 할 수 있다.
Elements를 선택하는 방법은 찾는 Elements가 단일 Element인지, 복수의 Elements인지에 따라 두 가지로 선택할 수 있다.
driver.find_element( Element 매칭 형식 , 매칭될 값 )
driver.find_elements( Elements 매칭 형식 , 매칭될 값 )
# Elements 매칭형식 선택
# CSS 선택자
elm = driver.find_element(By.CSS_SELECTOR, 'div>h3.title')
# ID 선택
elm = driver.find_element(By.ID, "id")
# Class 선택
elm = fruits.find_element(By.CLASS_NAME,"class")
# Tag 선택
elm= driver.find_elements(By.TAG_NAME, "li")
# XPATH 선택
elm= driver.find_elements(By.XPATH, '//*[@id="query"]')
elements를 선택한뒤에 해당 elements를 제어하여 web드라이버를 자동으로 조정할 수 있다.
clear() : 해당 Element의 Text칸을 비움
send_key() : 일반적으로 Text나 특정 Key등을 입력
click() : 해당 Element를 클릭
execute_script( 자바스크립트 코드 ) : 자바스크립트 코드를 실행시켜 웹을 동작시킨다.
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
# Navigate to url
driver.get("http://www.google.com")
# Store 'SearchInput' element
SearchInput = driver.find_element(By.NAME, "q")
SearchInput.send_keys("selenium")
# Clears the entered text
SearchInput.clear()
# 스크롤 내리기
driver.execute_script("window.scrollBy(0, 100);")
# 스크롤 올리기
driver.execute_script("window.scrollBy(0, -100);")
3-3.Wait(대기)
브라우저에서 페이지를 로드하면 해당 페이지의 요소가 생성되는 데 걸리는 로드 시간 전에 코드가 실행되어 요소가 없다고 나타날 수 있다. 즉, 요소가 DOM에 없는 경우 locate 함수는 ElementNotVisibleException 예외를 발생시킨다.
1) 암시적 대기
implicitly_wait() 함수는 WebDriver가 즉시 사용할 수 없는 요소를 찾으려고 할 때 특정시간 기다린다. 최대시간을 설정하고 해당 시간안에 요소가 생성되면 다음으로 진행된다.
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('웹페이지')
driver.implicitly_wait(5)
elm = driver.find_element(By.CSS_SELECTOR, 'div > h3.title')
print(elm.text)
import time
driver = webdriver.Chrome()
driver.get('웹페이지')
time.sleep(5)
elm = driver.find_element(By.CSS_SELECTOR, 'div > h3.title')
print(elm.text)
2) 명시적 대기
WebDriverWait()은 특정 조건이 성립될때까지 특정시간만큼 기다린다. 예를들어 “특정 버튼이 클릭될때까지 대기하며, 최대 10초 대기한다” 와 같은 상황을 만들 수 있다.
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://tv.naver.com/v/27508877")
elm = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "btn_skip")))
Selenium의 expected_conditions 모듈에서 제공되는 메소드로, 주로 WebDriverWait와 함께 사용된다. 각각의 메소드는 다음과 같은 역할을 한다.
- title_is: 페이지의 제목이 일치하는지 확인한다.
- title_contains: 페이지의 제목에 지정한 문자열이 포함되어 있는지 확인한다.
- presence_of_element_located: 지정한 요소가 DOM에 존재하는지 확인한다.
- visibility_of_element_located: 지정한 요소가 화면에 보이는지 확인한다.
- visibility_of: 지정한 요소가 화면에 보이는지 확인한다.
- presence_of_all_elements_located: 모든 지정한 요소가 DOM에 존재하는지 확인한다.
- text_to_be_present_in_element: 지정한 요소에 지정한 문자열이 포함되어 있는지 확인한다.
- text_to_be_present_in_element_value: 지정한 요소의 값에 지정한 문자열이 포함되어 있는지 확인한다.
- frame_to_be_available_and_switch_to_it: 지정한 프레임이 사용 가능한 상태인지 확인하고 해당 프레임으로 전환한다.
- invisibility_of_element_located: 지정한 요소가 화면에서 사라지는 것을 기다린다.
- element_to_be_clickable: 지정한 요소가 클릭 가능한 상태인지 확인한다.
- staleness_of: 지정한 요소가 화면에서 사라지는 것을 기다린다.
- element_to_be_selected: 지정한 요소가 선택된 상태인지 확인한다.
- element_located_to_be_selected: 지정한 요소가 선택된 상태인지 확인한다.
- element_selection_state_to_be: 지정한 요소가 지정한 선택 상태가 되는 것을 기다린다.
- element_located_selection_state_to_be: 지정한 요소가 지정한 선택 상태가 되는 것을 기다린다.
- alert_is_present: 경고 상자가 나타나는 것을 기다린다.
4. 실습
4-1. 네이버 로그인하기
4-2. 이미지 찾아서 전부 가져오기
'컴퓨터 영상 처리 > Crawling' 카테고리의 다른 글
웹 크롤링(Web_Crawling) (0) | 2024.03.04 |
---|
댓글