Selenium으로 웹브라우저 테스트 자동화
요즘 회사에서 일하다 보면 무언가 자동화 하고 싶은 작업들이 간간히 생깁니다.
특히 웹을 통한 단순 반복 작업(?)과 같은 것들은 따분하고 재미없어서 후딱후딱 해버리고 싶습니다.
자동화에 대해서 검색하던 중 Selenium이라는 것을 알게 되었습니다.
브라우저를 자동화하는 일종의 라이브러리입니다.. 주로 웹어플리케이션 테스트 자동화에 쓰이구요.
하지만 웹 기반 관리 작업을 자동화하는데도 사용 될 수 있다고 합니다.
Selenium 어떻게 사용하는지 몇가지 케이스를 중심으로 소개해봅니다.
01. 준비(라이브러리 및 프로그램 설치)
1 2 | PS C:\> python --version Python 3.7.2 | cs |
다음으로 Selenium을 설치해봅시닷.
1 | PS C:\> pip install selenium | cs |
Power shell 열때는 관리자 권한으로 열기 해야 설치됩니다.
그리고 webdriver란 놈을 설치해야됩니다.
Selenium은 webdriver 실행파일이 있어야 브라우저를 자동으로 실행시키고 여러 작업을 수행시킬 수 있습니다.
https://sites.google.com/a/chromium.org/chromedriver/downloads <-- 여기서 다운로드 가능
저는 C:\chromedriver.exe 형태로 저장했습니다.
이제 코딩 준비 끝.
02. 네이버 접속해보기
1 2 3 4 5 6 7 8 9 10 11 12 13 | from selenium import webdriver from time import sleep driver = webdriver.Chrome(r'C:\chromedriver.exe') ## webdriver 경로 설정 driver.implicitly_wait(3) ## 암시적 대기? driver.get('https://www.naver.com') ## 네이버 접속 print(driver.title) sleep(5) driver.quit() | cs |
코드를 위와 같이 작성하였습니다.
4: webdriver 객체를 이용해서 앞서 다운 받았던 chromedriver.exe 경로 설정해주고
6: 3초동안 DOM을 폴링하도록 설정
8: 네이버 url 설정
실행해보겠습니다.
1 2 3 4 5 6 | PS C:\mynode\test\selenium_test> python test.py DevTools listening on ws://127.0.0.1:7757/devtools/browser/블라블라~ KLIB_SelfTest return : KLR_OK NAVER | cs |
아래처럼 브라우저가 자동으로 똭 띄워집니다. 콘솔은 위와 같이 출력 되었구요.
03. 검색 해보기
코드 분석전에 html요소를 확인하려면 chrome에서 F12(개발자도구) 연 다음 html 코드 확인 가능합니다.
위의 버튼 클릭 후, 알고싶은 영역을 찍어주면 아래에 html코드가 잡히게 되고, id 또는 class 등의 정보 확인 가능합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | from selenium import webdriver from time import sleep from selenium.webdriver.common.by import By driver = webdriver.Chrome(r'C:\chromedriver.exe') driver.implicitly_wait(3) driver.get('https://www.naver.com') elm = driver.find_elements(By.ID, 'query')[0] elm.send_keys('개봉영화') btn_elm = driver.find_elements(By.ID, 'search_btn')[0] btn_elm.click() sleep(10) driver.quit() | cs |
11: find_elements로 id='query인 html 요소를 불어옵니다. find_element_by_id로 대체 가능합니다.
또는 classname, tag같은 걸로도 html요소를 불러올수 있습니다. find_elements(By.CLASS_NAME, 'query') 요런식으로.
12: 개봉영화라는 텍스트를 위의 html요소에 입력합니다.
14: 버튼 요소도 가져와서
15: 클릭 수행 시켜줍니다.
실행 시켜보면, 자동으로 naver.com 접속해서 검색란에 '개봉영화' 입력하고, 검색 버튼 까지 누르는 작업을 할 수 있는걸 확인 할 수 있을 겁니다.ㅎㅎ
04. 새 탭 열기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | from selenium import webdriver from time import sleep from selenium.webdriver.common.by import By driver = webdriver.Chrome(r'C:\chromedriver.exe') driver.implicitly_wait(3) driver.get('https://www.naver.com') elm = driver.find_elements(By.ID, 'query')[0] elm.send_keys('개봉영화') btn_elm = driver.find_elements(By.ID, 'search_btn')[0] btn_elm.click() driver.execute_script( "(function() { " + "window.open('https://www.naver.com', 'second');" + "})();" ) driver.switch_to.window("second") elm = driver.find_elements(By.ID, 'query')[0] elm.send_keys('개봉예정영화') btn_elm = driver.find_elements(By.ID, 'search_btn')[0] btn_elm.click() sleep(10) driver.quit() | cs |
18: execute_script 함수는 javascript를 수행한다.
20: window.open으로 새창을 띄우고, window이름은 second라고 설정했다.
24: driver 객체의 window를 스위치 해주자. 그래야 다음 코드들을 수행할수 있다.
26: 이번에는 '개봉예정영화' 입력 후 검색
위 같이 새창 띄우고 작업을 이어갈 수 있다.
05. ActionChains로 Ctrl과 같은 key 제어
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.action_chains import ActionChains driver = webdriver.Chrome(r'C:\chromedriver.exe') driver.implicitly_wait(3) driver.get('https://www.naver.com') ...(생략) driver.execute_script( "(function() { " + "window.open('https://www.naver.com', 'third');" + "})();" ) driver.switch_to.window("third") actions = ActionChains(driver) actions.key_down(Keys.CONTROL).send_keys('v').perform() ...(생략) | cs |
python 실행전에 클립보드에 '캡틴 마블' 을 ctrl + c 로 복사 했었습니다.
코드 실행하니 위처럼 ctrl + v가 실행 된것을 확인 할 수 있습니다.
Selinium.. 잘 다루면 업무 효율이 치솟아 오를...수도 있을 것 같습니다.
또한 테스트 자동화 도구로서도 좋을듯 합니다.