Cefsharp获取网站Cookie

 两个方案

1,获取js内容的方式

        {

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



[本日志由 admin 于 2022-11-09 11:23 PM 更新]
上一篇: VB.NET模拟鼠标事件
下一篇: C#遍历浏览某个文件夹下的所有文件
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: cefsharp
相关日志:
评论: 0 | 引用: 0 | 查看次数: 539
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭

 广告位

↑返回顶部↑