Post

Python 웹 애플리케이션 자동으로 테스트하는 selenium 라이브러리 알아보기

Python 웹 애플리케이션 자동으로 테스트하는 selenium 라이브러리 알아보기

오늘은 Python에서 웹 애플리케이션을 자동으로 테스트할 때 사용할 수 있고, 자바스크립트가 불러와진 다음의 내용을 크롤링하게 할 수도 있는 selenium 라이브러리를 알아보려 합니다.

selenium 설치

우선 virtualenv로 파이썬 환경을 분리해줍니다.

1
pip3 install virtualenv
1
virtualenv -mvenv env

env라는 이름의 가상 환경을 생성합니다.

1
source env/bin/activate

가상환경을 폴더에서 활성화합니다.

1
pip3 install --upgrade pip

pip의 업그레이드가 존재하는지 확인하고 진행합니다.

1
pip install -U selenium

pip로 selenium을 설치합니다.

1
pip install beautifulsoup4

추가로 아래 실습에서는 보여지는 화면에서 문자열을 가져올 예정이므로 beautifulsoup4도 설치합니다.

드라이버 설치

chrome: https://sites.google.com/a/chromium.org/chromedriver/downloads

Edge: https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/

Firefox: https://github.com/mozilla/geckodriver/releases

chrome, Edge, Firefox는 브라우저 드라이버를 내려받아야 합니다.

Safari: 사파리의 환경설정에서 개발자용 매뉴를 활성화한 다음, “원격 자동화 허용” 옵션을 활성화합니다.

구글에서 날씨 가져오기

1
2
3
4
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from bs4 import BeautifulSoup

selenium과 time, 그리고 BeautifulSoup을 가져옵니다.

selenium으로 웹 브라우저를 구동해서 원하는 결과가 랜더링될 때까지 time으로 조금 기다리고, 마지막으로 BeautifulSoup로 문자열을 가져올 수 있게 합니다.

1
browser = webdriver.Safari()

사파리 브라우저의 드라이버로 시작합니다.

이 부분은 크롬이나 파이어폭스로 바꿔서 해도 됩니다.

1
browser.get('http://www.google.com')

구글 사이트로 접속합니다.

1
browser.find_element_by_name('q').send_keys("weather", Keys.RETURN)

q 라는 이름의 입력 태그에 접근해서 weather라는 단어를 치고, 앤터 키를 누릅니다.

1
2
time.sleep(2)
browser.save_screenshot("test.png")

잠시 쉬고, 현재 브라우저 화면을 test라는 사진 파일을 만듭니다.

time 패키지 대신에 driver.implicitly_wait를 사용해도 됩니다.

https://selenium-python.readthedocs.io/waits.html

1
2
3
4
soup = BeautifulSoup(browser.page_source, 'html.parser')
locate = soup.select('#wob_loc')
date = soup.select('#wob_dts')
rain_percent = soup.select('#wob_pp')

page_source로 해당 페이지의 소스 코드를 가져와서 BeautifulSoup으로 파싱합니다.

각각 사용자의 위치와 날짜, 그리고 비 올 확률의 html 문자열을 저장하게 됩니다.

1
2
3
4
5
6
7
8
for t in locate:
    print(t.text)

for t in date:
    print(t.text)

for t in rain_percent:
    print(t.text)

html 코드에서 텍스트만 추출합니다.

oo도 oo시 oo구 oo동 (o요일) 오후 10:00 54%

위와 같이 출력됩니다.

1
browser.quit()

모든 작업이 완료되었으면 브라우저를 종료합니다.

This post is licensed under CC BY 4.0 by the author.