TaoSourcerer/modules/deepl.py

161 lines
5.9 KiB
Python

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from tqdm import tqdm
from selenium_stealth import stealth
from fake_useragent import UserAgent
import logging
# 로거 인스턴스 가져오기
logger = logging.getLogger('default_logger')
def trans(original_text):
# Start a Selenium driver
options = webdriver.ChromeOptions()
ua = UserAgent()
options.add_argument(f"--user-agent={ua.random}") # 랜덤 user_agent 사용
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_argument('--ignore-certificate-errors')
options.add_argument('--ssl-protocol=any')
options.add_argument('--disable-cache')
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
# selenium-stealth 설정 적용
stealth(driver,
languages=["en-US", "en"],
vendor="Google Inc.",
platform="Win32",
webgl_vendor="Intel Inc.",
renderer="Intel Iris OpenGL Engine",
fix_hairline=True,
)
# Reach the deepL website
deepl_url = 'https://www.deepl.com/ko/translator' # 한국어
driver.get(deepl_url)
# Define text to translate
# texts_to_translate = [
# 'Shuffle data after an epoch!',
# 'StaleElementReferenceException: Message: stale element reference: element is not attached to the page document',
# 'Hello python!',
# 'Using Selenium and deepL to automate the translation!'
# ]
# for text_to_translate in tqdm(original_text):
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".min-h-0:nth-child(1) > div:nth-child(1)"))).send_keys(original_text)
time.sleep(3) # Adjust sleep time based on network speed and response time
# Improved wait for translation to appear
try:
WebDriverWait(driver, 10).until(
lambda driver: driver.find_element(By.CSS_SELECTOR, '[data-testid="translator-target-input"]').text.strip() != "")
translation_text = driver.find_element(By.CSS_SELECTOR, '[data-testid="translator-target-input"]')
content = translation_text.text
except Exception as e:
logger.debug("Error fetching translation:", e)
content = "Translation failed"
# Display results
# logger.debug('#' * 50)
# logger.debug('Original :', original_text)
# logger.debug('Translation :', content)
# logger.debug('#' * 50)
# Clear button
# try:
# # button = driver.find_element(By.CSS_SELECTOR, 'div.lmt__clear_text_button_wrapper button')
# # button = driver.find_element(By.CSS_SELECTOR, '#translator-source-clear-button path')
# button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '[data-testid="translator-source-clear-button"]')))
# button.click()
# except Exception as e:
# logger.debug("Error clicking clear button:", e)
# Close the driver
driver.quit()
return content
result = trans("全铜芯卧式电机不锈钢底座厚")
logger.debug(f"입력 : 全铜芯卧式电机不锈钢底座厚")
logger.debug(f"결과 : {result}")
# ===========================================
# import time
# from selenium import webdriver
# from selenium.webdriver.chrome.options import Options
# from selenium.webdriver.chrome.service import Service
# from selenium.webdriver.common.by import By
# from selenium.webdriver.support.ui import WebDriverWait
# from selenium.webdriver.support import expected_conditions as EC
# from tqdm import tqdm
# from selenium_stealth import stealth
# from fake_useragent import UserAgent
# def trans(original_text):
# # Start a Selenium driver
# options = webdriver.ChromeOptions()
# ua = UserAgent()
# options.add_argument(f"--user-agent={ua.random}") # 랜덤 user_agent 사용
# options.add_argument("--disable-blink-features=AutomationControlled")
# options.add_argument('--ignore-certificate-errors')
# options.add_argument('--ssl-protocol=any')
# options.add_argument('--disable-cache')
# driver = webdriver.Chrome(options=options)
# # selenium-stealth 설정 적용
# stealth(driver,
# languages=["en-US", "en"],
# vendor="Google Inc.",
# platform="Win32",
# webgl_vendor="Intel Inc.",
# renderer="Intel Iris OpenGL Engine",
# fix_hairline=True,
# )
# # DeepL 웹사이트 접속
# deepl_url = 'https://www.deepl.com/ko/translator'
# driver.get(deepl_url)
# # 번역할 텍스트 입력
# input_area = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".min-h-0:nth-child(1) > div:nth-child(1)")))
# input_area.send_keys(original_text)
# time.sleep(3) # 네트워크 속도에 따라 조정
# # 번역 결과 대기 및 추출
# try:
# WebDriverWait(driver, 10).until(
# lambda driver: driver.find_element(By.CSS_SELECTOR, '[data-testid="translator-target-input"]').text.strip() != "")
# translation_text = driver.find_element(By.CSS_SELECTOR, '[data-testid="translator-target-input"]')
# translated_content = translation_text.text
# except Exception as e:
# logger.debug("Error fetching translation:", e)
# translated_content = "Translation failed"
# # # Clear 버튼 클릭
# # try:
# # clear_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '[data-testid="translator-source-clear-button"]')))
# # clear_button.click()
# # except Exception as e:
# # logger.debug("Error clicking clear button:", e)
# # 드라이버 종료
# driver.quit()
# return translated_content
# trans("微博登录")