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