Selenium WebDriver manager()。getCookies()总是返回0

时间:2013-04-11 15:03:35

标签: java cookies selenium selenium-webdriver

Selenium WebDriver  manager().getCookies() 始终中的InternetExplorerDriver会返回0个元素! 附:版本2.32.0.0

8 个答案:

答案 0 :(得分:9)

如果Cookie为HTTPOnly,则无法从Javascript / Selenium

中读取它们

答案 1 :(得分:2)

您确定您的网络驱动程序位于您希望设置cookie的域中吗? getCookies仅返回当前域的Cookie。

答案 2 :(得分:2)

Set<Cookie> allcookies = driver.manage().getCookies();
System.out.println(allcookies);

答案 3 :(得分:1)

我不明白为什么driver.manage().getCookies();在FF和IE中总是返回大小0。

但是我发现使用executeScript

可以解决此问题
Set<Cookie> cookies = driver.manage().getCookies();

if (cookies.size() == 0) { // To support FF and IE
    String cookiesString = (String) driver.executeScript("return document.cookie");
    cookies = parseBrowserCookies(cookiesString);
}




private Set<Cookie> parseBrowserCookies(String cookiesString) {
    Set<Cookie> cookies = new HashSet<>();

    if (StringUtils.isBlank(cookiesString)) {
        return cookies;
    }

    Arrays.asList(cookiesString.split("; ")).forEach(cookie -> {
        String[] splitCookie = cookie.split("=", 2);
        cookies.add(new Cookie(splitCookie[0], splitCookie[1], "/"));
    });

    return cookies;
}

答案 4 :(得分:0)

也许你需要先设置cookie,AFAIK webdriver总是以新鲜的会话开始。 相反,您可以尝试设置这样的用户配置文件: How to make FirefoxDriver use existing profile?

答案 5 :(得分:0)

我对FireFox(61.0.1)有相同的问题 这是cookie的详细信息,并且driver.manage().getCookies();的大小为0

HTTPOnly is false

答案 6 :(得分:0)

问题似乎出在64位驱动程序上。我已经尝试过使用32位驱动程序,并且可以工作。如果使用WebDriverManager,请执行以下操作:

WebDriverManager.iedriver().arch32().setup();

可能与之相关的另一件事(不是很确定)是在注册表级别为Internet Explorer 11进行设置,请参见Selenium IE driver information

仅对于IE 11,您需要在目标上设置一个注册表项 计算机,以便驱动程序可以维持与实例的连接 它创建的Internet Explorer。对于32位Windows安装, 您必须在注册表编辑器中检查的密钥是 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BFCACHE。对于64位Windows 装置,关键是 HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BFCACHE。请注意 FEATURE_BFCACHE子项可能存在或可能不存在,应该 如果不存在则创建。重要提示:在此注册表项中,创建一个 DWORD值,名为iexplore.exe,值为0。

答案 7 :(得分:-1)

这是你可以做的所有饼干

allCookies = driver.manage().getCookies();