簡體   English   中英

C#/ASP.NET Selenium WebDriver - 重用 Cookie

[英]C#/ASP.NET Selenium WebDriver - Re-using Cookies

我想要:

  • 登錄網站
  • 保存餅干
  • 讓用戶選擇做 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,您應該告訴 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 配置文件的位置相同。 此配置文件以文件夾的形式存在,而不是文件。

通常 Selenium 不支持跨會話 cookie。

最簡單的方法是使用序列化。 您需要圍繞 selenium 的 cookie 創建包裝類並使其可序列化。 並創建 CookiesManager 類,其中將有 2 個方法:SaveSession() - 保存和 RestoreSession() - 從序列化文件中恢復。

另一種方法是將一些 cookie 信息保存到一些臨時 cookie 文件中。 像.... CSV 或 XML。 您可以在此處看到這種方式的示例: 保持用戶登錄 - 使用網絡驅動程序保存 cookie,但僅適用於 c#。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM