Копирование файлов cookie Selenium в CookieContainer - PullRequest
0 голосов
/ 16 мая 2018

Я пытался:

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);
}

Но это дало мне NullReference на header.Add(cookie);

Я пытаюсь получить куки моего драйвера Selenium на CookieContainer для использования в WebRequest.

1 Ответ

0 голосов
/ 20 февраля 2019

Вот как ты это делаешь.

   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);

Вам необходимо использовать это расширение для веб-клиента:

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);
        }
    }
}

Расширение, которое я нашел здесь: Использование CookieContainer с классом WebClient

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...