private async Task <CaptchaResponse> Solve(CaptchaService service, CaptchaType captchaType) { var proxy = MakeProxy(Proxy, ProxyType); switch (captchaType) { case CaptchaType.TextCaptcha: var textOptions = new TextCaptchaOptions() { CaptchaLanguageGroup = CaptchaLanguageGroup, CaptchaLanguage = CaptchaLanguage }; return(await service.SolveTextCaptchaAsync(Text, textOptions)); case CaptchaType.ImageCaptcha: if (CaptchaImage == null) { throw new ArgumentNullException("You must download an image first!"); } var imageOptions = new ImageCaptchaOptions() { IsPhrase = IsPhrase, CaseSensitive = CaseSensitive, CharacterSet = CharacterSet, RequiresCalculation = RequiresCalculation, MinLength = int.Parse(MinLength), MaxLength = int.Parse(MaxLength), CaptchaLanguageGroup = CaptchaLanguageGroup, CaptchaLanguage = CaptchaLanguage, TextInstructions = TextInstructions }; return(await service.SolveImageCaptchaAsync(CaptchaImage.ToBase64(ImageFormat.Jpeg), imageOptions)); case CaptchaType.ReCaptchaV2: return(await service.SolveRecaptchaV2Async(SiteKey, SiteUrl, SData, Enterprise, Invisible, proxy)); case CaptchaType.ReCaptchaV3: return(await service.SolveRecaptchaV3Async(SiteKey, SiteUrl, Action, float.Parse(MinScore, CultureInfo.InvariantCulture), Enterprise, proxy)); case CaptchaType.FunCaptcha: return(await service.SolveFuncaptchaAsync(PublicKey, ServiceUrl, SiteUrl, NoJS, proxy)); case CaptchaType.HCaptcha: return(await service.SolveHCaptchaAsync(SiteKey, SiteUrl, proxy)); case CaptchaType.KeyCaptcha: return(await service.SolveKeyCaptchaAsync(UserId, SessionId, WebServerSign1, WebServerSign2, SiteUrl, proxy)); case CaptchaType.GeeTest: return(await service.SolveGeeTestAsync(GT, Challenge, ApiServer, SiteUrl, proxy)); case CaptchaType.Capy: return(await service.SolveCapyAsync(SiteKey, SiteUrl, proxy)); } throw new NotSupportedException($"Captcha type {captchaType} is not supported by the tester yet!"); }