Ala*_*tar 6 c# asp.net cookies selenium webdriver
我想要:
我想要做的是登录ONCE,从中保存cookie,并将它们添加到我想要打开的任何其他FirefoxDriver.
现在我正在尝试保存cookie
public ReadOnlyCollection<Cookie> Cookies { get; set; }
Run Code Online (Sandbox Code Playgroud)
这是结果
WebDriver.Manage().Cookies.AllCookies;
Run Code Online (Sandbox Code Playgroud)
假设登录工作和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");
}
Run Code Online (Sandbox Code Playgroud)
问题是,在这种情况下,超过"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"}
Run Code Online (Sandbox Code Playgroud)
我正在传递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);
Run Code Online (Sandbox Code Playgroud)
简而言之,此代码为配置文件创建一个保存位置,其中包含 cookie。使用此代码,无需编写保存或加载 cookie 的代码,Chrome 会处理该问题。
请注意,Chrome 保存您的配置文件的位置可能与我的不同,而且我仅成功使用了一个与我的常规 Chrome 配置文件指向相同位置的目录。该配置文件以文件夹的形式存在,而不是文件。
一般来说,Selenium 不支持跨会话 cookie。
最简单的方法是使用序列化。您需要围绕 selenium 的 cookie 创建包装类并使其可序列化。并创建 CookiesManager 类,其中有 2 个方法:SaveSession() - 保存和 RestoreSession() - 从序列化文件恢复。
另一种方法是将一些 cookie 信息保存到一些临时 cookie 文件中。就像......CSV 或XML。您可以在此处查看这种方式的示例:保持用户登录 - 使用 Web 驱动程序保存 cookie ,但仅适用于 C#。
| 归档时间: |
|
| 查看次数: |
7873 次 |
| 最近记录: |