[python] selenium updated_at: 2024-12-14 03:26

selenium

브라우저를 이용하여 크로링등을 할때 주로 사용한다.

install

pip install -U selenium
pip install selenium

예제1

display 가 'none'으로 설정된 엘리먼트 내용 가져오기

from selenium import webdriver
from selenium.webdriver.common.by import By

def start():
  driver = webdriver.Chrome()
  url = "......"
  driver.get(url)

  table = driver.find_element(By.CLASS_NAME, 'tb_infor_03')
  tbody = table.find_element(By.TAG_NAME, 'tbody')
  rows = tbody.find_elements(By.TAG_NAME, 'tr')[0]
  body = rows.find_elements(By.TAG_NAME, 'td')
  # body = rows.find_elements(By.CLASS_NAME, 'mobileHide')
  driver.execute_script("var mobileHide = document.getElementsByClassName('mobileHide');for(var i=0; i < mobileHide.length; i++) mobileHide[i].style.display = 'block';")
  for index, value in enumerate(body):
    print(value.text)
  driver.quit()

start()

execute_script

자바스크립트를 실행할때 사용

driver.execute_script("var mobileHide = document.getElementsByClassName('mobileHide');for(var i=0; i < mobileHide.length; i++) mobileHide[i].style.display = 'block';")
driver.execute_script(
  "var mobileHide = document.getElementsByClassName('mobileHide');for(var i=0; i < mobileHide.length; i++) mobileHide[i].setAttribute('style', 'display:block !important');")
  

page_source

현재의 페이지소스를 가져온다.

page_source = driver.page_source

# BeautifulSoup를 사용하여 HTML 파싱
soup = BeautifulSoup(page_source, 'html.parser')

WebDriverWait

특정 조건을 만족할때 까지 대기한다.
동적으로 element 가 생성될때 그 element가 로딩될때 까지 대기한다.

from selenium.webdriver.support.ui import WebDriverWait

table = WebDriverWait(driver, 20).until(
  EC.presence_of_element_located((By.CLASS_NAME, 'my-class'))
)

expected_conditions

presence_of_element_located

특정 Element가 있는지 확인

from selenium.webdriver.support import expected_conditions as EC
EC.presence_of_element_located((By.ID, 'srchWord'))

element_to_be_clickable

클릭할 수 있는 element인지 확인

search_button = WebDriverWait(driver, 20).until(
  EC.element_to_be_clickable((By.CSS_SELECTOR, 'a.btn_normal.blue'))
)
search_button.click()
평점을 남겨주세요
평점 : 5.0
총 투표수 : 1

질문 및 답글