20

Selenium WebDriver 总是manager().getCookies()返回 0个元素!PS 版本 2.32.0.0InternetExplorerDriver

4

7 回答 7

13

如果 cookie 是HTTPOnly,您无法从 Javascript/Selenium 读取它们

于 2014-02-16T12:45:57.493 回答
4
Set<Cookie> allcookies = driver.manage().getCookies();
System.out.println(allcookies);
于 2017-05-08T10:18:37.907 回答
4

我不明白为什么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;
}
于 2019-03-11T11:42:23.453 回答
3

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

于 2015-09-10T12:24:04.780 回答
1

问题似乎与 64 位驱动程序有关。我尝试过使用 32 位驱动程序,它可以工作。如果使用 WebDriverManager,只需执行以下操作:

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

另一件事可能相关(不太确定)是 Internet Explorer 11 在注册表级别的设置,请参阅Selenium IE 驱动程序信息

仅对于 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 子项可能存在也可能不存在,如果不存在,则应创建它。重要提示:在此键中,创建一个名为 iexplore.exe 且值为 0 的 DWORD 值。

于 2020-02-07T14:03:17.273 回答
0

也许您需要先设置 cookie,AFAIK webdriver 总是从新会话开始。相反,您可以尝试像这样设置用户配置文件: 如何使 FirefoxDriver 使用现有配置文件?

于 2013-04-12T13:31:01.740 回答
-2

这是获取所有 cookie 的方法

allCookies = driver.manage().getCookies();
于 2013-04-11T16:11:13.707 回答