我有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();
}
答案 0 :(得分:0)
有些快速的非答案:因为您所做的几乎是reCAPTCHA存在并有助于缓解和/或预防(强调我的意思)的原因:
reCAPTCHA使用高级风险分析引擎和自适应CAPTCHA 来保持自动化软件,避免在您的网站上从事滥用行为。
...它使用了先进的风险分析技术,考虑了用户与CAPTCHA的全部互动,并评估了区分人与机器人的各种线索。
更新:
Q:
但是我的问题是,如何才能了解reCAPTCHA我的请求方法。例如,我通过WebBrowser或通过Request:Response获取html并从Stream读取。İt没有显示WebBrowser的reCAPTCHA,但对于Request:Response却显示reCAPTCHA
A:
“机器人检查”的运行取决于它自己何时调用它。
我还假定您要抓取的网站正在具体实施Google的reCAPTCHA -这是我的错误。该网站很可能位于WAF
(Web Application Firewall)服务的后面,该服务将调用根据CAPTCHA提供挑战的机器人检查(或完全拒绝该请求)。
Hth ...