Example #1
0
        public IPttRequest RequestWithCaptchaValue(IPttRequest request, IPttCaptcha pttCaptcha)
        {
            var htmlDoc = new HtmlAgilityPack.HtmlDocument();
            htmlDoc.LoadHtml(request.Response);

            var challengeField = htmlDoc.DocumentNode.SelectSingleNode("//input[@id='recaptcha_challenge_field']");
            if (challengeField == null)
            {
                return null;
            }
            var challengeFieldValue = challengeField.Attributes["value"].Value;

            var pttRequestFactory = new PttRequestFactory(request);
            var newReq = pttRequestFactory.Deserialize(string.Format("<Request><Url>{0}</Url><Method>POST</Method></Request>", request.Url));

            newReq.PostValue = string.Format("recaptcha_challenge_field={0}&recaptcha_response_field={1}&submit=I%27m+a+human", challengeFieldValue, pttCaptcha.Value ?? "");
            newReq.WrappedRequest.ContentType = "application/x-www-form-urlencoded";

            var pttResponse = new PttResponse();
            //bu gelen htmlsource dan textarea degerini oku
            htmlDoc = new HtmlAgilityPack.HtmlDocument();
            htmlDoc.LoadHtml(pttResponse.GetResponse(newReq));
            var valueToPasteNode = htmlDoc.DocumentNode.SelectSingleNode("//textarea");
            if (valueToPasteNode == null)
            {
                return null;
            }

            return null;
        }
Example #2
0
        public IPttCaptcha CaptchaImage(IPttRequest request, string htmlSource)
        {
            var htmlDoc = new HtmlAgilityPack.HtmlDocument();
            htmlDoc.LoadHtml(htmlSource);
            var iframe = htmlDoc.DocumentNode.SelectSingleNode("//iframe");
            if (iframe == null)
            {
                return null;
            }
            var iframeSrc = iframe.Attributes["src"].Value;

            var newRequest = new PttRequest(iframeSrc) {WrappedRequest = {ContentType = "text/html", Method = "GET"}};
            IPttResponse response = new PttResponse();
            var captchaFormHtml = response.GetResponse(newRequest);

            htmlDoc = new HtmlAgilityPack.HtmlDocument();
            htmlDoc.LoadHtml(captchaFormHtml);
            var captchaImg = htmlDoc.DocumentNode.SelectSingleNode("//img");
            if (captchaImg == null)
            {
                return null;
            }
            var captchaSrc = string.Format("http://{0}/recaptcha/api/{1}", googleHost, captchaImg.Attributes["src"].Value);

            return new PttCaptcha() { Url = captchaSrc, RequestUsed = newRequest, FormUrl = iframeSrc};
        }
Example #3
0
        public IPttCaptcha CaptchaImage(IPttRequest request, string htmlSource)
        {
            if (_extensiveLoggingNeeded)
            {
                Logger.LogProcess("TezCaptcha CaptchaImage to be parsed from:" + htmlSource);
            }

            var jss = new JavaScriptSerializer();
            var dict = jss.Deserialize<dynamic>(htmlSource);
            string captchaFormHtml = "";
            var captchaFormUrl = "";
            if (dict.ContainsKey("message"))
            {
                if (dict["message"] == "captchaEnable")
                {
                    if (_extensiveLoggingNeeded)
                    {
                        Logger.LogProcess("TezCaptcha CaptchaImage captchaEnable message came");
                    }
                    Thread.Sleep(TimeSpan.FromSeconds(3));
                    captchaFormUrl = HttpUtility.UrlDecode((string)dict["ref"]);
                    if (_extensiveLoggingNeeded)
                    {
                        Logger.LogProcess("TezCaptcha CaptchaImage captcha form url:" + captchaFormUrl);
                    }
                    var pttRequestFactory = new PttRequestFactory(request, false);
                    var newReq = pttRequestFactory.Deserialize(string.Format("<Request><Url>{0}</Url></Request>",captchaFormUrl));

                    if (_extensiveLoggingNeeded)
                    {
                        Logger.LogProcess("TezCaptcha CaptchaImage newRequest created:" + newReq);
                    }
                    try
                    {
                        IPttResponse response = new PttResponse();
                        captchaFormHtml = response.GetResponse(newReq);
                        newReq.WrappedRequest = null;
                        GC.Collect();
                    }
                    catch (Exception exception)
                    {
                        Logger.LogProcess("TezCaptcha CaptchaImage newrequest response error:");
                        Logger.LogExceptions(exception);
                    }
                    if (_extensiveLoggingNeeded)
                    {
                        Logger.LogProcess("TezCaptcha CaptchaImage captcha form html:" + captchaFormHtml);
                    }

                }
            }

            var html = new HtmlDocument();
            html.LoadHtml(captchaFormHtml);
            var captchaValue = html.DocumentNode.SelectSingleNode("//input[@name='image']");

            if (captchaValue == null)
            {
                if (_extensiveLoggingNeeded)
                {
                    Logger.LogProcess("TezCaptcha CaptchaImage captcha image useing default value");
                }

                return new PttCaptcha() { Url = "http://www.tez-tour.com/captcha/images/19E9EE6B59814EF25AAC404E5336EA2E.png", FormUrl = captchaFormUrl };
            }
            if (_extensiveLoggingNeeded)
            {
                Logger.LogProcess("TezCaptcha CaptchaImage captcha image extracted:" + captchaValue.Attributes["value"].Value);
            }

            return new PttCaptcha() { Url = string.Format("http://www.tez-tour.com/captcha/images/{0}.png", captchaValue.Attributes["value"].Value), FormUrl = captchaFormUrl };
        }