HttpWebRequest, WebResponse and WebBrowser Differents



我有通知应用程序,我正在抓取HTML。有时谷歌重定向我的验证码页面进行验证。

问题从这里开始,我正在使用 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,"就是这样"谷歌是开放的。但是在 30 秒后,如果我尝试再次获取 html。它再次向我显示验证码页面。我测试了它,WebBrowser 不再显示 capthca 页面,但我的请求仍然显示为什么?他们都从同一台本地主机请求同一台计算机相同的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();

有点快速的非答案: 因为你正在做的几乎就是 reCAPTCHA 存在并帮助缓解和/或预防的原因(强调我的(:

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

。它使用先进的风险分析技术,考虑用户与CAPTCHA的整个互动,并评估将人类与机器人区分开来的各种线索。


更新:

问:

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

一个:

  • "机器人检查"根据它自己对何时调用它的决定来运行。

  • 我还假设您正在抓取的网站正在专门实施Google的reCAPTCHA - 这是我的错误。该站点很可能位于WAF(Web应用程序防火墙(服务后面,该服务将调用基于CAPTCHA提供一些挑战的机器人检查(或直接拒绝请求(。

呵......

最新更新