繁体   English   中英

Selenium 得到响应码 429 但 firefox 私有模式没有

[英]Selenium gets response code of 429 but firefox private mode does not

在python3中使用Selenium打开一个页面。 它不在 selenium 下打开,但在 firefox 私人页面下打开。

有什么区别以及如何解决?

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get('https://google.com') # creating a google cookie
driver.get_cookies() # check google gets cookies
sleep(3.0)
url='https://www.realestate.com.au/buy/in-sydney+cbd%2c+nsw/list-1'
driver.get(url)

不需要创建 google cookie。 它也不存在于 firefox 私人页面下,但没有它也可以工作。 但是,在 Selenium 下,行为不同。

我还看到网站返回[HTTP/2 429 Too Many Requests 173ms]状态并且页面是空白的白色。 在 firefox 私有模式下不会发生这种情况。

更新:

我打开了持久日志。 私有模式下的 Firefox 也会收到 429 响应,但似乎 javascript 将从另一个 url 恢复。 它只是第一次发生。

然而,在 selenium 上,请求无法在 429 响应中存活。 它确实向 cdndex 网站报告了一些内容。 我已经封锁了那个网站,所以你看不到通过那里的请求 go。 这仍然是 firefox 和 selenium 之间的不同行为。

Selenium 与持久日志: 硒网络

Firefox 与持久日志: 火狐网络

这只是我在使用 selenium 和 webdriver 一段时间后的结果; 我怀疑这是由于 selenium 的默认用户代理默认设置为蹩脚的东西,并且服务器端认识到这一点并为您提供了一个愚蠢的 HTTP 代码和一个空白页作为结果。

尝试将用户代理设置为合理的值和/或禁用 selenium 对默认值的干扰。

另一个技巧是使用 wireshark 或类似工具查看请求,以准确了解通过网络发送的内容。

429 请求过多

HTTP 429 Too Many Requests响应状态码表示用户在短时间内发送了太多请求。 429 状态代码旨在与速率限制方案一起使用。


根本原因

当您的服务器检测到用户代理在短时间内过于频繁地尝试访问特定页面时,它会触发速率限制功能。 最常见的示例是用户(或攻击者)反复尝试登录 web 应用程序。

服务器还可以识别具有 cookies 的,而不是通过其登录凭据。 请求也可以基于每个请求、跨您的服务器或跨多个服务器计算。 因此,有多种情况会导致您看到如下错误之一:

  • 429 请求过多
  • 429 错误
  • HTTP 429
  • 错误 429(请求过多)

这个用例

这个用例似乎是Selenium驱动的GeckoDriver启动浏览上下文检测为机器人的经典案例,原因如下:

Selenium 标识自己


参考

您可以在以下位置找到一些相关的详细讨论:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM