DeepL에서 PDF의 줄 바꿈 없는 번역을 Python으로 수행하는 버전 2

의 목적


캡처 키와 Selenium을 사용하여 deepl 번역을 실행합니다. 줄을 바꿀 필요가 없습니다.

github


https://github.com/komo135/deepl-pdf-trans

설치하다.


웹 드라이브를 driver install 에서 설치한 다음 작업 디렉터리와 같은 곳에 놓으십시오.
다음은python에 필요한 패키지를 설치합니다.
pip install selenium pyperclip keyboard pyautogui

코드


from selenium import webdriver
from selenium.webdriver.common.by import By
import pyperclip
import re
import keyboard
import pyautogui
import sys


def main():
    try:
        pyautogui.hotkey("ctrl", "c")  # Copy text from select text
        try:
            # Make selenium the top screen
            driver.minimize_window()
            driver.maximize_window()
        except:
            pass

        # Get input fields using xpath
        text_area = driver.find_element(By.XPATH, "//*[@id='panelTranslateText']/div[3]/section[1]/div[3]/div[2]/textarea")
        # Empty input fields
        text_area.clear()

        # Accepts clipboard values as variables and removes line breaks
        text = pyperclip.paste()
        text = re.sub(r"([a-zA-Z0-9,]+)\r\n|([a-zA-Z0-9,]+)\n|([a-zA-Z0-9,]+)\r", r"\1 ", text).replace("  ", " ")
        # To remove "-¥r¥n", encode once, then remove and decode
        text = re.sub(b"\xe2\x80\x90\r\n|\xe2\x80\x90\r|\xe2\x80\x90\n", b"", text.encode()).decode()
        text = re.sub(r"\r\n|\r|\n", "\n\n", text).replace("\n\n\n", "\n")
        pyperclip.copy(text)

        text_area.click()
        pyautogui.hotkey("ctrl", "v")

        driver.find_element(By.ID, "tabTranslateText").click()

    except:
        print("An error has occurred.")


if __name__ == "__main__":
    lang = sys.argv[1] if len(sys.argv) == 2 else "ja"
    url = f"https://www.deepl.com/{lang}/translator"

    driver = webdriver.Chrome()
    driver.get(url)

    keyboard.add_hotkey("ctrl+q", main)
    keyboard.wait("esc")

해설


가져오기


원하는 매크로 패키지를 가져옵니다.
from selenium import webdriver
from selenium.webdriver.common.by import By
import pyperclip
import re
import keyboard
import pyautogui
import sys

줄 바꿈 복사 및 삭제


1 선택한 텍스트를 먼저 복사합니다.
pyautogui.hotkey("ctrl", "c")
이어서 클립보드의 텍스트를python의 변수로 수신합니다.다른 줄 바꿈을 삭제합니다.
text = pyperclip.paste()
text = re.sub(r"([a-zA-Z0-9,]+)\r\n|([a-zA-Z0-9,]+)\n|([a-zA-Z0-9,]+)\r", r"\1 ", text).replace("  ", " ")
3'load-ing'등 단어가 중간에 줄을 바꾸는 문자가 있을 때text.replace(r"-\r\n", "")는 삭제할 수 없기 때문에 바이너리 문자열을 바이너리 형식으로 삭제한다.
text = re.sub(b"\xe2\x80\x90\r\n|\xe2\x80\x90\r|\xe2\x80\x90\n", b"", text.encode()).decode()
네 줄에 다른 줄이 있으면 공백을 남기고 모든 처리가 끝난 후에 텍스트를 클립보드에 복사합니다.
text = re.sub(r"\r\n|\r|\n", "\n\n", text).replace("\n\n\n", "\n")
pyperclip.copy(text)

webdriver


1deepl의 번역 사이트를 홈페이지 화면으로 가져가세요.그때는 오류가 발생하기 때문에 예외 처리로 집행한다.
화면이 최소화driver.maximize_window()되지 않으면 실행해도 톱 레벨 화면driver.minimize_window()이 되지 않는다.
try:
    driver.minimize_window()
    driver.maximize_window()
except
    pass
2xpath를 사용하여 텍스트 입력 형식을 가져옵니다. 입력한 것은 비어 있습니다.
text_area = driver.find_element(By.XPATH, "//*[@id='panelTranslateText']/div[3]/section[1]/div[3]/div[2]/textarea")
text_area.clear()
3개의 입력 형식에 텍스트를 붙여넣고 페이지로 이동합니다.
text_area.click()
pyautogui.hotkey("ctrl", "v")

driver.find_element(By.ID, "tabTranslateText").click()

단축키 등록 및 실행

  • 번역할 언어를 매개 변수로 설정합니다.입력이 없으면 일본어를 선택합니다.
  • deepl 사이트를 엽니다.
  • 단축키를 등록합니다.
  • if __name__ == "__main__":
        lang = sys.argv[1] if len(sys.argv) == 2 else "ja"
        url = f"https://www.deepl.com/{lang}/translator"
    
        driver = webdriver.Chrome()
        driver.get(url)
    
        keyboard.add_hotkey("ctrl+q", main)
        keyboard.wait("esc")
    

    실행


    웹 드라이브와 같은 디렉터리에 스크립트를 "trans.py"로 저장합니다.
    image.png
    명령 프롬프트에서 다음 명령을 입력합니다.
    python trans.py ja
    
    등록된 단축키를 누르면 다음과 같다.
    image

    좋은 웹페이지 즐겨찾기