Пример #1
0
        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!");
        }
Пример #2
0
        protected async Task TextCaptchaTest()
        {
            var options = new TextCaptchaOptions
            {
                CaptchaLanguageGroup = CaptchaLanguageGroup.NotSpecified,
                CaptchaLanguage      = CaptchaLanguage.NotSpecified
            };

            var solution = await Service.SolveTextCaptchaAsync(
                text : "What is 2+2?",
                options);

            Assert.Equal("4", solution.Response);
        }
Пример #3
0
        /// <inheritdoc/>
        public async override Task <StringResponse> SolveTextCaptchaAsync
            (string text, TextCaptchaOptions options = default, CancellationToken cancellationToken = default)
        {
            var response = await httpClient.PostMultipartToStringAsync
                               ("index.cgi",
                               GetAuthPair()
                               .Add("action", "usercaptchaupload")
                               .Add("file-upload-01", text)
                               .Add("textonly", 1)
                               .ToMultipartFormDataContent(),
                               cancellationToken)
                           .ConfigureAwait(false);

            if (IsError(response))
            {
                throw new TaskSolutionException(GetErrorMessage(response));
            }

            return(await TryGetResult(response, CaptchaType.TextCaptcha, cancellationToken).ConfigureAwait(false) as StringResponse);
        }
Пример #4
0
        /// <inheritdoc/>
        public async override Task <StringResponse> SolveTextCaptchaAsync
            (string text, TextCaptchaOptions options = default, CancellationToken cancellationToken = default)
        {
            var response = await httpClient.PostMultipartToStringAsync
                               ("in.php",
                               new StringPairCollection()
                               .Add("key", ApiKey)
                               .Add("textcaptcha", text)
                               .Add("soft_id", SoftId)
                               .Add("json", "1", UseJsonFlag)
                               .Add("header_acao", "1", AddACAOHeader)
                               .Add(ConvertCapabilities(options))
                               .ToMultipartFormDataContent(),
                               cancellationToken)
                           .ConfigureAwait(false);

            return((UseJsonFlag
                ? await TryGetResult(response.Deserialize <Response>(), CaptchaType.TextCaptcha, cancellationToken).ConfigureAwait(false)
                : await TryGetResult(response, CaptchaType.TextCaptcha, cancellationToken).ConfigureAwait(false)
                    ) as StringResponse);
        }
Пример #5
0
        /// <inheritdoc/>
        public async override Task <StringResponse> SolveTextCaptchaAsync
            (string text, TextCaptchaOptions options = null, CancellationToken cancellationToken = default)
        {
            var response = await httpClient.PostMultipartToStringAsync("",
                                                                       GetAuthPair()
                                                                       .Add("function", "picture2")
                                                                       .Add("pict", text)
                                                                       .Add("pict_type", 83)
                                                                       .Add("lang", options.CaptchaLanguage.ToISO6391Code())
                                                                       .ToMultipartFormDataContent(),
                                                                       cancellationToken)
                           .ConfigureAwait(false);

            if (DeCaptcherResponse.TryParse(response, out DeCaptcherResponse resp))
            {
                return new StringResponse {
                           Id = GetCaptchaId(resp), Response = resp.Text
                }
            }
            ;

            throw new TaskSolutionException(response);
        }
Пример #6
0
 /// <summary>Solves a text based captcha.</summary>
 ///
 /// <param name="text">The captcha question.</param>
 ///
 /// <param name="options">
 /// Any additional options like the language of the question.
 /// If null they will be disregarded.
 /// </param>
 ///
 /// <param name="cancellationToken">A token that can be used to cancel the async task.</param>
 ///
 /// <returns>
 /// A <see cref="StringResponse"/> containing the captcha id to be used with
 /// <see cref="ReportSolution(long, CaptchaType, bool, CancellationToken)"/> and the
 /// captcha solution as plaintext.
 /// </returns>
 ///
 /// <exception cref="TaskCreationException"></exception>
 /// <exception cref="TaskSolutionException"></exception>
 /// <exception cref="TimeoutException"></exception>
 public virtual Task <StringResponse> SolveTextCaptchaAsync
     (string text, TextCaptchaOptions options = null, CancellationToken cancellationToken = default)
 {
     throw new NotSupportedException();
 }