-
selenium v4.0 (python)python 2023. 4. 10. 00:20
undetected-chromedriver ↓
더보기undetected-chromedriver는 유저가 headless browser를 사용하는것이 아닌 진짜 chrome을 실행시키는 것처럼 속이는 것이다.
설치
pip install undetected-chromedriver selenium코드 - webdriver 대신 uc를 import한다.
import undetected_chromedriver as uc import time options = uc.ChromeOptions() options.headless = False driver = uc.Chrome(options=options) driver.get('https://abrahamjuliot.github.io/creepjs/') time.sleep(60) driver.quit()위 사이트에 접속했을 때, 0% headless가 뜨면 성공한 것이다.

설치
pip install selenium pip install webdriver_managerimport
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.keys import Keys from webdriver_manager.chrome import ChromeDriverManager1. 세션 시작하기
options = webdriver.ChromeOptions() driver = webdriver.Chrome(service=Service(executable_path=ChromeDriverManager().install()), options=options)2. 브라우저에 액션 취하기
url 이동
driver.get("https://www.selenium.dev/selenium/web/index.html")뒤로 가기
driver.back()앞으로 가기
driver.forward()새로고침
driver.refresh()3. 브라우저 정보 요청하기
title 얻기
title = driver.title현재 url 얻기
url = driver.current_url4. 기다리는 전략 세우기
암시적 기다림:
글로벌 세팅으로, 기본값은 0이다. element를 찾을 수 없다면 바로 error를 반환하지만, 값이 설정되어있다면 에러를 반환하기 전에 명시된 시간만큼 기다린다. 단위: s
driver.implicitly_wait(2)분명한 기다림:
구체적인 상태가 true가 될 때까지 기다린다. timeout만큼 상태가 충족되지 않을 경우 timeout error가 발생한다.
revealed = driver.find_element(By.ID, "revealed") driver.find_element(By.ID, "reveal").click() wait = WebDriverWait(driver, timeout=2) wait.until(lambda d : revealed.is_displayed())excepted_conditions로 분명한 기다림:
WebDriverWait(driver, 10).until(EC.title_is('NAVER'))메소드들:
title_is
title_contains
presence_of_element_located
visibility_of_element_located
visibility_of
presence_of_all_elements_located
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_present5. element 찾기
class name으로 찾기
driver.find_element(By.CLASS_NAME, "information")css selector로 찾기
driver.find_element(By.CSS_SELECTOR, "#fname")id로 찾기
driver.find_element(By.ID, "lname")name으로 찾기
driver.find_element(By.NAME, "newsletter")링크의 텍스트로 찾기
driver.find_element(By.LINK_TEXT, "Selenium Official Page")링크의 텍스트의 부분으로 찾기
driver.find_element(By.PARTIAL_LINK_TEXT, "Official Page")xpath로 찾기
driver.find_element(By.XPATH, "//input[@value='f']")전체 DOM에서 찾기
vegetable = driver.find_element(By.CLASS_NAME, "tomatoes")DOM의 부분집합에서 찾기
fruits = driver.find_element(By.ID, "fruits") fruit = fruits.find_element(By.CLASS_NAME,"tomatoes")찾기 최적화: 부분집합에서 찾기는 명령을 여러번 이행해야 한다. 그치만 css selector나 xpath를 사용해 한번에 원하는 요소를 찾을 수 있다.
fruit = driver.find_element(By.CSS_SELECTOR,"#fruits .tomatoes")모든 요소 찾기
하나의 요소가 아닌 여러 요소를 찾고싶을 때 사용한다.
plants = driver.find_elements(By.TAG_NAME, "li")focus된 요소 찾기
focusEle = driver.switch_to.active_element6. element에서 행동 취하기
클릭하기
driver.find_element(By.NAME, "color_input").click()키보드 입력 보내기
driver.find_element(By.NAME, "email_input").send_keys("admin@localhost.dev"+Keys.ENTER)Keys: https://www.w3.org/TR/webdriver/#keyboard-actions
요소의 콘텐트를 클리어
driver.find_element(By.NAME, "email_input").clear()7. element 정보 요청
화면에 display되었으면 true 아니면 false
is_email_visible = driver.find_element(By.NAME, "email_input").is_displayed()enable이면 true 아니면 false
value = driver.find_element(By.NAME, 'button_input').is_enabled()선택되었으면 true 아니면 false
체크박스, 라디오버튼, input 요소 등등에 사용된다.
value = driver.find_element(By.NAME, "checkbox_input").is_selected()tagName 반환
attr = driver.find_element(By.NAME, "email_input").tag_name사이즈와 포지션 얻기
res = driver.find_element(By.NAME, "range_input").rectcss값 얻기
cssValue = driver.find_element(By.ID, "namedColor").value_of_css_property('background-color')텍스트 반환
text = driver.find_element(By.ID, "justanotherlink").textattribute 데이터 얻기
# Identify the email text box email_txt = driver.find_element(By.NAME, "email_input") # Fetch the value property associated with the textbox value_info = email_txt.get_attribute("value") # 외부 HTML 얻기 value_info = email_txt.get_attribute("outerHTML") # 내부 HTML 얻기 value_info = email_txt.get_attribute("innerHTML")8. 세션 끝내기
driver.quit()예제
import time from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.keys import Keys from webdriver_manager.chrome import ChromeDriverManager def main(): options = webdriver.ChromeOptions() driver = webdriver.Chrome(service=Service(executable_path=ChromeDriverManager().install(), options=options)) try: driver.get("https://www.naver.com/") WebDriverWait(driver, 10).until(EC.title_is('NAVER')) driver.find_element(By.CSS_SELECTOR, '#query').send_keys('black' + Keys.ENTER) time.sleep(3) finally: driver.quit() main()해당 코드를 실행하면 네이버에서 black을 검색한 후 종료한다.
참조: https://www.selenium.dev/documentation/webdriver/
-
'python' 카테고리의 다른 글
파이썬 소켓 통신 (0) 2025.12.03 asyncio 라이브러리 (0) 2025.08.23 파이썬 sorted 정렬 조건 정해주기 (0) 2022.07.08 파이썬 리스트 인덱스 여러개 찾기 (0) 2022.06.30 파이썬 공식문서 (내장함수 정의 보는법) (0) 2022.05.15