在我的 Selenium-Test
(与 chromedriver-2.24
)我正在尝试使用以下语句通过基本身份验证访问我的网页:
WebDriver driver = ...;
driver.get("http://admin:admin@localhost:8080/project/");
但是google chrome在控制台给了我以下警告:
[否决]其URL包含嵌入凭据的子资源请求(例如。 https://user:pass@host/
)已阻止。看到了吗https://www.chromestatus.com/feature/5669008342777856 更多细节。
在标记的链接中,提到支架被丢弃:
放弃对子资源请求中嵌入凭据的支持((已删除)
我现在的问题是,有没有其他方法可以从selenium进行基本身份验证?
注意:这没有帮助:如何使用java处理seleniumwebdriver中的httpbasic auth头?
5条答案
按热度按时间xt0899hw1#
通过url的基本身份验证仅针对子资源被阻止。所以你仍然可以在域中使用它:
您还可以创建一个小扩展,以便在请求凭据时自动设置凭据:
https://gist.github.com/florentbr/25246cd9337cebc07e2bbb0b9bf0de46
b09cbbtk2#
直接使用selenium driver.get(url)方法在javascript弹出窗口中加载提示进行身份验证的url时,不支持这种基本身份验证,我也在这里停留了很长时间。这是因为chrome驱动程序在更新59(可能)后不允许使用这种身份验证技术。仍然有后门通过selenium使用浏览器中的javascript引擎来加载这样的url。
kx5bkwkv3#
这里面有一些更新
link
作为:Chromium Issue 435547
放弃对子资源请求中嵌入凭据的支持((已删除)我们应该阻止对包含嵌入凭据的子资源的请求(例如“http://ima_user:hunter2@example.com/yay.tiff"). 这些资源将作为网络错误处理。
但是,基本的身份验证功能仍然可以通过selenium java绑定与selenium 3.4.0、geckodriver v0.18.0、chromedriver v2.31.488763、google chrome 60.x和mozilla firefox 53.0一起使用。
下面是尝试打开url的示例代码http://the-internet.herokuapp.com/basic_auth 使用一组有效的凭据,它就可以工作了。
火狐:
铬:
6l7fqoea4#
chrome的新功能和通过远程调试进行的基本身份验证:只需将其链接到此处,这样陷入困境的人就可以找到chrome的解决方案,还有更多:在seleniumgrid中进行chrome远程调试
yacmzcpb5#
弗洛伦特b.的通话方式。两次登陆网址对我来说都很管用,只是稍作修改。在js中:
使用chromedriver 2.33.506092开发google chrome 62.0.3202.94,该方法似乎与firefox 56.0.2、geckodriver 0.19.1和phantomjs 2.1.1兼容,所有这些都在debian linux 9下。
我认为第一个调用设置了浏览器发送的授权头。第二个调用从url中删除凭据,并且凭据不再应用于子资源。这个
then
同步两个请求以确保顺序。