HttpWebRequest, WebResponse e WebBrowser Differents

c# html-agility-pack httpwebresponse webbrowser-control

Domanda

Ho l'applicazione winform e sto raschiando HTML. A volte google reindirizza la mia pagina captcha per verificare.

E il problema inizia da qui sto usando HtmlAgilityPack e ottenendo html come:

 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();
        }

dopo aver caricato html nel mio HtmlDocument. Sto cercando il captcha. Se html contiene, sto aprendo WebBrowser e navigando di nuovo lo stesso URL. Sto verificando Cathpa e "questo è tutto" è aperto Google. Ma dopo 30 secondi, se provo a ricevere di nuovo html. Mi mostra di nuovo la pagina captcha. Lo collaudo, WebBrowser non mostra più la pagina di capthca ma la mia richiesta sta ancora mostrando PERCHÉ ? Entrambi richiedono lo stesso stesso host localhost stesso 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();

Risposta popolare

Un po 'rapida non risposta: perché quello che stai facendo è praticamente il motivo per cui reCAPTCHA esiste e aiuta a mitigare e / o prevenire (enfatizzare il mio):

reCAPTCHA utilizza un avanzato motore di analisi del rischio e CAPTCHA adattivi per impedire al software automatizzato di svolgere attività illecite sul tuo sito.

... utilizza tecniche avanzate di analisi del rischio, considerando l'intero impegno dell'utente con il CAPTCHA, e valuta una vasta gamma di segnali che distinguono gli esseri umani dai robot .


Aggiornare:

D:

ma la mia domanda è, come posso capire reCAPTCHA il mio metodo di richiesta. Esempio, ottengo l'html da WebBrowser o tramite Request: Response e read da Stream.Ä ° t non mostra reCAPTCHA per WebBrowser ma per Request: Response it does

UN:

  • Il "controllo bot" viene eseguito in base alla propria determinazione su quando richiamarlo.

  • Ho anche dato per scontato che il sito che stai analizzando stia implementando specificamente la reCAPTCHA di Google - questo è un mio errore. Il sito potrebbe benissimo essere alla base di un servizio WAF ( Web Application Firewall ) che invocherà i controlli dei bot che offrono alcune sfide basate su CAPTCHA (o rifiutano completamente la richiesta).

Hth ...



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché