Winform利用Cefsharp提取网页cookie



关键代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using CefSharp.WinForms;
using CefSharp;
namespace WebCookie
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

public class CookieVisitor : CefSharp.ICookieVisitor
{
public event Action<CefSharp.Cookie> SendCookie;
public bool Visit(CefSharp.Cookie cookie, int count, int total, ref bool deleteCookie)
{
deleteCookie = false;
if (SendCookie != null)
{
SendCookie(cookie);
}

return true;
}
}
/// 回调事件
///
string cookies;

private void visitor_SendCookie(CefSharp.Cookie obj)
{
// cookies += obj.Name + “=” + obj.Value + “;”;

}

ChromiumWebBrowser webBrower = null;
private void Form1_Load(object sender, EventArgs e)
{
string path = “”;
webBrower = new ChromiumWebBrowser(path);
webBrower.Dock = DockStyle.Fill;// 填充方式
webBrower.FrameLoadEnd += WebBrower_FrameLoadEnd;
webBrower.LifeSpanHandler = new OpenPageSelf();
this.splitContainer1.Panel2.Controls.Add(webBrower);
}

private void WebBrower_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e)
{
var cookieManager = CefSharp.Cef.GetGlobalCookieManager();

CookieVisitor visitor = new CookieVisitor();
visitor.SendCookie += visitor_SendCookie;
cookieManager.VisitAllCookies(visitor);
}
class CookieMonster : ICookieVisitor
{
readonly List<Tuple<string, string>> cookies = new List<Tuple<string, string>>();
readonly Action<IEnumerable<Tuple<string, string>>> useAllCookies;

public CookieMonster(Action<IEnumerable<Tuple<string, string>>> useAllCookies)
{
this.useAllCookies = useAllCookies;
}

public bool Visit(Cookie cookie, int count, int total, ref bool deleteCookie)
{
cookies.Add(new Tuple<string, string>(cookie.Name, cookie.Value));

if (count == total – 1)
useAllCookies(cookies);

return true;
}
}

private void button1_Click(object sender, EventArgs e)
{
//cookies = “”;
var visitor = new CookieMonster(all_cookies => {
var sb = new StringBuilder();
foreach (var nameValue in all_cookies)
sb.AppendLine(nameValue.Item1 + ” = ” + nameValue.Item2+”;”);
BeginInvoke(new MethodInvoker(() => {
cookies+=sb.ToString();
}));
});
var cookieManager = CefSharp.Cef.GetGlobalCookieManager();

cookieManager.VisitAllCookies(visitor); /**/

textBox_cookie.Text = cookies;
}

internal class OpenPageSelf : ILifeSpanHandler
{
public bool DoClose(IWebBrowser browserControl, IBrowser browser)
{
return false;
}

public void OnAfterCreated(IWebBrowser browserControl, IBrowser browser)
{

}

public void OnBeforeClose(IWebBrowser browserControl, IBrowser browser)
{

}

public bool OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl,
string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures,
IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser)
{
newBrowser = null;
var chromiumWebBrowser = (ChromiumWebBrowser)browserControl;
chromiumWebBrowser.Load(targetUrl);
return true; //Return true to cancel the popup creation copyright by codebye.com.
}
}

private void button2_Click(object sender, EventArgs e)
{
webBrower.Load(textBox_url.Text);
}
}
}