cefSharp 获取和设置 cookie
一 看一下界面:
button名 : button1
textbox名: textBox_cookie
二 html页面
<html> <head> <title>page1</title> </head> <body> this is page 111 <br><a href="page4.html">to page4</a> <script language=javascript> document.cookie="username=Tom&age=22"; </script> </body> </html>
三 代码
两个方案
1,获取js内容的方式
private void button1_Click(object sender, EventArgs e) { Task<CefSharp.JavascriptResponse> t = webBrower.EvaluateScriptAsync("document.cookie"); t.Wait(); var cookie = t.Result.Result; }
2,cefSharp的标准方式
public partial class Form1 : Form { public Form1() { InitializeComponent(); this.Load += Form1_Load; } ChromiumWebBrowser webBrower = null; string cookies; private void Form1_Load(object sender, EventArgs e) { //初始化配置 string path = ""; webBrower = new ChromiumWebBrowser(path); webBrower.Dock = DockStyle.Fill;// 填充方式 webBrower.FrameLoadEnd += WebBrower_FrameLoadEnd; button1.Click += button1_Click; this.Controls.Add(webBrower); //加载测试页面 webBrower.Load("http://localhost/page1.html"); //模拟写入cookie(测试页面,也有一个cookie) var cookieManager = CefSharp.Cef.GetGlobalCookieManager(); cookieManager.SetCookieAsync("http://localhost", new CefSharp.Cookie() { Domain = "localhost", Name = "1", Value = "2", Expires = DateTime.MinValue }); } //加载完成后,获取cookie private void WebBrower_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e) { //注册获取cookie回调事件 ICookieManager cookieManager = webBrower.GetCookieManager(); CookieVisitor visitor = new CookieVisitor(); visitor.SendCookie += visitor_SendCookie; cookieManager.VisitAllCookies(visitor); } /// 回调事件 private void visitor_SendCookie(CefSharp.Cookie obj) { cookies += obj.Domain.TrimStart('.') + "^" + obj.Name + "^" + obj.Value + "\r\n"; } //cefsharp 获取cookie的方法 public class CookieVisitor : CefSharp.ICookieVisitor { public event Action<CefSharp.Cookie> SendCookie; public void Dispose() { } public bool Visit(CefSharp.Cookie cookie, int count, int total, ref bool deleteCookie) { deleteCookie = false; if (SendCookie != null) { SendCookie(cookie); } return true; } } //cookie放到text_cookie上 private void button1_Click(object sender, EventArgs e) { this.textBox_cookie.Text = cookies; } }
PS:如果想在FrameLoadEnd事件中显示
那么代码需要委托,
1 Load增加如下
public Action GetCookie; private void Form1_Load(object sender, EventArgs e) { //绑定获取cookie的委托 GetCookie = () => { Task<CefSharp.JavascriptResponse> t = webBrower.EvaluateScriptAsync("document.cookie"); t.Wait(); var cookie = t.Result.Result; this.textBox_cookie.Text = cookie.ToString(); }; }
2 WFrameLoadEnd增加如下
private void WebBrower_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e) { this.BeginInvoke(GetCookie); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2021-07-21 [WARNING] The POM for com.tenyears:base-common:jar:1.0 is invalid, transitive dependen