Selenium은 웹 브라우저를 자동으로 제어하여 웹페이지를 테스트하고 조작할 수 있게 해주는 프레임워크입니다.
특히 웹 개발자와 QA 엔지니어에게 매우 인기 있는 도구 중 하나입니다.
Selenium의 주요 특징:
다양한 언어 지원: Java, Python, C#, Ruby, JavaScript 등 다양한 프로그래밍 언어에서 사용할 수 있습니다.
브라우저 호환성: 대부분의 주요 웹 브라우저(Chrome, Firefox, Safari, Edge 등)와 호환됩니다. 또한 각 브라우저마다의 WebDriver를 제공하여 해당 브라우저를 자동으로 제어할 수 있습니다.
다양한 플랫폼 지원: Windows, macOS, Linux 등 다양한 운영 체제에서 사용할 수 있습니다.
다양한 웹 테스팅 기능: 웹페이지의 요소를 찾고, 클릭하고, 텍스트를 입력하고, 폼을 제출하고, 스크롤하고, 페이지를 탐색하는 등 다양한 웹 테스팅 및 자동화 작업을 수행할 수 있는 기능을 제공합니다.
강력한 웹 테스트 스크립트 작성: 웹페이지에서 동적으로 변경되는 요소들을 감지하고 처리할 수 있도록 설계되었습니다. 이를 통해 복잡한 웹 애플리케이션의 테스트도 쉽게 수행할 수 있습니다.
클라우드 테스트 통합: 다양한 클라우드 테스트 플랫폼과 통합되어 대규모 테스트를 자동화하고 분산 시스템에서 실행할 수 있습니다.
커뮤니티 및 생태계: 활발한 커뮤니티와 생태계를 가지고 있어서, 다른 사용자들과의 지식 공유와 지원을 받을 수 있습니다. 또한 다양한 확장 기능과 플러그인을 사용하여 Selenium을 더욱 강력하게 확장할 수 있습니다.
Selenium은 크롤링뿐만 아니라 웹 애플리케이션의 품질을 향상시키고 개발 생산성을 높이는 데 매우 유용한 도구입니다.
특히 CI/CD 파이프라인에서 자동화된 웹 테스트를 통해 애플리케이션의 안정성과 신뢰성을 확보할 수 있습니다.
이제 Selenium을 사용해 봅시다.
우선 Selenium을 설치 합니다.
pip install selenium
WebDriver 설치: Selenium은 브라우저를 제어하기 위해 웹 드라이버를 사용합니다. 사용할 웹 브라우저에 맞는 드라이버를 설치해야 합니다. 예를 들어, Chrome 브라우저를 사용할 경우에는 Chrome WebDriver를 설치해야 합니다. WebDriver는 각 브라우저의 공식 웹사이트에서 다운로드할 수 있습니다.
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
driver_path = "경로/chromedriver" # WebDriver의 경로 설정
service = Service(executable_path=driver_path)
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# 웹페이지 열기
driver.get("https://search.shopping.naver.com/search/all?query=아기침대")
# 웹페이지에서 요소 찾기
element = driver.find_element(By.XPATH, '//*[@id="content"]/div[1]/div[2]/div/div[3]/div/div/div[2]/div[1]/a')
print('element', element.text)
# 웹페이지 닫기
driver.quit()
네이버 쇼핑에서 아기침대를 검색했을 경우 특정 태그의 text를 가져오는 코드입니다.
특정 태그, 즉 find_element에 지정할 경로는 다음과 같이 찾습니다.
1. 긁어올 텍스트위에서 마우스 우클릭하여 검사(Inspect)를 누릅니다.
2. 크롬 개발자 콘솔창이 뜹니다. 원하는 텍스트의 태그 위에 파란줄이 쳐져 있습니다.
3. 그 위에서 마우스 우클릭하고 Copy XPath를 해서 가져온것을 사용합니다.
By.XPATH, 오른쪽에 복사해줍니다.
element = driver.find_element(By.XPATH, '//*[@id="content"]/div[1]/div[2]/div/div[3]/div/div/div[2]/div[1]/a')