본문 바로가기
다양한 TIP

파파고 번역, api 없이 셀레니움으로 가져올 수 있을까?

by 유기농프로그래밍 2022. 6. 8.
반응형

필요성

api로 가져오자니 secret과 제한이 있어서 셀레니움으로 만들어봤습니다.

 

준비물

먼저 준비해야할 것은 chromedriver, 크롬드라이버입니다.

 

구글에 chromedriver 로 검색하면, 아래와 같은 웹사이트가 나옵니다. 현재 크롬버전에 맞는 버전으로 다운 받습니다.

 

https://chromedriver.chromium.org/downloads

 

ChromeDriver - WebDriver for Chrome - Downloads

Current Releases If you are using Chrome version 103, please download ChromeDriver 103.0.5060.24 If you are using Chrome version 102, please download ChromeDriver 102.0.5005.61 If you are using Chrome version 101, please download ChromeDriver 101.0.4951.41

chromedriver.chromium.org

 

두번째는 라이브러리 설치입니다.

기본적으로 Python이 깔려있어야겠죠!? 그리고 필요한 설치는 selenium입니다. 아래 코드에서 실행하는 방식이 자동실행되는 웹브라우저를 이용하는 것이기 때문이지요.

 

세번째는 파이썬 코드 수정입니다.

이제 Python을 실행시킬 폴더에 두고 아래 코드의 chromedriver 파일위치만 바꿔줍니다.

self.driver = webdriver.Chrome('C:\Study\chromedriver', chrome_options=chrome_options)

 

그 뒤로는 PapagoApi를 생성해서 get_trans 함수를 이용하여 결과를 가져오면 됩니다.

간단하죠!?

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from selenium import webdriver
import time

class PapagoApi:
    def __init__(self):
        self.base_url = 'https://papago.naver.com'
        chrome_options = webdriver.ChromeOptions()
        chrome_options.add_argument("--headless")
        chrome_options.add_argument("--no-sandbox")
        chrome_options.add_argument("--disable-dev-shm-usage")

        self.driver = webdriver.Chrome('C:\Study\chromedriver', chrome_options=chrome_options)
        self.driver.set_window_size(1920, 1080) 
        self.driver.implicitly_wait(10)

        self.driver.get(self.base_url)

    def get_trans(self, text):
        self.driver.find_element_by_xpath('//*[@id="txtSource"]').click()
        self.driver.find_element_by_id("txtSource").clear()
        self.driver.find_element_by_id("txtSource").send_keys(text)
        time.sleep(3)
        data = self.driver.find_element_by_xpath('//*[@id="txtTarget"]/span').text
        self.driver.find_element_by_xpath('//*[@id="txtSource"]').click()
        self.driver.find_element_by_id("txtSource").clear()

        if data:
            return data
        else:
            return ''

papago = PapagoApi()
print(papago.get_trans('번역테스트'))
print(papago.get_trans('Last 정보'))

위의 코드를 실행한 결과는 아래와 같습니다.

Translation test
About Last

추가설명

chrome driver options에 --headless를 넣어 화면이 출력되지 않도록 옵션을 넣었습니다. 백그라운드로 돌기 때문에 실제로 돌아가지만 눈에는 보이지 않게 되는 것이지요.

 

만약 pycharm에서 실행하는 거라면, 아래와 같은 에러가 뜰 수 있습니다.

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

 

unicode 에러로 문법 오류인데요.

그럴 경우 webdriver.Chrome('C:\...', ...) 부분에 r을 붙여주면 됩니다.

webdriver.Chrome('C:\Study\chromedriver', chrome_options=chrome_options) 

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

webdriver.Chrome(r'C:\Study\chromedriver', chrome_options=chrome_options)

 

 

간단한 생활코딩, 한번씩 실행해보세요~

 

반응형

댓글