在堆栈溢出和其他页面上搜索了几个小时后,我还无法找到解决问题的任何方法。我想通过 Python Selenium 和 ChromeDriver 浏览页面 https://www.bstn.com/eu_de。
使用 Firefox 或 Chrome 等普通浏览器访问该页面时,它可以正常打开。然而,当使用 Selenium 时,它会返回白屏页面。我的脚本已经包含了在 StackOverflow 上找到的标准程序数百次:
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument('--disable-blink-features=AutomationControlled')
我还在每个请求上使用轮换和更新用户代理。进一步调查显示服务器似乎抛出了 429 错误。通常 429 表示发出的请求太多,但由于我只尝试了不到 10 次,并且在普通浏览器上它仍然有效,这似乎不是问题。
再次查看 Chromes Network -> Headers 选项卡显示抛出 429 错误的服务器是 Cloudflare,因此看来 Cloudflare 以任何方式参与其中。 我比较了成功连接(图片右侧)和左侧 429 错误连接的请求标头。 唯一不同的是一个稍大的 cookie 集(所有 cookie 在发出请求之前都被删除)、referer header、包含 same-origin 的 sec-fetch-site 值以及 sec-fetch-user: ?1 。 使用名为 seleniumwire 的工具添加/更改此标头信息似乎不会以任何方式影响我面临的问题。
我还可以识别请求 cookie:
"name":"KP_REF","domain":"www.bstn.com","value":""
在普通浏览器上创建,在使用 Selenium 时不存在。添加:
driver.add_cookie({"name":"KP_REF","domain":"www.bstn.com","value":""})
也不会改变任何东西。我错过了什么或做错了什么才能访问此页面?到目前为止,我还没有使用 Chrome headless,而是依赖于使用 ChromeDriver,因为这是我们应用程序内部的标准。我还坚持使用 ChromeDriver,因为 ChromeDriverManager 似乎不适用于未检测到的 ChromeDriver。
HTTP 429 Error。 429 状态代码旨在与速率限制方案一起使用。
在实时用例中,如果 AUT(测试中的应用程序)检测到用户代理尝试在短时间内过于频繁地访问特定页面,则会触发速率限制功能。这种情况最常见的现象是攻击者反复尝试登录您的网站。
但是,应用程序服务器也可能使用 cookie 来识别用户,而不是通过登录凭据来识别用户。请求也可以基于每个请求、跨您的服务器或跨多个服务器进行计数。因此,有多种情况可能会导致您看到如下错误之一:
HTTP/1.1 429 Too Many Requests
Content-type: text/html
Retry-After: 3600
和
<html>
<head>
<title>Too Many Requests</title>
</head>
<body>
<h1>Too Many Requests</h1>
<p>I only allow 100 requests per hour to this website per logged in user. Try again soon. </p>
</body>
</html>
拒绝服务 (DDoS) 攻击也可能导致此错误,您需要单独解决该错误,并且应该一起进行不同的讨论。
hCaptcha 来保护网页免受机器人的侵害