【问题标题】:Selenium ChromeDriver returns 403 errors on build serverSelenium ChromeDriver 在构建服务器上返回 403 错误
【发布时间】:2022-06-25 18:59:14
【问题描述】:

我们创建了一个 Selenium 测试项目,它启动 (ASP.NET) Web 应用程序并使用 ChromeDriver 运行几个测试。在本地,这一切都运行良好(在无头和非无头模式下)。

但是在构建服务器(使用 Azure DevOps 代理)上,这会失败,而不会开始测试。启动 ChromeDriver 时似乎失败:驱动程序启动,但随后立即出现 403 错误。它永远不会到达实际加载网页的部分。

有什么想法可以去哪里看吗?

【问题讨论】:

    标签: c# selenium azure-devops selenium-chromedriver


    【解决方案1】:

    回答我自己的问题以记录可能的解决方案。

    经过一些严格的调查(包括使用the source code 来查明真相)后,我们发现代理服务器以某种方式妨碍了我们。事实证明,ChromeDriver 尝试通过本地端口(例如 http://localhost:12345)进行通信,该端口是通过代理服务器重定向的。失败并出现 403 错误。

    这为我们提供了可能的解决方案。首先,我们尝试使用the .proxybypass file 排除本地主机地址。这不起作用——事实证明,这个代理绕过只适用于 https 请求。 ChromeDriver 控制命令通过 http 发送 :-(

    然后我们确保在我们的测试代码中没有使用代理。我们通过以下几行来做到这一点:

    var options = new ChromeOptions();
    options.AddArgument("--no-sandbox");
    options.AddArgument("headless");
    options.AddArgument("ignore-certificate-errors");
    options.Proxy = new Proxy()
        {
            Kind = ProxyKind.Direct
        };
    
    var driver = new ChromeDriver(options);
    

    除了这些设置(请注意,添加了一些参数是为了解决其他问题,可能不适用于您自己的情况),我们还禁用了其他请求的代理:

    WebRequest.DefaultWebProxy = null; 
    HttpClient.DefaultProxy = new WebProxy()
    {
        BypassProxyOnLocal = true,
    };
    

    这使我们的测试最终可以在构建服务器上运行而不会出现 403 错误。 最后一点(这可能很明显)是如果您遇到任何问题,请始终以非无头模式运行您的测试。这让我们可以看到原本会被隐藏的“无效证书错误”。

    【讨论】:

      猜你喜欢
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多