HttpWebRequest,WebResponse和WebBrowser的不同之处

时间:2018-08-21 20:09:48

标签: c# webbrowser-control html-agility-pack httpwebresponse

我有winform应用程序,并且正在抓取HTML。有时Google会重定向我的验证码页面以进行验证。

问题从这里开始,我正在使用HtmlAgilityPack并获取类似html的

n

在将html加载到我的HtmlDocument之后。我正在寻找验证码。如果html包含,我将打开WebBrowser并再次导航相同的URL。我正在验证cathpa和“多数民众赞成”谷歌已打开。但是30秒后,如果我尝试再次获取html。再次显示验证码页面。我测试了一下,WebBrowser不再显示capthca页面,但是我的请求仍然显示为什么?他们俩都从同一台本地主机同一台计算机请求同一台wifi。

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

1 个答案:

答案 0 :(得分:0)

有些快速的非答案:因为您所做的几乎是reCAPTCHA存在并有助于缓解和/或预防(强调我的意思)的原因:

  

reCAPTCHA使用高级风险分析引擎和自适应CAPTCHA 保持自动化软件,避免在您的网站上从事滥用行为。

     

...它使用了先进的风险分析技术,考虑了用户与CAPTCHA的全部互动,并评估了区分人与机器人的各种线索


更新:

Q:

  

但是我的问题是,如何才能了解reCAPTCHA我的请求方法。例如,我通过WebBrowser或通过Request:Response获取html并从Stream读取。İt没有显示WebBrowser的reCAPTCHA,但对于Request:Response却显示reCAPTCHA

A:

  • “机器人检查”的运行取决于它自己何时调用它。

  • 我还假定您要抓取的网站正在具体实施Google的reCAPTCHA -这是我的错误。该网站很可能位于WAFWeb Application Firewall)服务的后面,该服务将调用根据CAPTCHA提供挑战的机器人检查(或完全拒绝该请求)。

Hth ...