HttpWebRequest, WebResponse et les différences WebBrowser

c# html-agility-pack httpwebresponse webbrowser-control

Question

J'ai Winform application et je gratte HTML.Parfois Google me redirige la page captcha pour la vérification.

Et le problème à partir d’ici, j’utilise HtmlAgilityPack et je reçois du HTML comme:

 try
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36";
            request.Timeout = 10000;
            WebResponse response = request.GetResponse();
            using (var reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
            {
                return reader.ReadToEnd();
            }
        }
        catch (WebException e)
        {
           //Here I am getting captcha page
            using (var sr = new StreamReader(e.Response.GetResponseStream()))
                return sr.ReadToEnd();
        }

après le chargement de HTML dans mon HTMLDocument. Je cherche captcha. Si html contient, j'ouvre WebBrowser et navigue à nouveau dans la même URL. Mais après 30 secondes, si j'essaie de récupérer le code HTML. Il me montre à nouveau la page captcha. Je le teste, WebBrowser ne montre plus la page capthca mais ma demande indique toujours POURQUOI ? Ils demandent tous les deux au même hôte localhost même ordinateur même wifi ..

 var webBrowser1 = new WebBrowser
                     {
                         ScriptErrorsSuppressed = true,
                         AllowNavigation = true,
                         Dock = DockStyle.Fill
                     };
                    BrowserSettings(webBrowser1);

              webBrowser1.Refresh(WebBrowserRefreshOption.Completely);
            //Here I am NOT getting captcha page
                    webBrowser1.Navigate(searchUrl);
                    if (DialogForms == null)
                    {
                        DialogForms = new Form
                        {
                            WindowState = FormWindowState.Maximized,
                            TopMost = true
                        };
                    }
                    DialogForms.Controls.Add(webBrowser1);
                    DialogForms.ShowDialog();

Réponse populaire

Assez rapide réponse: Parce que ce que vous faites est à peu près la raison pour laquelle reCAPTCHA existe et contribue à atténuer et / ou à prévenir (c'est moi qui souligne):

reCAPTCHA utilise un moteur d'analyse de risque avancé et des CAPTCHA adaptatifs pour empêcher les logiciels automatisés de se livrer à des activités abusives sur votre site.

... il utilise des techniques avancées d'analyse des risques, prenant en compte l'engagement total de l'utilisateur dans CAPTCHA, et évalue un large éventail d'indices qui distinguent les humains des robots .


Mettre à jour:

Q:

mais ma question est, comment peut comprendre reCAPTCHA ma méthode de requête. Exemple: je reçois le code HTML par WebBrowser ou via Request: Response et lu dans Stream.Ä ° t ne montre pas reCAPTCHA pour WebBrowser mais pour Request: Response, il le fait

UNE:

  • La "vérification de bot" s'exécute en fonction de sa propre détermination quant au moment de l'invocation.

  • J'ai également supposé que le site que vous supprimiez implémentait spécifiquement reCAPTCHA de Google - c'est mon erreur. Le site pourrait très bien se trouver derrière un service WAF ( Web Application Firewall ) qui invoquera des vérifications de bot qui posent des problèmes en fonction de CAPTCHA (ou rejetteront la demande).

Hth ...



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow