通过 URL HeadlessChrome 的 Selenium 基本身份验证(在 Linux 服务器上)

Selenium Basic Authentication via URL HeadlessChrome ( On Linux Server)

在我的 Selenium 测试中,我需要测试一个使用基本 Authen 的网页, 知道我正在使用 Chrome Headless Java 和 Selenium WebDriver。 在我的机器上 'locally' 使用 driver.get("https://admin:admin@localhost.."); 完美运行 接着 driver.get("https://localhost..") 例如。 我知道 Chrome 不再支持此功能,但我设法根据此处某人的解决方案使其工作,方法是传递第一个 URL 和第二个不带凭证的 URL 。 但是当我 运行 它在 Linux 服务器上的远程(Jenkins)上时,我得到以下错误

the configuration of your browser does not accept cookies

。当我可以配置 Chrome 时,我对服务器没有远见..任何想法如何让它工作而不会遇到这个问题。

我知道之前有很多人问过这个问题,但我没有找到任何有效的答案来解决我的问题。

试试 ChromeDriver 2.45 (changelog) 或更改应该保存 cookie 的位置:

ChromeOptions options = new ChromeOptions();
options.addArguments("user-data-dir=/path/to/your/custom/profile");

否则(默认情况下)它会在每次启动会话时创建一个新的临时目录。

ChromeOptions options = new ChromeOptions();

//用于启用帐户一致性的命令行标志。默认模式是禁用的。

options.addArguments("--account-consistency");

//Chrome 将从启动开始记录到文件

options.addArguments("--log-net-log=C:/some_path/resource/log.json");

//设置要在网络日志中捕获的事件的粒度。

options.addArguments("--net-log-capture-mode=IncludeCookiesAndCredentials");

试试这个,基本上,它会保存 chrome 浏览器启动时的日志,然后它会设置帐户一致性。您可以从日志的任何位置调试问题。

您好,我设法解决了这个问题(我忘了说我们的网站受 Siteminder 保护)所以我做了以下操作:

1-我们在 URL 上注入 USER 和 PASSWORD :

我们面临的问题是显示的提示不是页面 HTML 的一部分,我们很难使用 Selenium 捕捉到它。我们通过直接在 URL 中注入用户登录名和用户密码来管理它,如下所示: 'https://USERNAME:PASSWORD@basicAuthentURL' 这将启动 Chrome 会话。请注意,这只是该过程的第一步。尚未执行用户识别。

2- 我们创建了一个新的 cookie:

启动 URL 后,我们必须手动创建一个名为 « SMCHALLENGE » 的 cookie,并将其添加到当前的 Selenium 会话中,例如在 JAVA 中: 新 Cookie("SMCHALLENGE", "YES");

3- 在没有用户凭据的情况下调用 URL :

由于现在设置了 SMCHALLENGE cookie,最后一步是再次调用 URL (https://basicAuthentURL)。一旦身份验证成功,SMCHALLENGE cookie 将被删除,Siteminder 将生成一个 SMSESSION cookie。 SMSESSION cookie 现在允许我们调用应用程序并成功通过 Siteminder,就像正常登录一样(通过 SSO)。

如果你试试这个,请告诉我。