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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章