【问题标题】:HttpWebRequest, WebResponse and WebBrowser DifferentsHttpWebRequest、WebResponse 和 Web 浏览器的区别
【发布时间】:2019-01-28 01:47:54
【问题描述】:

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

问题从这里开始,我正在使用 HtmlAgilityPack 并获得像这样的 html:

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

将 html 加载到我的 HtmlDocument 之后。我正在寻找验证码。如果 html 包含,我将打开 WebBrowser 并再次导航相同的 url。我正在验证 cathpa 并且“就是这样”google 已打开。但是 30 秒后,如果我再次尝试获取 html。它再次向我显示验证码页面。我测试它,WebBrowser 不再显示 capthca 页面,但我的请求仍然显示 WHY ?他们都从相同的本地主机请求相同的计算机相同的 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();

【问题讨论】:

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


    【解决方案1】:

    有点快速未回答:因为您所做的几乎就是为什么 reCAPTCHA 存在并有助于减轻和/或预防(强调我的):

    reCAPTCHA 使用高级风险分析引擎和自适应验证码防止自动化软件在您的网站上参与滥用活动。

    ...它使用先进的风险分析技术,考虑到用户对 CAPTCHA 的整个参与,并评估广泛的线索区分人类与机器人


    更新:

    问:

    但我的问题是,如何理解 reCAPTCHA 我的请求方法。示例我通过 WebBrowser 或通过 Request:Response 获取 html 并从 Stream.İt 中读取,但不会显示 WebBrowser 的 reCAPTCHA 但对于 Request:Response 它会

    答:

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

    • 我还假设您正在抓取的网站正在实施 Google 的 reCAPTCHA 具体 - 这是我的错误。该站点很可能支持WAF (Web Application Firewall) 服务,该服务将调用基于验证码提供一些挑战的机器人检查(或直接拒绝请求)。

    第...

    【讨论】:

    • 根据您的回答,我的理解是,如果两者都出现 reCAPTCHA 是正常的。是吗?
    • 但我的问题是,reCAPTCHA 怎么理解我的请求方法。示例我通过 WebBrowser 或通过 Request:Response 获取 html 并从 Stream.İt 中读取 WebBrowser 不显示 reCAPTCHA 但对于 Request:Response 它会显示。它们在相同的解决方案中相同的项目相同的表单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 2012-11-14
    相关资源
    最近更新 更多