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

 

posted @   正怒月神  阅读(3322)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享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
点击右上角即可分享
微信分享提示