【问题标题】:Selenium WebDriver manager().getCookies() returns 0 alwaysSelenium WebDriver manager().getCookies() 总是返回 0
【发布时间】:2013-04-03 20:29:04
【问题描述】:

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

【问题讨论】:

  • 你能给出一些代码示例吗?
  • 您确定可见 cookie 存在吗?如果在 JavaScript 控制台中运行“document.cookie”会显示什么?
  • 我深入挖掘,发现它在IE10中的问题,它根本不显示cookie(我在控制台中通过命令'document.cookie'尝试)。

标签: java cookies selenium selenium-webdriver


【解决方案1】:

这是获取所有 cookie 的方法

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

【讨论】:

  • 我知道。问题出在 IE 或驱动程序中,我根本无法获取 cookie! Cookie 存在,但驱动返回 0...
【解决方案2】:

也许您需要先设置 cookie,AFAIK 网络驱动程序总是从新会话开始。 相反,您可以尝试像这样设置用户配置文件: How to make FirefoxDriver use existing profile?

【讨论】:

【解决方案3】:

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

【讨论】:

【解决方案4】:

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

【讨论】:

    【解决方案5】:
    Set<Cookie> allcookies = driver.manage().getCookies();
    System.out.println(allcookies);
    

    【讨论】:

    • 虽然您提供的代码可能会回答这个问题 - 添加一些内容来解释为什么会确保这实际上是一个有用的答案。如果您不确定如何写答案,请查看How to Ask
    • 问题不是如何使用 Selenium 获取 cookie,而是为什么 driver.manage().getCookies() 在 IE 中不起作用。所以这不是回答问题。
    【解决方案6】:

    我不明白为什么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;
    }
    

    【讨论】:

    • //将 driver.executeScript 替换为 js.executeScript 像:JavascriptExecutor js; js = (JavascriptExecutor)驱动程序; String cookiesString = (String) js.executeScript("return document.cookie");
    【解决方案7】:

    问题似乎与 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 子键可能存在也可能不存在,并且应该是 如果它不存在则创建。重要提示:在此键中,创建一个 名为 iexplore.exe 的 DWORD 值,值为 0。

    【讨论】:

      猜你喜欢
      • 2018-02-07
      • 2020-12-17
      • 1970-01-01
      • 2015-09-27
      • 2014-03-20
      • 2013-04-13
      • 2013-03-30
      • 2016-07-13
      • 2023-04-09
      相关资源
      最近更新 更多