본문 바로가기
IT & 데이터 사이언스/개인 프로젝트

[프로젝트] RPA로 MBTI_16Personality 경우의 수 확인하기(1)

by 바른 호랑이 2022. 5. 15.
728x90
반응형

※ 심심해서 해보는 RPA관련 Toy_Project

 최근들어 인간의 성격유형을 정리해놓은 MBTI에 관심이 생겨 관련 성격유형들에 대한 내용들을 읽다가 테스트 문항들의 조합에 따른 MBTI 결과가 어떻게 나오는지 궁금해졌습니다. 정식 MBTI는 돈을 내야하기도 하고, 그 과정 자체가 웹페이지로 구현되어 있지 않을 것 같아 MBTI라고 하기는 그렇지만 그와 비슷하며 접근성이 높은 16Personality를 대상으로 진행해보기로 했습니다.

 

※ Selenium 관련 사이트

 

ChromeDriver - WebDriver for Chrome - Downloads

Current Releases If you are using Chrome version 102, please download ChromeDriver 102.0.5005.27 If you are using Chrome version 101, please download ChromeDriver 101.0.4951.41 If you are using Chrome version 100, please download ChromeDriver 100.0.4896.60

chromedriver.chromium.org

RPA를 위해 Python과 VSCODE설치한 후 확장프로그램으로 jupyter notebook을 설치하였고, pip 툴을 이용하여 Selenium 라이브러리를 설치하였습니다.(anaconda와 같은 다른 것들도 많이 설치되어있으나, 핵심은 Selenium이기에 해당부분만 설명할 예정입니다.)우선적으로 Selenium을 사용하기 위해서는 Chrome버전의 확인 밎 그에 맞는 exe파일 다운로드가 필요하여 버전확인 및 관련 홈페이지를 이용하여 exe파일을 다운로드 후 진행하였습니다.

 

 

위의 과정을 통해 exe파일을 다운로드 받은 후에는 VS Code에 jupyter notebook파일을 생성하여 코드를 작성하였으며, 세부 코드는 아래와 같습니다.

 

# 필요 패키지 로드
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

# Chrome 실행 후 16 Personality 홈페이지 접속
driver = webdriver.Chrome('C:\\Workspace\\python\\Toy_Project\\Toy_Project_2022\\chrome\\chromedriver.exe')
URL = "https://www.16personalities.com/ko"
driver.get(URL)
time.sleep(2) # 로딩시간에 맞게 적정히 수정
driver.find_element(By.XPATH, '//*[@id="main-app"]/main/div[1]/div[2]/a').click()
time.sleep(2) # 로딩시간에 맞게 적정히 수정

## 모든 응답문항 체크 홈페이지 구조 동일(페이지당 문항 6개) // 총 10개 페이지
for i in range(10):
    driver.find_element(By.XPATH, '//*[@id="main-app"]/div[1]/div/div[2]/div[1]/div[2]/div[2]/div[1]').click()
    time.sleep(1) # 로딩시간에 맞게 적정히 수정
    driver.find_element(By.XPATH, '//*[@id="main-app"]/div[1]/div/div[2]/div[2]/div[2]/div[2]/div[1]').click()
    time.sleep(1) # 로딩시간에 맞게 적정히 수정
    driver.find_element(By.XPATH, '//*[@id="main-app"]/div[1]/div/div[2]/div[3]/div[2]/div[2]/div[1]').click()
    time.sleep(1) # 로딩시간에 맞게 적정히 수정
    driver.find_element(By.XPATH, '//*[@id="main-app"]/div[1]/div/div[2]/div[4]/div[2]/div[2]/div[1]').click()
    time.sleep(1) # 로딩시간에 맞게 적정히 수정
    driver.find_element(By.XPATH, '//*[@id="main-app"]/div[1]/div/div[2]/div[5]/div[2]/div[2]/div[1]').click()
    time.sleep(1) # 로딩시간에 맞게 적정히 수정
    driver.find_element(By.XPATH, '//*[@id="main-app"]/div[1]/div/div[2]/div[6]/div[2]/div[2]/div[1]').click()
    time.sleep(1) # 로딩시간에 맞게 적정히 수정
    driver.find_element(By.XPATH, '//*[@id="main-app"]/div[1]/div/div[3]/button').click()
    time.sleep(2) # 로딩시간에 맞게 적정히 수정

 

16 Personality 홈페이지 자체가 문항을 체크하는 페이지들이 모두 동일한 HTML 구조를 취하고 있어 매우 간단하게 확인이 가능하였으며, 자동화를 위해서 HTML코드중 원하는 부분의 XPATH를 복사하여 사용하였으며 그 방법은 아래와 같습니다.

 

 

해당 방식으로 HTML소스를 복사한 후 작성한 코드를 통해 결과를 실행한 결과는 아래와 같습니다.

 

 

P.S 더 나은 개발자가 되기위해 공부중입니다. 잘못된 부분을 댓글로 남겨주시면 학습하는데 큰 도움이 될 거 같습니다.

세부코드가 궁금하신 분들은 아래 GitHub를 참고해주시기 바랍니다.

 

※ Github 

 

GitHub - Jeong-Beom/Toy_Project_2022: 2022년도에 진행한 Toy_Project들에 대한 레파지토리입니다.

2022년도에 진행한 Toy_Project들에 대한 레파지토리입니다. Contribute to Jeong-Beom/Toy_Project_2022 development by creating an account on GitHub.

github.com

※ [MBTI_16Personality] RPA로 경우의 수 확인하기(2)

 

[MBTI_16Personality] RPA로 경우의 수 확인하기(2)

※ 심심해서 해보는 RPA관련 Toy_Project 지난 게시글에서는 Python과 VSCode, Selenium을 활용하여 16Personality 페이지의 결과를 RPA를 해보았다. 이번 게시글에서는 결과를 Crawling해서 csv 파일화 하는 과정..

data-is-power.tistory.com

 

728x90
반응형

댓글