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

时间:2018-11-28 13:55:39

标签: java selenium authentication firefox popupwindow

我有两个星期的问题,当我在Selenium中创建新的Firefox驱动程序时,该代理的身份验证弹出窗口会立即推送到后台。硒不能再到达那里了。您有解决问题的方法吗?我正在使用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版进行了测试,一切正常。

2 个答案:

答案 0 :(得分:1)

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

  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中不起作用。

答案 1 :(得分:0)

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

这是我到目前为止所学到的内容

  • 使用以前保存的custom browser profile来保存您的凭据(@pburgr建议)可以解决问题,但是它还会积累很多意想不到的和可能不希望的浏览器配置文件信息,例如cookie,历史记录和所有内容。
  • auth弹出窗口不是普通的弹出窗口,因此无法使用硒switch_to来操纵
  • 此外,这些类型的凭据弹出窗口无法检查也无法使用JavaScript。
  • 另一个解决方法是使用pyAutoGui alt + tab并填充您的凭据。不过,这不是一个很好的解决方案,因为您可能很难猜测直到弹出多少alt + tab。

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