HttpWebRequest, WebResponse y WebBrowser Differents

c# html-agility-pack httpwebresponse webbrowser-control

Pregunta

Tengo la aplicación Winform y estoy raspando HTML. A veces, Google me redirecciona la página captcha para verificar.

Y el problema comienza aquí. Estoy usando HtmlAgilityPack y obteniendo html como:

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

después de cargar html a mi HtmlDocument. Estoy buscando captcha. Si html contiene, abro WebBrowser y navego por la misma url nuevamente. Estoy verificando cathpa y "eso es" google está abierto. Pero después de 30 segundos, si intento obtener HTML nuevamente. Me muestra la página de captcha de nuevo. Lo pruebo, WebBrowser ya no muestra la página de Capthca, pero mi solicitud sigue mostrando ¿POR QUÉ ? Ambos solicitan desde el mismo localhost, la misma computadora, el mismo 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();

Respuesta popular

No respuesta algo rápida: porque lo que estás haciendo es más o menos por qué existe reCAPTCHA y ayuda a mitigar y / o prevenir (énfasis mío):

reCAPTCHA utiliza un avanzado motor de análisis de riesgos y CAPTCHA adaptables para evitar que el software automatizado participe en actividades abusivas en su sitio.

... utiliza técnicas avanzadas de análisis de riesgos, considerando el compromiso completo del usuario con el CAPTCHA, y evalúa una amplia gama de señales que distinguen a los humanos de los bots .


Actualizar:

Q:

pero mi pregunta es, ¿cómo puedo entender mi método de solicitud de reCAPTCHA? Ejemplo: Obtengo el html por WebBrowser o por Solicitud: Respuesta y leo desde Stream.Ä ° t no muestra reCAPTCHA para WebBrowser pero para Solicitud: Respuesta sí.

UN:

  • La "comprobación de bot" se ejecuta en función de su propia determinación sobre cuándo invocarla.

  • También asumí que el sitio que estás raspando está implementando específicamente reCAPTCHA de Google, ese es mi error. El sitio bien podría estar detrás de un servicio WAF ( Web Application Firewall ) que invocará chequeos de bots que ofrezcan algunos desafíos basados ​​en CAPTCHA (o que rechacen la solicitud).

Hth ...



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué