본문 바로가기
Python/크롤링, 스크래핑 (Selenium 등등)

[Python] Selenium 설명, 사용 방법, 관련 모듈, 함수 등등

by dong_su 2024. 5. 28.

selenium(원하는 데이터가 동적인 데이터일 때 사용)

크롬드라이버를 제어하거나 원하는 정보를 얻기 위해 사용, 사람의 행동을 컴퓨터 대신함

설치

-> pip install selenium


관련 패키지

# 관련 패키지
from selenium import webdriver
from seleniuhttp://m.webdriver.common.keys import Keys
from seleniuhttp://m.webdriver.common.by import By
from seleniuhttp://m.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from seleniuhttp://m.webdriver.chrome.options import Options
from seleniuhttp://m.webdriver.support.select import Select
import time

 

사용법

driver = webdriver.Chrome()  # webdriver 모듈을 사용하여 Chrome 드라이버 인스턴스 생성
url = 'https://www.naver.com'
driver.get(url)

조작 하는 순서와 방법

1) 조작을 원하는 버튼이나 입력창의 html을 파악 (F12 개발자도구 element 탭)

2) 아래의 함수에 html 정보를 입력해서 객체 (버튼/입력창 등) 선택 -> WebElement 객체 반환
find_element(By.ID, "ex")
find_element(By.CLASS_NAME, "ex")
find_element(By.XPATH)
find_element(By.CSS_SELECTOR, "태그명.class값") (공백은 .으로) 

or

find_element(By.CSS_SELECTOR, "태그명[속성명='속성값']")

 

- find_element()는 조건에 맞는 첫 번째 요소를 반환, 존재하지 않다면 NoSuchElementException 예외 발생
- find_elements()는 조건에 맞는 모든 요소를 반환, 해당 요소가 없을 경우에는 빈 리스트 []를 반환

 

- 요소의 옵션 접근, 추출 (변수명.get_attribute(속성명))
class 속성 값: element.get_attribute('class')
id 속성 값: element.get_attribute('id')
style 속성 값: element.get_attribute('style')
텍스트 : element.text
사이트 제목(타이틀) : driver.title

3) 기능 동작 관련 함수로 원하는 기능 조작
클릭 : .click()
키 입력 : .send_keys()
엔터 :send_keys(Keys.RETURN, ENTER)


Alert 창

alert = driver.switch_to.alert

# accept()는 확인, 
alert.accept()

# dismiss()는 취소
alert.dismiss()

셀렉트박스 (드롭다운 메뉴)

# ID가 selectBox인 요소 접근
select = Select(driver.find_element(By.ID, "selectBox"))

# 셀렉트박스에서 인덱스가 1인 요소
select.select_by_index(1)

# 셀렉트박스에서 텍스트가 Cat인 요소
select.select_by_visible_text('Cat')

# 셀렉트박스에서 value가 hamster인 요소
select.select_by_value('hamster')

드라이버 종료

driver.quit()

웹 드라이버 세션을 완전히 종료하므로 현재 세션과 관련된 모든 창과 리소스를 해제합니다. 이는 브라우저 창이나 탭이 열려 있는 경우에도 동작합니다. 따라서 quit()을 호출하면 모든 웹 브라우저 인스턴스가 닫히고, 웹 드라이버도 종료됩니다.

 

driver.close()
현재 열려 있는 창 또는 탭을 닫습니다. 즉, 현재 세션에서 하나의 창을 닫을 때 사용됩니다.

다만, 이 메서드는 현재 세션에 다른 창이나 탭이 열려 있는 경우에는 해당 세션은 여전히 열려 있습니다.

만약 세션에 여러 창이나 탭이 열려 있는 경우, close()를 호출하여 현재 창을 닫으면 아직 열려 있는 다른 창 또는 탭들은 그대로 유지됩니다.

 

따라서 quit()은 모든 창과 웹 드라이버를 종료하고, close()는 현재 세션에서 하나의 창만을 닫습니다.