본문 바로가기
아래아한글 자동화/python+hwp 중급

크롬으로 한/글 문서 작성한 후 다운받기 feat. selenium

by 일코 2022. 1. 27.

안녕하세요?

일상의코딩, 일코입니다.

 

최근 여러 브라우저에서

한/글 문서를 읽을 수 있는 기능을 제공하고 있습니다.

 

대표적으로 네이버 웨일은

(파일을 서버로 업로드하는 과정을 거친 후에)

브라우저로 뷰어 기능을 거의 완벽하게 제공해줍니다.

 

크롬 브라우저 확장프로그램 중 하나인

hwp.js를 설치하면

크롬에서 hwp문서를 (완벽하진 않지만)

읽기전용으로 불러올 수도 있습니다.

 

그런데 이번에 소개해드리는 프로그램은

한컴오피스에서 공식적으로 제공하는 웹 hwp 편집기인 

한컴스페이스입니다.

 

한컴스페이스

어디서나 펼쳐지는<br class="s-hide-lg s-show-sm" /> 오피스 세상

space.malangmalang.com

 

회원가입만 하시면 개인사용자에 한해서는

freemium이라는 무료 요금제로

2GB의 무료 스토리지와

한/글 프로그램에서 제공하는 대부분의 기능을 구현해놓은

웹 에디터를 무료로 사용하실 수 있으며,

편집 후에는 온라인 저장 및

다운로드가 가능합니다.

 

그리고 무엇보다 흥미로운 점은,

크롬브라우저를 사용하기 때문에!!!

selenium으로 문서작성 자동화가 가능하다는 것입니다.

 

이번 포스팅에서는 간단히

0. 한컴스페이스에 접속해 로그인하고,

1. 새 문서를 생성한 후,

2. 텍스트를 입력하고,

3. 다운받는 과정까지

 

코드로 한 번 진행해보겠습니다.

여러분의 PC에 파이썬과 크롬브라우저가 설치되어 있어야 하며,
아래의 코드를 실행하시려면 여러분의 파이썬 환경에
selenium, chromedriver_autoinstaller라는 모듈이 설치되어 있으면 됩니다.
커맨드창에서 pip install selenium chromedriver-autoinstaller 를 실행하셔서 모듈을 설치하시기 바랍니다.

 

 

1. 한컴스페이스 접속 및 로그인

from selenium import webdriver
import chromedriver_autoinstaller
from selenium.webdriver.common.by import By

chromedriver_autoinstaller.install()
driver = webdriver.Chrome()

# 접속
driver.get("https://space.malangmalang.com/")

접속완료

 

 

2. 싸이월드타운 팝업 제거

if "다시 표시 안 함" in driver.page_source:
    driver.find_element(by=By.CSS_SELECTOR, value="a.button__close").click()

팝업제거 완료

 

 

3. 로그인

이메일주소 = "email@email.com"
패스워드 = "Your_pa$$w0rd"

driver.execute_script("MalangGNB.gnbLogin();")
driver.find_element(By.ID, "email").send_keys(이메일주소)
driver.find_element(By.ID, "password").send_keys(패스워드)
driver.find_element(By.CSS_SELECTOR, "button[type='submit']").click()

로그인 완료

 

 

4. 새 문서(테스트1.hwpx) 생성하기

# 한/글 새 문서 클릭하고 파일명(테스트1) 입력
driver.find_elements(By.CSS_SELECTOR, "div.item__thumbnail")[0].click()
driver.find_element(By.CSS_SELECTOR, "input[name='newName']").clear()
driver.find_element(By.CSS_SELECTOR, "input[name='newName']").send_keys("테스트1")
driver.find_element(By.CSS_SELECTOR, "span[translate='CREATE']").click()

새 문서 생성 완료

 

 

5. 새로 열린 한/글 에디터 창으로 이동하기(switch_to.window)

# 새로 열린 한/글 편집창으로 옮기기
driver.switch_to.window(driver.window_handles[-1])

 

 

6. 텍스트 입력하기

