一 看一下界面:
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); }