본문 바로가기
공부기록/파이썬

Python + Selenium 특정 요소가 로드된 후 원하는 데이터 가지고 오기(선택자 종류 소개)

by 책읽는 개발자 ami 2023. 6. 30.
728x90
반응형

2023.06.29 - [공부기록/파이썬] - Python + Selenium으로 크롤링 시작하기(예제 있음)
파이썬에서 셀레니움을 시작하는 방법은 위 글을 참조해주세요.

* WebDriverWait 클래스와 expected_conditions 모듈을 사용하여 특정 요소가 로드된 이후 원하는 데이터를 가지고 올 수 있습니다.
* 아래 코드를 참조해주세요.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 웹 드라이버 설정
driver = webdriver.Chrome()

# 웹 페이지 열기
driver.get('https://example.com')

# 특정 요소가 로드될 때까지 기다리기
wait = WebDriverWait(driver, 10)
element_locator = (By.CSS_SELECTOR, '.my-element-class')

# 요소가 나타날 때까지 기다림
element = wait.until(EC.presence_of_element_located(element_locator))

# 원하는 작업 수행
print(element.text)

# 웹 드라이버 종료
driver.quit()


위 코드에서 wait.until() 메서드를 사용하여 EC.presence_of_element_located() 조건을 기다립니다.
이 조건은 특정 요소가 페이지에 나타날 때까지 기다리는데 사용됩니다.

By.CSS_SELECTOR를 통해 CSS 선택자를 지정하고, .my-element-class와 같이 원하는 요소의 클래스 또는 선택자를 전달합니다.
요소가 나타나면 wait.until() 메서드는 해당 요소를 반환하고, 그 후에는 원하는 작업을 수행할 수 있습니다.
위 예시에서는 해당 요소의 텍스트를 출력하고 있습니다.

마지막으로, 웹 드라이버를 종료합니다.

By.CSS_SELECTOR 말고도 여러 선택자가 있습니다.

Selenium에서 사용할 수 있는 주요 선택자의 예시

1. ID 선택자: By.ID
예시: driver.find_element(By.ID, 'my-id')

2. 클래스 선택자: By.CLASS_NAME 또는 By.CSS_SELECTOR
예시: driver.find_element(By.CLASS_NAME, 'my-class')
예시: driver.find_element(By.CSS_SELECTOR, '.my-class')

3. 태그 선택자: By.TAG_NAME 또는 By.CSS_SELECTOR
예시: driver.find_element(By.TAG_NAME, 'div')
예시: driver.find_element(By.CSS_SELECTOR, 'div')

4. XPath 선택자: By.XPATH
예시: driver.find_element(By.XPATH, '//div[@class="my-class"]')

5. 속성 선택자: By.CSS_SELECTOR
예시: driver.find_element(By.CSS_SELECTOR, '[name="my-name"]')

6. 부모-자식 선택자: By.CSS_SELECTOR
예시: driver.find_element(By.CSS_SELECTOR, 'parent-tag > child-tag')

7. 형제 선택자: By.CSS_SELECTOR
예시: driver.find_element(By.CSS_SELECTOR, 'prev-tag + next-tag')

8. 포함 선택자: By.CSS_SELECTOR
예시: driver.find_element(By.CSS_SELECTOR, 'tag[attr*=value]')
728x90
반응형