将Selenium Cookies复制到CookieContainer时遇空引用异常
你遇到的NullReferenceException问题很明确——你代码里的header变量(应该是CookieContainer的实例)没有提前初始化就直接调用了Add方法,导致空引用异常。
要实现把Selenium驱动的Cookies导入CookieContainer供WebRequest使用,你需要先创建一个CookieContainer的实例,再逐个转换并添加Cookie。另外,为了保证Cookie能正常工作,建议把Selenium Cookie里的更多属性(比如路径、过期时间)也同步过去,不然可能会出现Cookie不生效的情况。
修正后的完整代码如下:
// 先初始化CookieContainer实例! CookieContainer cookieContainer = new CookieContainer(); foreach (OpenQA.Selenium.Cookie seleniumCookie in driver.Manage().Cookies.AllCookies) { System.Net.Cookie netCookie = new System.Net.Cookie() { Name = seleniumCookie.Name, Value = seleniumCookie.Value, Domain = seleniumCookie.Domain, // 补充Selenium Cookie里的其他关键属性 Path = seleniumCookie.Path, Expires = seleniumCookie.Expiry ?? DateTime.MinValue }; // 往初始化好的CookieContainer里添加Cookie cookieContainer.Add(netCookie); } // 之后把这个cookieContainer赋值给WebRequest的CookieContainer属性 WebRequest request = WebRequest.Create("你的请求URL"); request.CookieContainer = cookieContainer;
关键注意点:
- 必须先实例化
CookieContainer,不能直接用未赋值的变量调用Add方法 - 转换Cookie时同步
Path和Expires属性,避免Cookie因属性缺失无法被正确识别 - 如果Selenium的
Expiry是null(会话型Cookie),可以给System.Net.Cookie.Expires赋值DateTime.MinValue,这样它会被当作会话Cookie处理
内容的提问来源于stack exchange,提问作者Kyllian Lissens
相关产品推荐
相关产品推荐

