如何在C# Selenium中使用EditThisCookies导出的JSON Cookie
一、明确JSON字段与Selenium Cookie的对应关系
EditThisCookies导出的JSON每个Cookie条目,与Selenium的OpenQA.Selenium.Cookie类属性对应关系如下:
"name"→Cookie.Name(必填)"value"→Cookie.Value(必填)"domain"→Cookie.Domain(必填,格式如.example.com或example.com)"path"→Cookie.Path(默认值为/)"expirationDate"→Cookie.Expires(秒级Unix时间戳,需转换为DateTime;无此字段则为会话Cookie)"secure"→Cookie.Secure(布尔值,标识是否仅通过HTTPS传输)"httpOnly"→Cookie.HttpOnly(布尔值,标识是否禁止JS访问)
二、具体实现代码
1. 定义对应JSON结构的实体类
这里以System.Text.Json序列化为例,定义实体类匹配导出的JSON结构:
public class EditThisCookie { public string name { get; set; } public string value { get; set; } public string domain { get; set; } public string path { get; set; } = "/"; public double? expirationDate { get; set; } public bool secure { get; set; } public bool httpOnly { get; set; } }
2. 读取TXT文件、转换并加载Cookie到Selenium
using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using System.Text.Json; // 1. 读取存储Cookie的TXT文件内容 string cookieJsonContent = File.ReadAllText(@"C:\your-folder\cookies.txt"); // 2. 将JSON反序列化为自定义Cookie对象列表 List<EditThisCookie> rawCookies = JsonSerializer.Deserialize<List<EditThisCookie>>(cookieJsonContent); // 3. 初始化ChromeDriver var chromeOptions = new ChromeOptions(); // 可选:添加浏览器配置,如禁用通知弹窗等 using (IWebDriver driver = new ChromeDriver(chromeOptions)) { // 关键操作:必须先导航到目标站点的任意页面,否则Selenium不允许添加跨域Cookie driver.Navigate().GoToUrl("https://www.your-target-site.com"); // 4. 逐个转换为Selenium Cookie并添加到会话 foreach (var rawCookie in rawCookies) { DateTime? expires = null; if (rawCookie.expirationDate.HasValue) { // 将秒级Unix时间戳转换为DateTime expires = DateTimeOffset.FromUnixTimeSeconds((long)rawCookie.expirationDate.Value).DateTime; } var seleniumCookie = new Cookie( name: rawCookie.name, value: rawCookie.value, domain: rawCookie.domain, path: rawCookie.path, expires: expires, secure: rawCookie.secure, isHttpOnly: rawCookie.httpOnly ); driver.Manage().Cookies.AddCookie(seleniumCookie); } // 5. 刷新页面,即可自动进入登录状态 driver.Navigate().Refresh(); }
三、注意事项
- 必须先访问目标站点:Selenium限制跨域Cookie添加,必须先导航到目标域名的页面后,才能添加对应Cookie。
- 时间戳转换要准确:EditThisCookies导出的
expirationDate是秒级时间戳,需用FromUnixTimeSeconds转换,不要误用毫秒级转换方法。 - 域名格式兼容:导出的
domain字段如果带前缀.(如.example.com),可直接传入Selenium,无需修改。 - 会话Cookie处理:若JSON中无
expirationDate字段,将expires设为null即可,Selenium会自动识别为会话Cookie。
内容的提问来源于stack exchange,提问作者smiley rainbow
相关产品推荐
相关产品推荐

