Selenium WebDriver
总是manager().getCookies()
返回 0个元素!PS 版本 2.32.0.0InternetExplorerDriver
7 回答
如果 cookie 是HTTPOnly,您无法从 Javascript/Selenium 读取它们
Set<Cookie> allcookies = driver.manage().getCookies();
System.out.println(allcookies);
我不明白为什么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;
}
您确定您的网络驱动程序位于您希望设置 cookie 的域上吗?
getCookies
只返回当前域的 cookie。
问题似乎与 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 值。
也许您需要先设置 cookie,AFAIK webdriver 总是从新会话开始。相反,您可以尝试像这样设置用户配置文件: 如何使 FirefoxDriver 使用现有配置文件?
这是获取所有 cookie 的方法
allCookies = driver.manage().getCookies();