簡體   English   中英

將 Selenium Cookie 復制到 CookieContainer

[英]Copying Selenium Cookies to CookieContainer

我試過:

foreach (OpenQA.Selenium.Cookie cook in driver.Manage().Cookies.AllCookies)
{
    System.Net.Cookie cookie = new System.Net.Cookie();
    cookie.Name = cook.Name;
    cookie.Value = cook.Value;
    cookie.Domain = cook.Domain;
    header.Add(cookie);
}

但它在header.Add(cookie);給了我一個NullReference

我正在嘗試將 Selenium 驅動程序的 cookie 發送到CookieContainer以在WebRequest使用。

這就是你如何做到的。

   WebClientEx myWebClient = new WebClientEx(new CookieContainer());
   CookieCollection cc = new CookieCollection();
   foreach (OpenQA.Selenium.Cookie cook in driver.Manage().Cookies.AllCookies)
   {
        System.Net.Cookie cookie = new System.Net.Cookie();
        cookie.Name = cook.Name;
        cookie.Value = cook.Value;
        cookie.Domain = cook.Domain;
        cc.Add(cookie);
   }
   myWebClient.CookieContainer.Add(cc);

你需要使用這個擴展到 webclient:

public class WebClientEx : WebClient
{
    public WebClientEx(CookieContainer container)
    {
        this.container = container;
    }

    public CookieContainer CookieContainer
    {
        get { return container; }
        set { container = value; }
    }

    private CookieContainer container = new CookieContainer();

    protected override WebRequest GetWebRequest(Uri address)
    {
        WebRequest r = base.GetWebRequest(address);
        var request = r as HttpWebRequest;
        if (request != null)
        {
            request.CookieContainer = container;
        }
        return r;
    }

    protected override WebResponse GetWebResponse(WebRequest request, IAsyncResult result)
    {
        WebResponse response = base.GetWebResponse(request, result);
        ReadCookies(response);
        return response;
    }

    protected override WebResponse GetWebResponse(WebRequest request)
    {
        WebResponse response = base.GetWebResponse(request);
        ReadCookies(response);
        return response;
    }

    private void ReadCookies(WebResponse r)
    {
        var response = r as HttpWebResponse;
        if (response != null)
        {
            CookieCollection cookies = response.Cookies;
            container.Add(cookies);
        }
    }
}

我在這里找到的擴展: Using CookieContainer with WebClient class

循環遍歷 web 驅動程序中的 selenium cookie 並將它們轉換為 System.Net cookie:

    var cookieContainer = new CookieContainer();
    foreach (var cookie in driver.Manage().Cookies.AllCookies)
    {
        System.Net.Cookie netcookie = new System.Net.Cookie()
        {
            Domain = cookie.Domain,
            HttpOnly = cookie.IsHttpOnly,
            Name = cookie.Name,
            Path = cookie.Path,
            Secure = cookie.Secure,
            Value = cookie.Value,
        };
        if (cookie.Expiry.HasValue)
            netcookie.Expires = cookie.Expiry.Value;
        cookieContainer.Add(netcookie);
    }

暫無
暫無

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

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