forked from ckh08045/AutoPercenty
148 lines
6.3 KiB
Python
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
|