当前位置: 首页 > 知识库问答 >
问题:

Selenium-通过url进行基本身份验证

柳经纶
2023-03-14

在我的selenium-test(使用chromedriver-2.24)中,我试图通过基本身份验证访问我的网页,并使用以下语句:

WebDriver driver  = ...;
driver.get("http://admin:admin@localhost:8080/project/");

但谷歌Chrome在控制台给了我以下警告:

[弃用]阻止URL包含嵌入凭据(例如https:/user:pass@host/)的子资源请求。 详情见https://www.chromestatus.com/feature/5669008342777856。

在标记链接中提到支持已被删除:

删除对子资源请求中嵌入凭据的支持。 (已删除)

我现在的问题是,有没有其他方法从Selenium进行基本身份验证?

注意:这没有帮助:如何使用Java处理Selenium Webdriver中的HTTP基本身份验证头?

共有3个答案

欧阳向文
2023-03-14

Florent B.的两次call.get on URL的方法在我身上起到了作用,只是稍加修改。 在JS中:

driver
        .get('http://admin:admin@localhost:8080')
        .then( () => driver.get('http://localhost:8080') )

在google chrome 62.0.3202.94和ChromeDriver 2.33.506092上工作,该方法似乎与firefox 56.0.2和geckodriver 0.19.1以及phantomjs 2.1.1兼容,所有这些都是在Debian linux 9下进行的。

我相信正在发生的是第一个调用设置浏览器发送的授权头。 第二个调用从URL中删除凭据,并且凭据不再应用于子资源。 然后同步这两个请求以确保顺序。

慎芷阳
2023-03-14

仅对子资源阻止通过url进行的基本身份验证。 因此您仍然可以在域中使用它:

driver.get("http://admin:admin@localhost:8080");
driver.get("http://localhost:8080/project");

您还可以创建一个小扩展,以便在请求凭据时自动设置凭据:

options = webdriver.ChromeOptions()
options.add_extension(r'C:\dev\credentials.zip')

https://gist.github.com/florentbr/25246cd9337cebc07e2bbb0b9bf0de46

吴俊晤
2023-03-14

链接中有一些更新为:

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/basicauth,它可以工作。

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class BasicAuthentication_FF 
{
    public static void main(String[] args) 
    {
        System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
        WebDriver driver =  new FirefoxDriver();
        driver.navigate().to("http://admin:admin@the-internet.herokuapp.com/basic_auth");
    }
}
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

public class BasicAuthentication_Chrome 
{
    public static void main(String[] args) 
    {
        System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
        ChromeOptions options = new ChromeOptions();
        options.addArguments("start-maximized");
        options.addArguments("disable-infobars");
        options.addArguments("--disable-extensions");
        WebDriver driver =  new ChromeDriver(options);
        driver.navigate().to("http://admin:admin@the-internet.herokuapp.com/basic_auth");
    }
}
 类似资料:
  • 问题内容: 在(带有)中,我尝试使用以下语句通过基本身份验证访问我的网页: 但是Google Chrome浏览器在控制台中向我发出以下警告: [弃用]其URL包含嵌入式凭据(例如https://user:pass@host/)的子资源请求被阻止。有关更多详细信息,请参见https://www.chromestatus.com/feature/5669008342777856。 在标记的链接中提到该

  • 问题内容: 在(带有)中,我尝试使用以下语句通过基本身份验证访问我的网页: 但是Google Chrome浏览器在控制台中向我发出以下警告: [弃用]其URL包含嵌入式凭据(例如)的子资源请求被阻止。 在标记的链接中提到该支持已被删除: 在子资源请求中放弃对嵌入式凭据的支持。(已删除) 我现在的问题是,是否有另一种方法可以从Selenium进行基本身份验证? 问题答案: 对此进行了一些更新 : 在

  • 问题内容: 我知道通常您可以通过在URL中传递用户名和密码来登录需要Selenium进行HTTP基本身份验证的网站,例如: 我已经在Firefox 2或3上运行了Selenium测试,仍然可以看到“需要身份验证”对话框窗口? 更新:这似乎不是Selenium问题,而是Firefox问题。如果我在FF中手动输入URL,则会看到验证对话框,但是如果我在Opera中输入URL,则显示的页面将不显示验证对

  • 问题: 我们有一个spring的基于MVC的RESTful API,它包含敏感信息。API应该是安全的,但是不希望在每个请求中发送用户的凭据(User/Pass组合)。根据REST指南(和内部业务需求),服务器必须保持无状态。API将由另一台服务器以混搭方式使用。 要求: > 客户端请求使用凭据(不受保护的URL);服务器返回一个安全令牌,该令牌包含足够的信息,供服务器验证未来的请求并保持无状态。

  • 我一直试图用restTemplate传递基本身份验证,但它甚至没有将身份验证头传递给服务器。下面是我使用的bean定义` `

  • 问题内容: 我目前正在尝试使用HTTP和HTTPS访问URL。我尝试访问的URL需要基本身份验证。使用HTTP可以正常工作,但是使用HTTPS则不能。我不确定是否需要使用HTTPS添加其他内容。该URL应该返回给我的文本是键值格式,可以加载到对象中。 这是到目前为止我尝试过的代码。 这是证书类别 当我删除所有证书代码(以及证书代码)时的错误消息: 问题答案: 问题似乎是由于在更改连接的和实例之前打

  • 在浏览器中直接键入下面的url,它可以工作, 但是,当我使用相同的url,用于selenium网络驱动程序测试时,它连接到 以及请求HTTP身份验证。我是否需要更改chrome浏览器中的任何设置,或调整默认配置文件?

  • 问题内容: 我们的Web应用程序之一是使用基本身份验证,并使用AngularJS进行构建。为了测试该应用程序,我使用了Protractor,后者使用Selenium与浏览器进行通信。 在Chrome中,一切正常,进行基本身份验证很容易: 在Internet Explorer下,带有密码和用户名的URL被认为存在安全风险,因此是不允许的。在Internet Explorer 9之前,可以在注册表中关