8

我想要:

  • 登录网站
  • 保存 Cookie
  • 让用户选择做 A、B 或 C
  • A、B 和 C 都需要登录。
  • 每个人都会打开一个 FirefoxDriver 并做自己的事情

我想要做的是登录一次,从中保存 cookie,然后将它们添加到我想打开的任何其他 FirefoxDriver 中。

现在我正在尝试将cookie保存在

public ReadOnlyCollection<Cookie> Cookies { get; set; }

这是结果

WebDriver.Manage().Cookies.AllCookies;

假设登录有效并且cookies保存在上面,我有这个:

        WebDriver = new FirefoxDriver();
        WebDriver.Navigate().GoToUrl("http://www.example.com");

        if (cookies != null)
        {
            var s = WebDriver.Manage().Cookies;  //Logged out cookies
            WebDriver.Manage().Cookies.DeleteAllCookies(); //Delete all of them
            var sd = WebDriver.Manage().Cookies; //Make sure theyre deleted
            foreach (var cookie in cookies)
            {
                WebDriver.Manage().Cookies.AddCookie(cookie);
            }
            var ss = WebDriver.Manage().Cookies; 
            WebDriver.Navigate().GoToUrl("http://example.com/requiresloginpage");
        }

问题是,但是在这种情况下超过“ss”会给出这个异常错误

AllCookies = 'ss.AllCookies' threw an exception of type
'OpenQA.Selenium.WebDriverException'
base {System.Exception} = {"Unexpected problem getting cookies"}
InnerException = {"Cookie name cannot be null or empty string\r\nParameter name: name"}

我传递了 8 个 cookie(您登录时的总数)——所有这些 cookie 看起来都设置好了。不知道我做错了什么

4

2 回答 2

5

为了保存 cookie,您应该告诉 selenium 使用指定的配置文件。出于某种原因,我无法让它使用我的普通 Chrome 配置文件,但这个解决方案将允许你登录一次,之后,selenium 会记住 cookie。

ChromeOptions options = new ChromeOptions();
options.AddArguments(@"user-data-dir=C:\Users\YOU\AppData\Local\Google\Chrome\User Data\NAMEYOUCHOOSE");
//specify location for profile creation/ access
ChromeDriver driver = new ChromeDriver(options);

简而言之,此代码为包含 cookie 的配置文件创建了一个保存位置。使用此代码,无需编写保存或加载 cookie 的代码,Chrome 会处理。

请注意,chrome 保存您的个人资料的位置可能与我的不同,而且我只成功使用了一个目录,该目录与我的常规 Chrome 个人资料的位置相同。此配置文件以文件夹的形式存在,而不是文件。

于 2018-07-11T15:37:14.570 回答
0

通常 Selenium 不支持跨会话 cookie。

最简单的方法是使用序列化。您需要围绕 selenium 的 cookie 创建包装类并使其可序列化。并创建 CookiesManager 类,其中将有 2 个方法:SaveSession() - 保存和 RestoreSession() - 从序列化文件恢复。

另一种方法是将一些 cookie 信息保存到一些临时 cookie 文件中。喜欢.... Csv 或 XML。您可以在此处看到这种方式的示例:保持用户登录 - 使用 Web 驱动程序保存 cookie, 但仅适用于 c#。

于 2016-08-18T23:34:55.007 回答