컴퓨터 영상 처리/Crawling

Selenium

Zoo_10th 2024. 3. 5.

1. Selenium

Selenium은 자동화된 웹 브라우저 테스트를 수행하는 툴이다. 자바, 파이썬, 루비 등 다양한 언어로 작성된 테스트를 지원한다. 또한, Selenium WebDriver를 사용하여 여러 브라우저(크롬, 파이어폭스, 사파리 등)를 자동으로 제어할 수 있다. 이를 통해 개발자는 브라우저에서 발생하는 다양한 이벤트(클릭, 텍스트 입력 등)를 자동으로 시뮬레이션하고, 웹 애플리케이션의 동작을 자동화하여 테스트할 수 있다.

 

2. 사용 방법

Selenium을 사용하여 웹 애플리케이션의 동작을 자동화하는 방법은 다음과 같다.(주피터 랩을 사용해야한다.)

1) Selenium WebDriver를 사용하기 위해 해당 언어의 라이브러리를 설치합니다. 라이브러리 설치 방법은 각 언어별로 다르다.

2) 사용하려는 브라우저에 맞는 WebDriver를 다운로드하고 설치해야 한다. 각 브라우저마다 WebDriver가 다르기 때문에 주의해야 한다.

3) 작성하려는 테스트 스크립트에서 WebDriver를 불러와 해당 브라우저를 제어한다.

4) 테스트를 위한 필요한 동작들을 코드로 작성한다. 클릭, 텍스트 입력 등 다양한 동작들을 자동으로 시뮬레이션하여 테스트할 수 있다.

5) 작성한 스크립트를 실행하여 웹 애플리케이션을 자동으로 테스트한다.

위의 단계들을 차근차근 따라하면 Selenium을 이용하여 웹 애플리케이션을 자동으로 테스트할 수 있다.

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. 이미지 찾아서 전부 가져오기

728x90

'컴퓨터 영상 처리 > Crawling' 카테고리의 다른 글

웹 크롤링(Web_Crawling)  (0) 2024.03.04

댓글