From 77d9ed11c71bc6b21147a9444e76b8106fe41ed4 Mon Sep 17 00:00:00 2001 From: Fanta Kim Date: Wed, 4 Sep 2024 00:32:02 +0900 Subject: [PATCH] Fix: translation issue on the webpage --- PapagoSrt.sln | 2 +- PapagoSrt/Form1.cs | 76 +++++++++++++++++++++----------------- PapagoSrt/Form1.resx | 2 +- PapagoSrt/Papago.cs | 60 +++++++++++++----------------- PapagoSrt/PapagoSrt.csproj | 1 + 5 files changed, 71 insertions(+), 70 deletions(-) diff --git a/PapagoSrt.sln b/PapagoSrt.sln index 0c4bbdd..13f099f 100644 --- a/PapagoSrt.sln +++ b/PapagoSrt.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.6.33723.286 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PapagoSrt", "PapagoSrt\PapagoSrt.csproj", "{3DE66D75-95CC-4E9E-BC82-876B01356080}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PapagoSrt", "PapagoSrt\PapagoSrt.csproj", "{3DE66D75-95CC-4E9E-BC82-876B01356080}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/PapagoSrt/Form1.cs b/PapagoSrt/Form1.cs index 30b7939..27c1248 100644 --- a/PapagoSrt/Form1.cs +++ b/PapagoSrt/Form1.cs @@ -1,6 +1,7 @@ using System.ComponentModel; using System.Data; using System.Diagnostics; +using System.Text; namespace PapagoSrt { @@ -88,18 +89,14 @@ private async void btnStart_Click(object sender, EventArgs e) btnStart.Enabled = false; - var backup = BackupClipboard(); using (var driver = Papago.CreateChromeDriver()) { await System.Threading.Tasks.Task.Run(() => { foreach (var task in pendingTasks) { - var content = File.ReadAllText(task.Filename); - - SetTextClipboard(content); - - var translated = Papago.Translate(driver); + var contents = GetSrtChunks(task.Filename); + var translated = Papago.Translate(driver, contents); if (translated.Length == 0) { task.SetStatus(TaskStatus.Failure); @@ -114,7 +111,6 @@ await System.Threading.Tasks.Task.Run(() => }); } - RestoreClipboard(backup); MessageBox.Show("۾ Ϸ Ǿϴ", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information); btnStart.Enabled = true; @@ -165,39 +161,51 @@ private string AddSuffixToFileName(string filePath, string suffix) return Path.Combine(directory, $"{fileName}{suffix}{extension}"); } - private Dictionary BackupClipboard() + private static List GetSrtChunks(string filePath, int maxCharacters = 3000) { - var backup = new Dictionary(); - var dataObject = Clipboard.GetDataObject(); - var formats = dataObject.GetFormats(false); - foreach (var format in formats) - { - backup.Add(format, dataObject.GetData(format, false)); - } + var result = new List(); + var currentChunk = new StringBuilder(); - return backup; - } - - private void SetTextClipboard(string text) - { - var thread = new Thread(new ThreadStart(() => + using (var reader = new StreamReader(filePath, Encoding.UTF8)) { - Clipboard.SetText(text); - })); + var line = string.Empty; + while ((line = reader.ReadLine()) != null) + { + if (currentChunk.Length + line.Length > maxCharacters) + { + if (currentChunk.Length > 0) + { + result.Add(currentChunk.ToString().TrimEnd()); + currentChunk.Clear(); + } - thread.SetApartmentState(ApartmentState.STA); - thread.Start(); - thread.Join(); - } + if (line.Length > maxCharacters) + { + int lastNewLineIndex = line.LastIndexOf('\n', maxCharacters); + if (lastNewLineIndex == -1) + { + lastNewLineIndex = maxCharacters; + } + result.Add(line.Substring(0, lastNewLineIndex).TrimEnd()); + } + else + { + currentChunk.Append(line + "\n"); + } + } + else + { + currentChunk.Append(line + "\n"); + } + } - private void RestoreClipboard(Dictionary backup) - { - Clipboard.Clear(); + if (currentChunk.Length > 0) + { + result.Add(currentChunk.ToString().TrimEnd()); + } + } - backup.ToList().ForEach(x => - { - Clipboard.SetData(x.Key, x.Value); - }); + return result; } } } diff --git a/PapagoSrt/Form1.resx b/PapagoSrt/Form1.resx index 64da0aa..81caefd 100644 --- a/PapagoSrt/Form1.resx +++ b/PapagoSrt/Form1.resx @@ -18,7 +18,7 @@ System.Resources.ResXResourceReader, System.Windows.Forms, ... System.Resources.ResXResourceWriter, System.Windows.Forms, ... this is my long stringthis is a comment - Blue + Blue [base64 mime encoded serialized .NET Framework object] diff --git a/PapagoSrt/Papago.cs b/PapagoSrt/Papago.cs index 9ce8570..45814f0 100644 --- a/PapagoSrt/Papago.cs +++ b/PapagoSrt/Papago.cs @@ -1,7 +1,8 @@ using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using OpenQA.Selenium.Support.UI; -using Keys = OpenQA.Selenium.Keys; +using SeleniumExtras.WaitHelpers; +using System.Text; namespace PapagoSrt { @@ -25,46 +26,37 @@ public static ChromeDriver CreateChromeDriver() return driver; } - public static string Translate(ChromeDriver driver) + public static string Translate(ChromeDriver driver, IList contents) { - driver.Navigate().GoToUrl("https://main--venerable-zabaione-67b63d.netlify.app"); + driver.Navigate().GoToUrl($"https://papago.naver.com/?sk=auto&tk=ko"); - driver.WaitForFindElement(By.LinkText("파파고 번역 사이트")).Click(); - - var frame = driver.WaitForFindElement(By.Id("translatedFrame")); - driver.SwitchTo().Frame(frame); - - var textarea = driver.WaitForFindElement(By.Id("mat-input-0")); - textarea.Clear(); - textarea.SendKeys(Keys.Control + "v"); - - var saveButton = driver.WaitForFindElement(By.XPath("/html/body/app-root/div/section[1]/button")); - saveButton.Click(); + try + { + var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(15)); + wait.Until(ExpectedConditions.ElementIsVisible(By.Id("btnTranslate"))); + } + catch + { + throw new Exception("Webpage Timed out!"); + } - var elements = driver.FindElements(By.XPath("//*[@papago-id]")); - var lastElement = elements.LastOrDefault(); - if (lastElement == null) - return string.Empty; + var sourceTextbox = driver.FindElement(By.Id("txtSource")); + var targetTextbox = driver.FindElement(By.Id("txtTarget")); - var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(100)); - wait.Until(d => lastElement.GetAttribute("papago-translate") == "translated"); + var translatedText = new StringBuilder(); + foreach (var content in contents) + { + var script = $"var ele = `{content.Replace("`", "\\`")}`;document.getElementById('txtSource').value=ele;"; + ((IJavaScriptExecutor)driver).ExecuteScript(script); + sourceTextbox.SendKeys(" "); - var result = driver.WaitForFindElement(By.ClassName("result")); - return result.Text; - } - } + Thread.Sleep(2000); - public static class WebDriverExtensions - { - public static IWebElement WaitForFindElement(this IWebDriver driver, By by, int timeoutInSeconds = 5) - { - var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds)); - if (wait.Until(x => x.FindElement(by).Displayed)) - { - return driver.FindElement(by); + var translated = targetTextbox.Text; + translatedText.Append(translated); } - - return null; + + return translatedText.ToString(); } } } diff --git a/PapagoSrt/PapagoSrt.csproj b/PapagoSrt/PapagoSrt.csproj index 9356b9f..bda18e6 100644 --- a/PapagoSrt/PapagoSrt.csproj +++ b/PapagoSrt/PapagoSrt.csproj @@ -12,6 +12,7 @@ +