1
0
Fork 0
AutoPercenty2/ai/deepl.py

148 lines
6.3 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 random
import logging
# 로거 인스턴스 가져오기
logger = logging.getLogger('default_logger')
def trans(original_text):
# PC 사용자 에이전트
USER_AGENTS = [
# Chrome (Windows 10)
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
# Edge (Windows 10)
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.0.0",
# Firefox (Windows 10)
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:108.0) Gecko/20100101 Firefox/108.0",
# Safari (macOS Monterey)
"Mozilla/5.0 (Macintosh; Intel Mac OS X 12_0) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Safari/605.1.15",
# Opera (Windows 10)
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 OPR/85.0.0.0"
]
random_user_agent = random.choice(USER_AGENTS)
# Start a Selenium driver
options = webdriver.ChromeOptions()
options.add_argument(f"user-agent={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.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})") # 속성 변경
driver.get(deepl_url)
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '[data-testid="translator-source-input"]'))).send_keys(original_text)
WebDriverWait(driver, 20).until(lambda d: d.execute_script('return document.readyState') == 'complete')
time.sleep(4) # 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.error(f"Error fetching translation:{e}", exc_info=True)
content = "Translation failed"
driver.quit()
return content
def trans_list(original_texts):
translated_texts = [] # 번역된 텍스트를 저장할 리스트
# PC 사용자 에이전트
USER_AGENTS = [
# Chrome (Windows 10)
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
# Edge (Windows 10)
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.0.0",
# Firefox (Windows 10)
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:108.0) Gecko/20100101 Firefox/108.0",
# Safari (macOS Monterey)
"Mozilla/5.0 (Macintosh; Intel Mac OS X 12_0) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Safari/605.1.15",
# Opera (Windows 10)
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 OPR/85.0.0.0"
]
random_user_agent = random.choice(USER_AGENTS)
# Start a Selenium driver
options = webdriver.ChromeOptions()
options.add_argument(f"user-agent={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.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})") # 속성 변경
driver.get(deepl_url)
# Improved wait for translation to appear
for text in original_texts:
try:
driver.execute_script("document.querySelector('[data-testid=\"translator-source-input\"] div[contenteditable=\"true\"]').textContent = '';")
input_field = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '[data-testid="translator-source-input"]')))
# input_field.clear() # 입력 필드를 클리어합니다.
input_field.send_keys(text)
WebDriverWait(driver, 20).until(lambda d: d.execute_script('return document.readyState') == 'complete')
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_texts.append(translation_text.text)
except Exception as e:
logging.error(f"Error fetching translation: {e}", exc_info=True)
translated_texts.append("Translation failed") # 수정된 예외 처리
driver.quit()
return translated_texts