private IWebElement FindElementWithXPathDict(string xPathKey) { try { lock (xpaths) { foreach (var xpath in this.xpaths[xPathKey]) { var element = driver.FindElementByXPathOrNull(xpath); if (element != null) { return(element); } } } } catch (Exception e) { if (!this.IsAborted) { Console.WriteLine("[Exception] Hooker-FindElement FindElementWithXPathDict: Key {0} XPath {1}", xPathKey, e.Message); } } return(null); }
private void Update() { if (driver != null) { driver.Quit(); driver = null; } var options = new ChromeOptions(); options.AddArgument("headless"); options.AddArgument("disable-gpu"); options.AddArgument("disable-infobars"); options.AddArgument("--disable-extensions"); //options.AddUserProfilePreference("profile.default_content_settings", 2); //options.AddUserProfilePreference("profile.default_content_setting_values", 2); options.AddArgument("user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)" + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"); //Not bot var service = ChromeDriverService.CreateDefaultService(); service.HideCommandPromptWindow = true; try { driver = new ChromeDriver(service, options); driver.Navigate().GoToUrl("http://www.google.com/translate_t?hl=en"); this.Ready = true; } catch (Exception e) { if (!this.IsAborted) { Console.WriteLine("[Exception] Hooker-CrawlingScripts-LoadChromeDriver: " + e.Message); } Process[] chromeDriverProcesses = Process.GetProcessesByName("chromedriver"); foreach (var chromeDriverProcess in chromeDriverProcesses) { if (chromeDriverProcess.MainModule.FileName.StartsWith( System.AppDomain.CurrentDomain.BaseDirectory)) { chromeDriverProcess.Kill(); } } System.Environment.Exit(-1); } LoadDictionary(); while (true) { if (this.IsAborted) { break; } TranslateWorker currentWork = null; lock (works) { if (works.Count > 0) { currentWork = works[0]; works.RemoveAt(0); if (currentWork.isAborted) { continue; } } } if (currentWork != null) { if (string.IsNullOrEmpty(currentWork.Text) || string.IsNullOrEmpty(currentWork.From) || string.IsNullOrEmpty(currentWork.To)) { currentWork.FailedCallback("Input string empty"); continue; } try { var targetText = currentWork.Text; //var replaceFormat = "\"{{{0}}}\""; //int currentReplaceIndex = 0; //Dictionary<string, string> replaceStrings = new Dictionary<string, string>(); lock (this.translateDictionary) { using (var enumerator = this.translateDictionary.Keys.GetEnumerator()) { while (enumerator.MoveNext()) { var key = enumerator.Current; var value = this.translateDictionary[key]; var regex = string.Format("\\b({0})\\b", key); if (Regex.IsMatch(targetText, regex)) { targetText = Regex.Replace(targetText, regex, value); //var replaced = string.Format(replaceFormat, currentReplaceIndex); //targetText = Regex.Replace(targetText, regex, replaced); //replaceStrings.Add(replaced, value); //currentReplaceIndex++; } } } } //string url = String.Format("http://www.google.com/translate_t?hl=en&ie=UTF8&text={0}&langpair={1}", HttpUtility.UrlEncode(targetText), string.Format("{0}|{1}", currentWork.From, currentWork.To)); string url = String.Format("https://translate.google.com/?sl={1}&tl={2}&text={0}&op=translate", HttpUtility.UrlEncode(targetText), currentWork.From, currentWork.To); driver.Navigate().GoToUrl(url); IWebElement translatedElement = null; var startedAt = DateTime.Now; do { if ((DateTime.Now - startedAt).TotalSeconds > TimeOut) { throw new Exception("Timeout"); } try { translatedElement = driver.FindElementByXPathOrNull(TranslateResultXPath); } catch (Exception e) { if (!this.IsAborted) { Console.WriteLine("[Exception] Translator-Update(TranslateWork)-FindElement: " + e.Message); } } //Needs timeout } while (translatedElement == null); var translated = translatedElement.GetAttribute("data-text"); //foreach (var key in replaceStrings.Keys) // translated = translated.Replace(key, replaceStrings[key]); //Add empty lines. string[] lines = targetText.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None); for (int i = 0; i < lines.Length; i++) { if (string.IsNullOrWhiteSpace(lines[i])) { translated = System.Environment.NewLine + translated; } else { break; } } for (int i = lines.Length - 1; i >= 0; i--) { if (string.IsNullOrWhiteSpace(lines[i])) { translated = translated + System.Environment.NewLine; } else { break; } } currentWork.TranslatedCallback(translated); } catch (Exception e) { if (!this.IsAborted) { Console.WriteLine("[Exception] Translator-Update(TranslateWork): " + e.Message); } currentWork.FailedCallback(e.Message); } } System.Threading.Thread.Sleep(1); } //Dispose if (works != null) { lock (works) { foreach (var work in works) { work.FailedCallback("Abort"); } works.Clear(); } works = null; } if (driver != null) { driver.Quit(); driver = null; } workThread = null; }
private void Work() { if (driver != null) { driver.Quit(); driver = null; } var options = new ChromeOptions(); options.SetLoggingPreference(LogType_Performance, LogLevel.All); options.AddArgument("disable-gpu"); options.AddArgument("disable-infobars"); options.AddArgument("--disable-extensions"); //options.AddUserProfilePreference("profile.default_content_settings", 2); //options.AddUserProfilePreference("profile.default_content_setting_values", 2); //options.AddArgument("-homepage \"" + StartUpURL + "\""); options.AddArgument("user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)" + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"); //Not bot var service = ChromeDriverService.CreateDefaultService(); service.HideCommandPromptWindow = true; try { driver = new ChromeDriver(service, options); driver.Navigate().GoToUrl(StartUpURL); this.Ready = true; } catch (Exception e) { if (!this.IsAborted) { Console.WriteLine("[Exception] Hooker-CrawlingScripts-LoadChromeDriver: " + e.Message); } Process[] chromeDriverProcesses = Process.GetProcessesByName("chromedriver"); foreach (var chromeDriverProcess in chromeDriverProcesses) { try { if (chromeDriverProcess.MainModule.FileName.StartsWith( System.AppDomain.CurrentDomain.BaseDirectory)) { chromeDriverProcess.Kill(); } } catch (Exception _e) { if (!this.IsAborted) { Console.WriteLine("[Exception] Hooker-CrawlingScripts-Kill: " + _e.Message); } } } System.Environment.Exit(-1); } //Do login try { string account_id; if (SaveAccountWindow.GetSavedAccount_ID(out account_id)) { //Loading..? IWebElement loginFormElement = null; IWebElement idInput = null; IWebElement pwInput = null; var started = System.DateTime.Now; do { loginFormElement = driver.FindElementByXPathOrNull("/html/body/div[2]"); idInput = FindElementWithXPathDict(XPathKey_Login_IDInputBox); pwInput = FindElementWithXPathDict(XPathKey_Login_PWInputBox); if ((System.DateTime.Now - started).TotalSeconds > LoginFormWaitTimeout) { throw new Exception("Timeout"); } if (this.IsAborted) { throw new Exception("Aborted"); } } while (loginFormElement == null || idInput == null || pwInput == null); Console.WriteLine("[Log] Loginform wait completed: {0}", (System.DateTime.Now - started).TotalSeconds); idInput.SendKeys(account_id); account_id = null; string account_pw; if (SaveAccountWindow.GetSavedAccount_Password(out account_pw)) { pwInput.SendKeys(account_pw); account_pw = null; var loginButton = FindElementWithXPathDict(XPathKey_Login_LoginButton); if (loginButton != null) { loginButton.Click(); } } } } catch (Exception e) { if (!this.IsAborted) { Console.WriteLine("[Exception] Hooker-AutoLogin: "******"message"]; var method = message["method"].Value <string>(); #endregion if (string.Equals(method, "Network.webSocketFrameReceived")) { var response = message["params"]["response"]; if (response.HasValues) { var payloadData = JToken.Parse(response["payloadData"].Value <string>()); ParsePayloadData(payloadData); } } } } catch (Exception e) { if (!this.IsAborted) { Console.WriteLine("[Exception] Hooker-CrawlingScripts: " + e.Message); } } } //Dispose if (driver != null) { driver.Quit(); driver = null; } crawlingThread = null; }