身份验证弹出窗口进入后台 Selenium、Firefox

Authentication popup goes into the background Selenium, Firefox

当我在 Selenium 中创建新的 Firefox 驱动程序时,我遇到这个问题已经有 2 周了,代理的身份验证弹出窗口立即被推入后台。 Selenium 无法再到达那里。你有解决问题的方法吗?我正在使用 Selenium 3.141.5,Java 1.8。和 Firefox 版本 63.0.1.

System.setProperty("webdriver.gecko.driver", "C:\Program Files\geckodriver.exe");
FirefoxOptions options = new FirefoxOptions();
options.setBinary("C:\Program Files\Mozilla Firefox\firefox.exe");
WebDriver driver = new FirefoxDriver(options);
try {
        Alert alert = driver.switchTo().alert();
        alert.sendKeys("Username" + Keys.TAB + "Password");
        alert.accept();
        driver.switchTo().defaultContent();
}catch (NoAlertPresentException e) {
        e.printStackTrace();
}
driver.get("https://www.google.de/");

编辑:我用 Firefox 版本 62.0.3 对其进行了测试,一切正常。

最好的办法是避免弹出窗口。

  1. 按 Win+R,运行 "firefox -p" 并创建新的配置文件(我们称之为 selenium_profile)
  2. 运行 selenium_profile 中的 Firefox,登录代理并将您的凭据保存到 Firefox
  3. 使用自定义配置文件,这是我的设置:

    FirefoxOptions options = new FirefoxOptions();
    ProfilesIni allProfiles = new ProfilesIni();         
    FirefoxProfile selenium_profile = allProfiles.getProfile("selenium_profile");
    options.setProfile(selenium_profile);
    options.setBinary("C:\Program Files (x86)\Mozilla Firefox\firefox.exe");
    System.setProperty("webdriver.gecko.driver", sec_var.driver_path);
    driver = new FirefoxDriver(options);
    driver.manage().window().maximize();
    

使用自定义浏览器配置文件,您几乎可以使用任何设置修改、导入证书(以避免另一个身份验证弹出窗口)、使用扩展、...

您可以通过在 URL 中发送凭据来避免基本身份验证弹出窗口:

driver.get("https://username:password@www.example.com");

但它在 Chrome 中不起作用。

我遇到了完全相同的问题,并且一直在到处研究解决方法。

这是我到目前为止学到的东西:

  • 使用之前保存的 custom browser profile 来保存您的凭据(@pburgr 建议)可以解决问题,但是它也会积累更多意想不到的和可能不需要的浏览器配置文件信息,例如 cookie、历史记录和所有内容。
  • auth 弹出窗口不是正常弹出窗口,因此无法使用 selenium 对其进行操作 switch_to
  • 此外,无法检查这些类型的凭据弹出窗口,也无法使用 javascript。
  • 另一种解决方法是使用 pyAutoGui 来 alt+tab 并填写您的凭据。但这不是一个很好的解决方案,因为在弹出之前您可能很难猜测有多少个 alt+tab。

底线:最有前途的方法是加载一个全新的干净的浏览器配置文件,通过添加此类凭据更新此配置文件(我不知道如何做,也不知道是否可行),瞧,在会话结束时丢弃此配置文件.