# 텍스트 입력하기
driver.find_element(By.CSS_SELECTOR, "body").send_keys("안녕하세요?")
driver.find_element(By.CSS_SELECTOR, "body").send_keys("\n반갑습니다!")

텍스트 입력 완료

 

 

7. 다운로드하기

driver.find_element(By.CSS_SELECTOR, "div.property_title").click()
driver.find_element(By.CSS_SELECTOR, "div.d_download.btn_icon_inner").click()

문서 다운로드 완료

 

 

8. 크롬창 닫기(셀레늄 종료)

driver.quit()

브라우저 닫기

끝.

 

간단하죠?

전체 코드는 아래 붙여놓습니다.

from selenium import webdriver
import chromedriver_autoinstaller
from selenium.webdriver.common.by import By

chromedriver_autoinstaller.install()
driver = webdriver.Chrome()

# 한컴스페이스 접속
driver.get("https://space.malangmalang.com/")

# 팝업 제거
if "다시 표시 안 함" in driver.page_source:
    driver.find_element(by=By.CSS_SELECTOR, value="a.button__close").click()

# 로그인
아이디 = "아이디"
패스워드 = "패스워드"

driver.execute_script("MalangGNB.gnbLogin();")
driver.find_element(By.ID, "email").send_keys(아이디)
driver.find_element(By.ID, "password").send_keys(패스워드)
driver.find_element(By.CSS_SELECTOR, "button[type='submit']").click()

# 한/글 새 문서 클릭하고 파일명(테스트1) 입력
문서이름 = "테스트1"

driver.find_elements(By.CSS_SELECTOR, "div.item__thumbnail")[0].click()
driver.find_element(By.CSS_SELECTOR, "input[name='newName']").clear()
driver.find_element(By.CSS_SELECTOR, "input[name='newName']").send_keys(문서이름)
driver.find_element(By.CSS_SELECTOR, "span[translate='CREATE']").click()

# 새로 열린 한/글 편집창으로 옮기기
driver.switch_to.window(driver.window_handles[-1])

# 텍스트 입력하기
driver.find_element(By.CSS_SELECTOR, "body").send_keys("안녕하세요?")
driver.find_element(By.CSS_SELECTOR, "body").send_keys("\n반갑습니다!!")

# 다운로드하기
driver.find_element(By.CSS_SELECTOR, "div.property_title").click()
driver.find_element(By.CSS_SELECTOR, "div.d_download.btn_icon_inner").click()

# 크롬창 닫기
driver.quit()

 

기본적으로 셀레늄 모듈에 대한 이해가 필요한 코딩이지만,

어려운 파이썬 문법은 전혀 들어가 있지 않으므로

금방 이해하실 수 있을 거라고 생각됩니다.

 

다만, 위의 코드는 약간의 보완이 필요한 상태입니다.

브라우저에서 데이터를 로딩하는 시간 등을 전혀 고려하지 않았기 때문입니다.

한 줄씩 천천히 실행해보시면 문제가 없지만,

코드 전체를 한 번에 실행하실 때에는 문제 발생의 소지가 있습니다.

적절한 길이의 time.sleep 함수나 셀레늄의 wait 메서드를 통해 보완해야 한다는 뜻입니다.
이 부분은 이 포스팅의 범위에서 벗어나므로, 기회가 되면 다른 포스팅에서 다루겠습니다.

 

최종 시연화면은 아래와 같습니다.

급한대로 sleep 떡칠을 해보았더니 잘 굴러가네요.

 

 

굳이 의의를 두자면, 브라우저를 통해

한/글이 설치되어 있지 않은 PC나, 맥, 리눅스 등에서도

무료로 동일한 서식의 문서를 생산할 수 있다는 정도가 되겠습니다.

...제가 앞으로 쓸 일은 없을 것 같네요.

 

이번 포스팅은 여기서 마치겠습니다.

의견이나 질문은 댓글로 남겨주시기 바랍니다.

 

그럼 행복한 하루 되세요!!

 

댓글