이 포스트의 설명은 chrome웹 브라우저를 기반으로, 다른 브라우저를 사용할 경우 아래 공식 홈페이지 참고

selenium 홈페이지 바로가기 link

1. selenium 소개

selenium은 파이썬을 사용해서 웹 브라우저를 조작하기 위한 라이브러리이다

아래 이미지는 selenium에서 제공하는 테스트 페이지이고 간단하게 Text input에 원하는 내용을 입력한 뒤, Submit버튼을 자동으로 누르는 코드를 작성 하려고 한다

image1

2. selenium 설치

selenium과 자동으로 chrome driver의 버전 관리를 위해 autoinstaller도 함께 설치(권장)

$ pip install selenium
$ pip install chromedriver-autoinstaller

이제 모든 준비는 완료… 드가자!

3. 코드작성 및 테스트

- 라이브러리 호출

# ChromeDriver 자동 설치 모듈
import chromedriver_autoinstaller
# Chrome을 제어하기 위한 객체
from selenium import webdriver
# Chrome의 웹 페이지 로딩 완료까지 딜레이
from selenium.webdriver.support.wait import WebDriverWait
# HTML요소 선택을 위해 사용
from selenium.webdriver.common.by import By
# 결과를 눈으로 확인 하기 위한 강제 딜레이 적용 // 필수 x
import time

# 실행 시 자동으로 chromedriver의 버전을 확인하고 설치
chromedriver_autoinstaller.install()
driver = webdriver.Chrome()

# 접속할 주소 (url 값은 실제 접속할 페이지의 주소로 변경)
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
# 최초 크롬 브라우저 가동 후 DOM이 로드 되고 해당 element가 생성되기 전까지 대기
driver.implicitly_wait(2)

- 수행할 기능 설정

이제 작업을 수행하기 위해 위에서 설명했듯이 Text-input과 Submit 버튼을 선택해 주어야 한다

text_box = WebDriverWait(driver, 5).until(lambda x: x.find_element(By.NAME, value="my-text"))

5초의 대기 시간을 갖지만, 뒤에 해당 element를 찾는다면 대기를 종료

by=By.NAME, value=”my-text“는 태그의 속성은 name이고 그 값으로 my-text 를 갖는 element를 선택 한다는 의미

image2

웹 페이지에서 개발자도구를 열어서 확인해 보면 input 태그의 name이라는 속성이 있고 my-text라는 값을 갖고 있음을 알 수 있다

마찬가지로 Submit 버튼도 선택

submit_button = WebDriverWait(driver, 5).until(lambda x: x.find_element(By.CSS_SELECTOR, value="button"))

조금 다른점은 CSS_SELECTOR를 활용해서 대상을 선택 해보았다. 상황에 따라 여러 옵션을 활용해 볼 수 있다

준비가 끝났으므로 바로 작동 시켜보자

# 위에 선택한 text_box에 send_keys라는 메서드에 인자값으로 "Selenium"을 전달 하면 입력이 실행 됩니다
text_box.send_keys("textbox에 입력할 문구를 입력하세요")
time.sleep(1)
# 마찬가지로 버튼 클릭
submit_button.click()
time.sleep(1)
# 최종적으로 열려있는 브라우저를 종료 합니다
driver.quit()

4. 최종코드

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
driver.implicitly_wait(0.5)

text_box = WebDriverWait(driver, 5).until(lambda x: x.find_element(By.NAME, value="my-text"))
submit_button = WebDriverWait(driver, 5).until(lambda x: x.find_element(By.CSS_SELECTOR, value="button"))
text_box.send_keys("Selenium")
time.sleep(1.5)
submit_button.click()
time.sleep(1.5)
driver.quit()

Leave a comment