【问题标题】:Google blocking Selenium Webdriver谷歌阻止 Selenium Webdriver
【发布时间】:2014-12-29 12:04:15
【问题描述】:

我有一个脚本,我试图通过selenium 搜索一个谷歌页面来测试一些东西。每当我打开Webdriver 时,我都会得到一个验证码:

fp = webdriver.FirefoxProfile()
driver = webdriver.Firefox(firefox_profile=fp)
driver.get('https://www.google.com/search?q=asdf')

但是,如果我在浏览器中打开完全相同的页面https://www.google.com/search?q=asdf,它就可以正常工作。为什么 Google 会提高验证码,我可以使用 webdriver 发送哪些参数,使其“看起来”像普通浏览器并且不会提高验证码?

注意,我已经尝试添加我的用户代理,但它仍然会引发同样的错误:

fp = webdriver.FirefoxProfile()
fp.set_preference("general.useragent.override","Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:32.0) Gecko/20100101 Firefox/32.0")
driver = webdriver.Firefox(firefox_profile=fp)

这是我在普通浏览器中的请求标头示例:

【问题讨论】:

  • 不,我建议删除上面的“类似问题”,因为这是一个完全不同的问题。
  • @David542,您是否在使用某种代理?
  • webdrivers 为渲染的源添加指纹。例如,Firefox 驱动程序注入“webdriver = True”。该问题与发送的用户代理无关。

标签: python selenium


【解决方案1】:

您需要设置用户代理。 看到这个SO ANSWER

关于使用set_preference

【讨论】:

  • 请参阅修改后的问题。
  • 哦,即使通过了用户代理,您仍然得到验证码?
  • 您是否尝试过只设置Mozilla/5.0 而不设置剩余的字符串?
  • 是的,我还是明白了。
  • 这很奇怪,因为我用上面完全相同的代码和预期的请求标头打开驱动程序没有问题
【解决方案2】:

使用请求传递所有标头:

headers = {
    "Host": "www.google.com",
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:32.0) Gecko/20100101 Firefox/32.0",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.5",
    "Accept-Encoding": "gzip, deflate",
    "Cookie": "PREF=ID=0df7e6fbda0c09d3:U=bfc47b624b57a0e9:FF=0:TM=1414961297:LM=1414961298:S=2FtJad1BEeJ0M5XS; NID=67=t5zTrFVtG4cLZH2kVmsQEbqDRFJisM86z1s27zx0A6vTR0MWqg69DaY39muso6fIEgqnli7IaEv1Rge1ZxBG0Nr1_3KH1aLu_z1-Ar48oiVDFFSVX4KDRgWnHQWjUfHC",
    "Connection": "keep-alive",
    "Cache-Control": "max-age=0",
}

【讨论】:

  • 这应该是一个答案吗?我建议更详细地说明解决方案是什么,因为这很清楚。
猜你喜欢
  • 2016-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-08
  • 2013-04-24
相关资源
最近更新 更多