在使用Selenium进行抓取时,偶发的403 Forbidden客户端错误响应状态码
我有一个运行在无头模式下的Selenium WebDriver的 Python脚本,用来从某个站点查询大量单独的记录。大多数时候它运行正常,但大约每十分钟左右就会出现403错误。通过尝试不同的延迟重试,我发现403错误会持续大约45–60秒。因此我能想到的一个可行的变通方法是在遇到403时先休眠60秒,然后再恢复正常请求。
我尝试把user agent设置为非无头模式,如下:
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.50 Safari/537.36.
即便如此也没有帮助。无论是在本地机器上运行,还是在EC2实例上运行,情况都是如此一致。
还能再尝试些什么?
解决方案
403 Forbidden error
HTTP的 403 Forbidden客户端错误响应状态码 表示服务器已经对请求进行了身份验证,但请求因权限不足而失败,响应正文中包含失败的原因。请求失败与应用逻辑相关,例如对资源或一个操作的权限不足。接收到403响应的客户端应当预期,在不对请求进行任何修改的情况下重复相同请求将因同样的403错误而失败。
举例来说,由于 InsufficientPermissions 而导致的HTTP 403 Forbidden客户端错误响应状态码,大致类似于:
HTTP/1.1 403 Forbidden
Date: Tue, 28 Jun 2026 12:56:49 GMT
Content-Type: application/json
Content-Length: 88
{
"error": "InsufficientPermissions",
"message": "Deleting users requires the 'admin' role."
}
403 Forbidden错误的类型
403 Forbidden Error并不总是能清楚地说明原因。下面列出多种403 Forbidden错误类型:
- 403: 服务器理解请求但拒绝授权访问时最常见的错误。
- 403.1 Execute Access Forbidden: 当服务器不允许执行服务器端脚本、可执行文件或CGI程序时发生。
- 403.2 Read Access Forbidden: 当服务器阻止用户查看或读取请求的资源时发生。
- 403.4 SSL Required: 当访问资源需要安全的HTTPS连接时发生。
- 403.5 SSL 128 Required: 当服务器需要至少128位加密的安全SSL连接时发生。
- 403.6 IP Address Rejected: 当服务器阻止用户的IP地址访问资源时发生。
403 Forbidden错误的常见原因
当服务器理解请求但拒绝访问请求的资源时,常见原因可能如下:
- Authentication Failures: 凭据错误或权限不足。
- Firewall Blocks: Web应用防火墙将请求视为可疑并阻止。
- Faulty Plugins: 配置错误或不兼容的插件限制访问。
- IP Blacklisting: 服务器或网站阻止了特定IP地址。
- Server Misconfigurations: 服务器、文件或安全设置不正确。
- Moved or Restricted Content: 请求的资源/网页已被移动或访问受限。
- Legal Restrictions: 由于区域或合规性组织策略而被拒绝访问。
- High Resource Demand: 大量流量或服务器过载暂时限制访问。
- ACL Restrictions: 访问控制列表阻止未授权用户访问所需资源。
本用例
如果测试用例通常能够正常执行,但大约每十分钟就会遇到403错误,那么你的请求量可能已经远超 节流限制。在这种情况下,你需要放慢测试执行速度。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。