public string GetCaptchaAnswer(byte[] captchaImage) { using var dialog = new CaptchaDialog(captchaImage); if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { return(dialog.Answer); } return(null); }
private string ShowCaptchaDialog(HttpHandler httpHandler) { var captchaDialog = new CaptchaDialog(httpHandler, _proxy, _useProxy); var captcha = string.Empty; if (captchaDialog.ShowDialog() == DialogResult.OK) { captcha = captchaDialog.Text; //MessageBox.Show(captcha); } captchaDialog.Dispose(); return(captcha); }
public IWebElement OverrideNavigation(IWebDriver driver, string url) { IWebElement result = null; driver.Navigate().GoToUrl(url); while (driver.Url.Contains("showcaptcha")) { IWebElement captcha = driver.FindElement(By.XPath("//div[@class='captcha__image']")); string captchaSrc = captcha.FindElement(By.XPath("//img")).GetAttribute("src"); CaptchaDialog captchaDialog = null; Application.Current.Dispatcher.Invoke((Action) delegate { captchaDialog = new CaptchaDialog(captchaSrc); captchaDialog.ShowDialog(); }); if (captchaDialog.CaptchaInput == null) { throw new Exception("Captcha was not solved."); } IWebElement inputBox = driver.FindElement(By.XPath("//input[@class='input-wrapper__content']")); inputBox.SendKeys(captchaDialog.CaptchaInput); inputBox.Submit(); Thread.Sleep(500); } //Wait for result to be available WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(1)); result = wait.Until(ResultIsNotEmpty); return(result); }
private bool CheckData() { var errors = new StringBuilder(); // проверить заполнение полей if (string.IsNullOrEmpty(tbEmail.Text)) { errors.AppendLine(Localizer.GetString("MessageEmailErrorEmpty")); } else { try { new MailAddress(tbEmail.Text); } catch (FormatException) { errors.AppendLine(Localizer.GetString("MessageEmailErrorWrongFormat")); } } var login = tbLogin.Text; if (login.Length < PlatformUser.LoginLenMin) { errors.AppendLine(string.Format(Localizer.GetString("MessageUserNameErrorShortFmt"), PlatformUser.LoginLenMin)); } else if (login.Length > PlatformUser.LoginLenMax) { errors.AppendLine(string.Format(Localizer.GetString("MessageUserNameErrorLongFmt"), PlatformUser.LoginLenMax)); } if (!PlatformUser.CheckLoginSpelling(login)) { errors.AppendLine(Localizer.GetString("MessageUserNameErrorBadSymbols")); } if (mode == UserControlMode.New) { // проверить размер депо var depoSz = cbDepoSize.Text.Replace(" ", "").ToIntSafe(); if (!depoSz.HasValue) { errors.AppendLine(Localizer.GetString("MessageDepoVolumeMustBeInt")); } var depoVolume = depoSz ?? 1000; if (depoVolume < 1000) { errors.AppendLine(Localizer.GetString("MessageDepoVolumeMustBe1000")); } else if (depoVolume > 5000000) { errors.AppendLine(Localizer.GetString("MessageDepoVolumeMustBe5000")); } } if (mode == UserControlMode.Edit || EnablePasswordOnRegistration) { // проверить пароль if (tbPassword.Text.Length < 8) { errors.AppendLine( string.Format(Localizer.GetString("MessagePasswordTooShortFmt"), 8)); } else if (tbPassword.Text.Length > 25) { errors.AppendLine(string.Format(Localizer.GetString("MessagePasswordTooLongFmt"), 25)); } } if (errors.Length > 0) { MessageBox.Show(errors.ToString(), Localizer.GetString("TitleError"), MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } // проверить капчу var dlg = new CaptchaDialog(Localizer.GetString("MessageEnterConfirmationCode"), true, false, 4); if (dlg.ShowDialog() != DialogResult.OK) { return(false); } return(true); }
public Captcha.CaptchaSolution SolveCaptcha(Action <string> updateStatus, Models.CaptchaSolvingConfig captchaConfig) { Logger.Debug("Getting captcha..."); updateStatus?.Invoke("Getting captcha..."); //Store captcha ID SetConfig(JoinUri, Method.GET); var response = _client.Execute(_request); try { _captchaGid = CaptchaRegex.Matches(response.Content)[0].Groups[1].Value; } catch (Exception e) { Logger.Error("Captcha error.", e); updateStatus($"Captcha error: {e.Message}"); return(new Captcha.CaptchaSolution(true, $"{e}\n\n{response.ResponseStatus}", captchaConfig)); } //download and return captcha image SetConfig($"{CaptchaUri}{_captchaGid}", Method.GET); var captchaPayload = string.Empty; for (int i = 0; i < 3; i++) { try { Logger.Debug($"Downloading captcha: Try {i + 1}/3"); updateStatus($"Downloading captcha: Try {i + 1}/3"); var _captchaResp = _client.DownloadData(_request); captchaPayload = GetBase64FromImage(_captchaResp); break; } catch (Exception ex) { Logger.Error("Downloading captcha error.", ex); captchaPayload = string.Empty; } } // recognize captcha Logger.Debug("Recognizing captcha..."); updateStatus("Recognizing captcha..."); switch (captchaConfig.Service) { case Enums.CaptchaService.Captchasolutions: { Logger.Debug("Recognizing captcha via Captchasolutions..."); var _resp = Captchasolutions("solve", new Dictionary <string, object>() { { "p", "base64" }, { "captcha", $"data:image/jpg;base64,{captchaPayload}" }, { "key", captchaConfig.CaptchaSolutions.ApiKey }, { "secret", captchaConfig.CaptchaSolutions.ApiSecret }, { "out", "txt" }, }); if (Regex.IsMatch(_resp, @"Error:\s(.+)", RegexOptions.IgnoreCase)) { Logger.Warn($"Captchasolutions error:\n{_resp}\n====== END ======"); return(new Captcha.CaptchaSolution(true, _resp, captchaConfig)); } var solution = Regex.Replace(_resp, @"\t|\n|\r", ""); Logger.Debug($"Captchasolutions: {solution}"); return(new Captcha.CaptchaSolution(solution, null, captchaConfig)); } case Enums.CaptchaService.RuCaptcha: { Logger.Debug("Recognizing captcha via TwoCaptcha/RuCaptcha"); var _captchaIdResponse = TwoCaptcha("in.php", new Dictionary <string, object>() { { "key", captchaConfig.RuCaptcha.ApiKey }, { "body", $"data:image/jpg;base64,{captchaPayload}" }, { "method", "base64" }, { "soft_id", "2370" }, { "json", "0" }, }); var _captchaStatus = _captchaIdResponse?.FirstOrDefault()?.ToUpper() ?? "UNKNOWN"; Logger.Debug($"TwoCaptcha/RuCaptcha image upload response: {_captchaStatus}"); switch (_captchaStatus) { case "OK": break; case "ERROR_NO_SLOT_AVAILABLE": Thread.Sleep(6000); return(new Captcha.CaptchaSolution(true, _captchaStatus, captchaConfig)); default: return(new Captcha.CaptchaSolution(false, _captchaStatus, captchaConfig)); } var _captchaId = _captchaIdResponse.ElementAt(1); Logger.Debug($"TwoCaptcha/RuCaptcha ID: {_captchaId}"); Thread.Sleep(TimeSpan.FromSeconds(20)); var solution = string.Empty; for (int i = 0; i < 3; i++) { Logger.Debug($"TwoCaptcha/RuCaptcha requesting solution... Try {i} of 3"); var _captchaResponse = TwoCaptcha("res.php", new Dictionary <string, object>() { { "key", captchaConfig.RuCaptcha.ApiKey }, { "action", "get" }, { "id", _captchaId }, { "json", "0" }, }); var _status = _captchaResponse?.FirstOrDefault()?.ToUpper() ?? "UNKNOWN"; Logger.Debug($"TwoCaptcha/RuCaptcha solving status: {_status}"); switch (_status) { case "OK": { var _solution = new Captcha.CaptchaSolution(_captchaResponse.ElementAt(1), _captchaId, captchaConfig); Logger.Debug($"TwoCaptcha/RuCaptcha solution: {_solution.Solution}"); return(_solution); } case "CAPCHA_NOT_READY": case "ERROR_NO_SLOT_AVAILABLE": Thread.Sleep(6000); continue; default: return(new Captcha.CaptchaSolution(true, _status, captchaConfig)); } } } Logger.Debug("TwoCaptcha/RuCaptcha somethig went wrong."); return(new Captcha.CaptchaSolution(true, "Something went wrong", captchaConfig)); default: { using (var dialog = new CaptchaDialog(this, updateStatus, captchaConfig)) { if (dialog.ShowDialog() == DialogResult.OK) { return(dialog.Solution); } } } return(new Captcha.CaptchaSolution(false, "Can't solve captcha!", captchaConfig)); } }