[英]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.