我想:
- 登录网站
- 保存 Cookies
- 让用户选择做 A、B 或 C
- A、B、C 都需要登录。
- 每个人都会打开一个 FirefoxDriver 并做自己的事情
我想做的是登录一次,保存其中的 cookie,并将它们添加到我想打开的任何其他 FirefoxDriver。
现在我正在尝试将 cookie 保存在
public ReadOnlyCollection<Cookie> Cookies { get; set; }
这是
的结果WebDriver.Manage().Cookies.AllCookies;
假设登录成功并且 cookie 保存在上面,我有这个:
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,您应该告诉 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 配置文件指向相同位置的目录。此配置文件以文件夹而非文件的形式存在。
关于C#/ASP.NET Selenium WebDriver - 重复使用 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17345753/