[Python] 셀레니움을 이용해 영한 번역 CLI 만들기
2021. 3. 2. 13:33ㆍ유용한 끄적임
시작하기전
글의 내공이 뛰어난 경우에는 그냥 읽어도 문제가 없지만, 좀 엉뚱(?)하게 쓰인 글을 볼 때는 머리를 쥐어짜내야 하는 고통을 겪기 싫기에 googletrans를 이용하여 알아서 복붙하면 줄바꿈을 제거하고 딱 되도록 간단하게 만들어서 사용했는데.
구글 토큰 문제로 더이상 이용할 수 없게 되자 울며 겨자먹기로 구글 번역 사이트에 복붙하던 중...
줄바꿈이 그대로 복붙되기 때문에 매번 찾아서 없애는 데 애를 먹네요.
불편함에 비롯된 스트레스가 극에 달해 그냥 만들었어요.
설치
언어는 Python이고 필요한 라이브러리는 selenium와 lxml 입니다.
$ pip3 install selenium lxml
그리고 아래 사이트에 방문해서 본인 크롬 버전에 맞는 드라이버를 다운받으면 됩니다.
코드
# Libraries
from selenium import webdriver
from lxml.html import fromstring
from time import sleep
# Create chrome browser
options = webdriver.ChromeOptions()
options.add_argument("headless")
browser = webdriver.Chrome('크롬 드라이버 위치를 넣어주세요', options=options)
# Welcome!
print('''
안녕하세요, OOO님. 영한 번역을 시작하겠습니다.
''')
# Get the translated results.
def extract_translated(page_source) :
elem = fromstring(page_source)
translated = " ".join(elem.xpath('//div[1]/span[1]/span/span/text()'))
if not translated : translated = " ".join(elem.xpath("//c-wiz/div/div/div/text()"))
return translated
# Input and Output
def input_text() :
print("\n> ", end="")
text, line = '', ''
while line!= ' ' :
line =input()
text+=line
return text
def print_translated(translated) :
print("-"*20, "Translation Result", "-"*20+'\n')
print(translated, "\n\n"+"-"*60)
try :
while True :
src, dst = 'en', 'ko' # 언어를 자유롭게 바꿔도 된다.
text = input_text()
if text == 'q ' : raise KeyboardInterrupt()
base_url = "https://translate.google.co.kr/?hl=ko&sl={}&tl={}&text={}&op=translate".format(src, dst, text)
browser.get(base_url)
translated = extract_translated(browser.page_source)
transcount = 0
# 로드 중이라는 글씨가 나오면 기다려준다. 단 5초 넘으면 자동 종료
while '로드 중...' in translated and transcount < 50:
sleep(0.1)
translated = extract_translated(browser.page_source)
transcount += 1
translated = "죄송합니다. 번역에 실패했습니다." if '로드 중...' in translated else translated
print_translated(translated)
# If you want to quit, then enter the 'ctrl+c' or 'q \n'
except KeyboardInterrupt as ki :
print("Key interrupt is detected. bye!")
except Exception as e :
print("Error {} occur.".format(e))
finally :
browser.quit()
사용법
만약 hello world를 번역하고 싶다면
> hello world(엔터)
(띄어쓰기)(엔터)
를 하면 됩니다.
끝내고 싶을 때는 ctrl+c 또는 q를 번역해주세요.
아! 그냥 알아서 개조하셔도 될꺼같네요.
끝내면서
구체적인 원리는 밝히지 않았어요. (귀찮기도 하고... 코드가 복잡하지도 않죠?)
참고로 백그라운드에서 실행되기 때문에 사용 후에는 꼭 프로그램을 제대로 종료하면 좋아요. (그냥 창을 닫아버리셔도 됩니다)
'유용한 끄적임' 카테고리의 다른 글
Intellij에서 코드(파일) 템플릿 만들기 (1) | 2024.05.01 |
---|---|
Github ssh 연동하기 (mac) (0) | 2024.04.14 |
도커 외부 주소 바꾸는 법 (0) | 2024.04.13 |
우분투에서 키보드를 맥북처럼 사용하기 (0) | 2024.04.08 |
Ubuntu apt update 오류 해결 1 (0) | 2024.04.08 |