HttpWebRequest, WebResponse und WebBrowser Unterschiede

c# html-agility-pack httpwebresponse webbrowser-control

Frage

Ich habe Winform-Anwendung und ich kratze HTML. Manchmal google Redirect mich Captcha-Seite für die Überprüfung.

Und das Problem beginnt hier ich verwende HtmlAgilityPack und bekomme HTML wie:

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

nach dem Laden von HTML zu meinem HtmlDocument. Ich suche nach Captcha. Wenn html enthält, öffne ich WebBrowser und navigiere dieselbe URL wieder. Ich überprüfe cathpa und "das ist es" google ist geöffnet. Aber nach 30 Sekunden, wenn ich versuche, HTML wieder zu bekommen. Es zeigt mir wieder die Captcha-Seite. Ich teste es, WebBrowser zeigt capthca Seite nicht mehr, aber meine Anfrage zeigt immer noch WARUM ? Beide fordern vom gleichen localhost gleichen Computer das gleiche wifi an.

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

Beliebte Antwort

Etwas schnelle Nicht-Antwort: Weil was Sie tun, ist ziemlich genau, warum reCAPTCHA existiert und hilft zu mindern und / oder zu verhindern (Betonung meins):

reCAPTCHA verwendet eine fortschrittliche Risikoanalyse-Engine und adaptive CAPTCHAs , um automatisierte Software von missbräuchlichen Aktivitäten auf Ihrer Website abzuhalten .

... es nutzt fortschrittliche Risikoanalysetechniken, berücksichtigt die gesamte Interaktion des Benutzers mit dem CAPTCHA und bewertet eine breite Palette von Hinweisen , die Menschen von Bots unterscheiden .


Aktualisieren:

F:

aber meine frage ist, wie reCAPTCHA meine anfragemethode verstehen kann. Beispiel Ich bekomme den HTML-Code per WebBrowser oder über Request: Response und lese von Stream.Ä ° t zeigt reCAPTCHA für WebBrowser aber nicht für Request: Response tut es

EIN:

  • Der "Bot-Check" läuft basierend auf seiner eigenen Bestimmung, wann er aufgerufen werden soll.

  • Ich bin auch davon ausgegangen, dass die Website, die Sie scrapen, Google ReCAPTCHA spezifisch implementiert - das ist mein Fehler. Die Site könnte sehr wohl hinter einem WAF ( Web Application Firewall ) stehen, der Bot-Checks aufruft, die aufgrund von CAPTCHA eine gewisse Herausforderung bieten (oder die Anfrage direkt ablehnen).

Hth ...



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum